linux logo

Linux AWK pour les débutants

Awk permet de traiter des fichiers texte, c’est presque un langage de programmation tellement il est puissant et permet de faire des chose incroyables en ligne de commande et encore plus dans un script shell.

Quand a-t-on besoin de Awk?

Quand vous avez des fichier de type texte, et qui sont une suite de lignes de même format, typiquement un fichier CSV, que vous devez faire un traitement sur ce fichier afin d’afficher les informations sur un autre format.

Par exemple soit un fichier CSV, qu’on doit transformer en requête SQL afin de faire un import de ce fichier SQL dans une base de données, vous me direz il est possible d’importer un fichier CSV dans PhpMyadmin par exemple, je vous dirai oui mais si vous deviez faire une transformation quelconque?

Soit le fichier texte suivant :

gold     1    1986  USA                 American Eagle
gold     1    1908  Austria-Hungary     Franz Josef 100 Korona
silver  10    1981  USA                 ingot
gold     1    1984  Switzerland         ingot
gold     1    1979  RSA                 Krugerrand
gold     0.5  1981  RSA                 Krugerrand
gold     0.1  1986  PRC                 Panda
silver   1    1986  USA                 Liberty dollar
gold     0.25 1986  USA                 Liberty 5-dollar piece
silver   0.5  1986  USA                 Liberty 50-cent piece
silver   1    1987  USA                 Constitution dollar
gold     0.25 1987  USA                 Constitution 5-dollar piece
gold     1    1988  Canada              Maple Leaf

A première vue ce fichier est de type à séparation par tabulation, car les champs commencent à des positions bien définies, nous allons faire des traitement avec Awk sur ce fichier puis, nous allons transformer en requête SQL chaque ligne.

Commandes basiques de awk

$ awk '/gold' test.txt

ce qui est équivalent à

$ grep gold coins.txt

Si vous ne connaissez pas la commande grep, cette dernière cherche une chaine de caractère dans un fichier ou des fichiers. On fait une recherche de la chaine et on l’affiche. Donc jusqu’ici rien d’extraordinaire, car grep peut le faire. Voyons voir, et si on n’affichait que quelques colonnes, comme la première et  la troisième?

awk '{print $1,$3}' text.txt
gold 1986
gold 1908
gold 1984
gold 1979
gold 1981
gold 1986
gold 1986
gold 1987
gold 1988

On n’est pas obligé d’afficher dans l’ordre, il importe peu, ce qui commence par un signe $, c’est une capture de champ,

awk '{print $3,$2}' test.txt

Le pattern général de awk est:
awk search pattern { program actions } fichier

Par défaut si vous mettez une virgule entre les captures de champs, il y a un espace qui les sépare. Mais comment fiat-on si on a plusieurs espaces?

awk -F";" '{print $1 "    " $3}' test.txt

Création d’une requête SQL avec Awk

Nous allons maintenant faire quelque chose de plus intéressant, transformer ce fichier en une requête SQL. Nous allons donc carrément mettre du SQL dans la commande Awk:

awk -F'\t' '{ print "INSERT INTO prospects (prenom,nom,civilite,email,service,random_id) VALUES (" $3","$2","$4","$1","$5","$6 ")" }' test> import.sql
debian

Linux et la mémoire virtuelle (swap et paged)

Comprendre la mémoire virtuelle sous Linux

Chaque machine (serveur ou  non) dispose d’une quantité limité de mémoire vive. et lorsque trop de process tournent, la RAM peut se révéler insuffisante. L’astuce tès ancienne qui remonte au début de l’histoire des PC est d’utiliser le disque dur (une partie de disque dur) pour émuler la mémoire vive.

On pourrait aussi augmenter la mémoire vive, mais c’est cher. Le disque dur coûte beaucoup moins cher.

Donc on a la situation suivante : utiliser la mémoire du disque dur pour compléter la mémoire RAM.

Le problème avec le disque dur c’est qu’il est quasiment mille fois plus lent que la mémoire vive, mais ça c’est un autre débat.

 

Connaitre l’utilisation de la mémoire virtuelle sur Linux

Tout d’abord une commande très simple pour connaitre la mémoire de votre machine sous Linux :

$ free
[root@ns357817 ~]# free
             total       used       free     shared    buffers     cached
Mem:       2031712    1923280     108432        440      70156    1042944
-/+ buffers/cache:     810180    1221532
Swap:      1046520    1046520          0

Nous avons quelques colonnes nous donnant des informations très utiles, première colonne  la mémoire totale, la seconde la mémoire totale utilisée, la colonne « free » est la mémoire qui résulte de la différence des deux colonnes précédente.

La mémoire « shared » est la mémoire partagée par plusieurs processus en même

Différence entre swap et page memory

Bien que swap et page soient utilisés de façon interchangeable, pour les puristes, il y a paging de mémoire quand seulement une partie d’un process est écrit dans la mémoire virtuelle, il y a swapping de mémoire quand l’intégralité du process est écrit dans la mémoire virtuelle.

Quand les pages sont écrites sur le disque, on parle de page-out, quand les pages reviennent en mémoire vive on parle de page-in.

 

Fonctionnement de la mémoire virtuelle

Lorsqu’un programme démarre, elle passe du disque sur la émoire RAM, c’est le fonctionnement normal. Le page-in est normal donc, de même le page-out s’il se produit de temps en temps aussi est normal, par contre s’il y a beaucoup de page-out (écriture sur le disque), c’est peut-être un signe de trouble, le système va passer beaucoup de temps à écrire sur le disque, ça va ralentir le système, on appelle cela la thrashing. Le page-out n’est donc pas un problème en soi, c’est plutôt son activité intense qui est problématique.

Les outils pour connaitre l’activité de la mémoire virtuelle

Il y a un outil commun, vmstat, qui comme son nom l’indique produit des statistiques d’utilisation de mémoire virtuelle.

Mysql

Comment importer une base de donnée Mysql en ligne de commande

Je sais que pour beaucoup d’entre vous , la méthode préférée est PhpMyadmin pour importer des bases de données.

Mais pour ce qui est de la performance en rapidité, et lorsqu’on a affaire à une grosse base de données, cette méthode n’est pas viable, aussi il va falloir se retrousser les manches et passer en ligne de commande.

 

On parle beaucoup de sauvegarde en ligne de commande mais moins en restauration de base en ligne de commande. Rassurez vous la méthode est simple, il existe une méthode utilisant le mot clé source.

Le problème est qu’il faut se logger dans Mysql et le faire en mode interactif, donc deux étapes.

Cet article décrit une autre méthode en une étape :

mysql -u username -p database_name < file.sql

Il est préférable de donner le chemin complet vers le fichier pour éviter de potentiels problèmes.

 

https://stackoverflow.com/questions/17666249/how-to-import-an-sql-file-using-the-command-line-in-mysql

Mysql

Mysql Link to database cannot be established

si vous avez cette erreur alors que vous pensiez que tout allait bien, c’est vraisemblablement parce que Mysql a ouvert trop de fichier et n’est pas en mesure de traiter avec tout ça.

Mysql est limité à 1024 fichiers ouverts.

J’ai eu cette erreur que l’on ne voit pas très souvent, puisqu’il survient quand on a un grand nombre de sites web sur un même serveur dédié.

C’est ce qui m’est arrivé récemment lorsque j’ai combiné 3 serveur en un. J’avais 3 serveurs avec disque dur classiques, jusqu’au jour ou je me suis décidé à passer sur un serveur avec disque SSD, et plus de RAM. Pour être plus précis c’est le modèle XC SSD que j’ai pris, un octocoeur à 16 Go de Ram. Pour un prix de 15.99€ HT, soit un peu plus de 19 euros TTC (+ 20 € de frais d’installation). Au passage en résiliant deux serveur à 29 et 10 € j’économise 500 euros sur un an, une belle somme. A une époque j’avais pour presque 100 euros mensuel de serveurs, tous sous exploités, aujourd’hui comme je suis monté en compétence en gestion de serveur Linux, j’ai pris le parti de réduire mes coûts au strict minimum.

En configurant bien son serveur, on peut faire des merveilles. Cependant le chemin est semé d’embûches, la preuve pour que la base Mysql est tombée en rade avec une erreur du type :

ERROR 1018 (HY000): Can’t read dir of ‘.’ (errno: 24)

Vous pouvez voir ce que veut dire l’erreur 24 sous Linux avec la commande :

$ perror 24
OS error code  24:  Too many open files

Avec une trentaine de sites et donc de base de données, les 1024 n’allaient pas suffire !

En moins d’une heure, en cherchant sur le net, je suis arrivé à la solution suivante :

il faut affecter à mysql un plus grand nombre de fichiers ouvert. J’ai fixé pour ma part la valeur à 10240, ce qui est dix fois plus, mais vous pouvez aller jusqu’à 1024000, ce qui est souvent le cas si vous avez beaucoup de mutualisés.

Comment hausser la limite de fichiers ouvrable pour mysql

tout d’abord regardons les limites actuelle de votre système :

$ ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 64127
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 64127
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

 

Si vous voulez connaitre les limites pour un utilisateur particulier :

$ su mysql ulimit -a

Si ça déclenche un erreur du genre argument -a inconnu, vous devez d'abord faire un changement utilisateur
$ su mysql
$ ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 64127
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 64127
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Il faut éditer deux fichiers pour lever les limites.

$ vi /etc/security/limits.conf

mysql hard nofile 1024000
mysql soft nofile 1024000

$ vi /etc/security/limits.d/90-nproc.conf

* soft nofile 1024000
* hard nofile 1024000
* soft nproc 10240
* hard nproc 10240
root soft nproc unlimited


$ vi /etc/my.cnf

[mysqld]
open_files_limit = 1024000

ou

[mysqld_safe]
open_files_limit = 1024000


$ service mysqld restart

Pour vérifier :

$ show global variables like 'open%';

+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| open_files_limit | 102400 |
+------------------+--------+
1 row in set (0.00 sec)

Voilà j’espère que cela aura pu vous aider.

Voici le lien dont je me suis inspiré pour ce tuto :

Plus d’information sur le site officiel de Mysql.

https://duntuk.com/how-raise-ulimit-open-files-and-mysql-openfileslimithttp://i-learnings.blogspot.fr/2012/11/error-1018-hy000-cant-read-dir-of-errno.html

debian

Debian 8 Jessie, comment se logger en tant que root

Si vous avez récemment acquis un serveur dédié et fait l’installation d’un Linux Debian 8, vous aurez la désagréable surprise de constater qu’il est impossible de se logger en tant qu’utilisateur root.

En effet pour des raisons sans doute de sécurité, l’accès root a été désactivé par défaut.

C’est surtout énervant quand vous voulez utiliser WINSCP pour accéder à votre dédié, il est quasiment impossible de changer d’utilisateur en vous connectant, personnellement je n’ai pas réussi.

Il est bien plus facile de réactiver la possibilité de se connecter en root.

Voici la manipulation :

Comme on est en ssh, il faut éditer le fichier /etc/ssh/sshd_config

 

$vi /etc/ssh/sshd_config
changer 
PermitRootLogin without-password
en
PermitRootLogin yes

Maintenant il faut redémarrer le ssh

/etc/init.d/ssh restart

 

https://linuxconfig.org/enable-ssh-root-login-on-debian-linux-server

certificat let's encrypt

Installer un certificat avec Let’s Encrypt

Installer certbot-auto

Je suis sous Debian 7, et apache 2.2

Obtenir la copie de certbot-auto sur son serveur

$ wget https://dl.eff.org/certbot-auto

Rendre exécutable

$ chmod a+x certbot-auto

Exécutez le script :

$./certbot-auto

Patienter quelques minutes le temps d’installer Python et autre configuration, répondez Yes à la question. Ensuite entrez un email pour recevoir des emails, utile en cas de problème, notification de renouvellement, sécurité.

Ensuite le programme va vous lister les domaines qui sont sur votre serveur dédié, entrez les domaine séparés par une virgule ou espace (les nombres pas les noms de domaine). Le message suivant vous demande de sauvegarder le répertoire où tous les fichiers seront sauvegardés.

 To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.

Créer un certificat SSL pour un domaine

Pour ajouter un certificat SSL tapez la commande suivante:

./certbot-auto certonly --webroot -w /home/domaine/public_html -d www.domaine.com -d domaine.com -w /home/sousdomaine/public_html -d sous.domaine.com -w /home/autredomaine/public_html -d www.autredomaine.fr

Que fait certbot-auto avec cette commande?

Il va d’abord créer des CSR, et ensuite les fichiers pem qui sont les clé SSL proprement dites. Un fichier de configuration à inclure au format .conf est créé qui contient les directives SSL pour Apache. Le fichier httpd.conf doit inclure ce fichier pour comprendre les certificats SSL.

Contenu du fichier options-ssl-apache.conf :

# Baseline setting to Include for SSL sites

SSLEngine on

# Intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLCompression          off

SSLOptions +StrictRequire

# Add vhost name to log entries:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common

#CustomLog /var/log/apache2/access.log vhost_combined
#LogLevel warn
#ErrorLog /var/log/apache2/error.log

# Always ensure Cookies have "Secure" set (JAH 2012/1)
#Header edit Set-Cookie (?i)^(.*)(;\s*secure)??((\s*;)?(.*)) "$1; Secure$3$4"

On retrouve les directives qui font fonctionner le SSL :

SSLEngine on

SSLProtocol

SSLCipherSuite

SSLHonorCipherOrder

SSLCompression

SSLOptions

Remarque vous devez avoir activé le module SSL pour Apache avec la commande a2enmod ssl

Les clés au format pem sont dans le sous répertoire live. Il y en a 4, cert.pem, chain.pem (pour Nginx), fullchain.pem (le certificat) et privkey.pem la clé privée (très important à ne pas divulguer). Ces fichiers qu’il ne faut surtout pas déplacer, sont à la base du fonctionnement.

Créer un fichier pour la version https du site

Il faut créer un fichier pour la version SSL (https) de votre site sans quoi ça ne marcherait pas. En gros c’est des lignes de configuration de la même  manière que http, mais englobé dans une directive <IfModule mod_ssl.c>

Voici un exemple

<IfModule mod_ssl.c>
<VirtualHost 163.172.63.51:443>
SuexecUserGroup "#1027" "#1025"
ServerName www.domaine.net

FcgidMaxRequestLen  2000000

DocumentRoot /home/domaine/public_html
ErrorLog /home/domaine/logs/ssl_error_log
CustomLog /home/domaine/logs/ssl_access_log combined
 
<Directory /home/domaine/public_html>
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
allow from all
AllowOverride All Options=ExeCGI,Includes,IncludesNOEXEC,Indexes,Multiviews,SymlinksIfOwnerMatch
AddHandler fcgid-script .php
AddHandler fcgid-script .php5
FCGIWrapper /home/domaine/fcgi-bin/php5.fcgi .php
FCGIWrapper /home/domaine/fcgi-bin/php5.fcgi .php5
AddType application/x-httpd-php .php
Require all granted
</Directory>
SSLCertificateFile /etc/letsencrypt/live/www.domaine.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.domaine.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/www.domaine.net/chain.pem


</VirtualHost>
</IfModule>

J’ai oublié d’ajouter un sous-domaine comment faire?

Le problème survient lorsque vous vous rendez compte que vous auriez aimé aussi émettre un certificat pour un sous-domaine sub.domaine.com, voire tout simplement domaine.com, en effet Let’s Encrypt n’émet que des certificats pour sous domaine, il n’émet pas un certificat qui gère tous les sous-domaines. Dans le commerce il existe des certificats (wildcard) qui gèrent les sous-domaines, ils sont en général trois fois plus chers que les certificats non wildcards.

Pas de problème, car il suffit d’indiquer les sous-domaines pour lesquels vous voulez un certificat.

Cela se fait avec l’argument expand. (**Voir la nouvelle méthode plus efficace**)

certbot-auto --expand -d existing.com,example.com,newdomain.com

« expand » va dire à certbot de mettre à jour le certificat existant avec un nouveau certificat qui contient les domaines existants et va y ajouter le ou les nouveaux domaines (ou sous domaine). En fait ce que je viens de dire signifie que pour deux domaines distincts, vous pouvez créer deux certificats distincts OU un seul certificat qui va fonctionner pour les deux domaines distinct. Voir la documentation officielle pour ces manipulations.

Vous devez indiquer tous les sous-domaines y compris les sous-domaine déjà pris en compte par le certificat, c’est un peu fastidieux à écrire, sinon vous allez exclure le ou les sous-domaines non énumérés dans la commande.

update : maintenant il y a une meilleure façon de faire plus précise et plus intuitive en utilisant le flag –cert-name

./certbot-auto --cert-name www.domaine.com -d www.domaine.com,blog.domaine.com,support.domaine.com

Vous devez indiquer tous les sous-domaines y compris les sous-domaine déjà pris en compte par le certificat, c’est un peu fastidieux à écrire, sinon vous allez exclure le ou les sous-domaines non énumérés dans la commande.

$ ./certbot-auto --apache certonly --expand -d domaine.com,www.domaine.com
la sortie à l'écran :
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for domaine.com
tls-sni-01 challenge for www.domaine.com
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0003_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0003_csr-certbot.pem

N’oubliez pas de redémarrer Apache en faisant :

service apache2 restart

Comment effacer un certificat?

Effacer un certificat en effaçant simplement les répertoire, mais non en fait ce n’est pas une bonne solution. Il y a une commande exprès pour ça :

certbot-auto delete --cert-name mondomaine.com

La validité des certificats de Lets’Encrypt est seulement de 90 jours, au-delà il vous faut renouveler avec la commande renew. Vous pouvez effacer à la main en utilisant un programme comme WinSCP par exemple.

Nous allons automatiser ce renew pour ne pas l’oublier, avec un crontab.

Le flag -n veut dire qu’on n’est pas en interactif, c’est à dire que le prompt ne va pas vous demander de taper une touche du clavier pour continuer le process, c’est nécessaire quand vous voulez fiare une tache CRON qui va renouveler automatiquement.

Efface un certificat Letsencrypt The Right Way!

Mais avant je vais vous lister une commande pour lister les certificats déjà en place:

Lister les certificats générés

./certbot-auto certificates

Found the following certs:
 Certificate Name: www.domaine.fr
 Domains: www.domaine.fr
 Expiry Date: 2017-12-29 15:11:49+00:00 (VALID: 78 days)
 Certificate Path: /etc/letsencrypt/live/www.domaine.fr/fullchain.pem
 Private Key Path: /etc/letsencrypt/live/www.domaine.fr/privkey.pem
 Certificate Name: www.domaine.com
 Domains: www.domaine.com
 Expiry Date: 2017-12-23 18:28:00+00:00 (VALID: 72 days)
 Certificate Path: /etc/letsencrypt/live/www.domaine.com/fullchain.pem
 Private Key Path: /etc/letsencrypt/live/www.domaine.com/privkey.pem

Cette commande est très utile, elle vous donne la liste des certificats et les jours avant expiration.

$./certbot-auto delete --cert-name www.domaine.com



-------------------------------------------------------------------------------
Deleted all files relating to certificate www.domaine.com.
-------------------------------------------------------------------------------

Supplément : rediriger les anciennes url vers la version sécurisée:

RedirectMatch permanent ^/(.*) https://www.domaine.fr/$1

Vous pouvez mettre cette directive dans le fichier de configuration du virtual host.

Les pièges du certificat SSL

Toujours considérer la version non www

J’insisterai en particulier sur la création pour le sous-domaines sans www. Par exemple www.domaine.com, www est le sous domaine, en vrai le domaine c’est domaine.com.

Donc si vous avez un site www.domaine.com et que vous vouliez rediriger domaine.com vers www.domaine.com, il vous faut aussi intégrer ce sous-domaine dans le certificat. Parce que si vous ne le faites pas, tout requête de domaine.com  va se solder par un avertissement comme quoi le site n’est pas sécurisé et qu’il vous faut confirmer l’exception de sécurité. Cela étant déjà un problème pour un humain, imaginez Google !

Non mais j’ai fait une redirection 301 vers le www.domaine.com

Et non ça ne marche pas comme ça ! Quand vous faites une requête HTTP à domaine.com, il doit le résoudre domaine.com avec de faire le redirection, et sans certificat SSL, il ne pourra le résoudre, dans votre redirection 301 tombe à l’eau.

Ok je m’en fiche Google aura une erreur sur ce sous-domaine c’est pas grave

Là encore je suis désolé, dans le cas où vous avez un dédié tournant sous Apache (cas que je connais) avec plusieurs virtual host (donc plusieurs domaines), si le domaine.com est résolu manuellement (forçage SSL), il va pointer sur un autre site, en fait le premier qu’Apache aura trouvé.

serveur web apache php

Différence entre une zone et un domaine

Une zone est une portion d’un domaine.

Relation entre une zone et son parent : Par exemple sousdomaine.example.com a pour parent example.com

http://stackoverflow.com/questions/22440582/difference-between-a-dns-zone-and-dns-domain

Retour en haut