Polar55 propose un hébergement web adapté aux développeurs. Vous avez donc naturellement accès au terminal, aussi bien via SSH que directement depuis votre cPanel.
Utiliser le terminal peut sembler un peu intimidant, et peu de personnes savent par où commencer. Avec l’IA, c’est toutefois devenu beaucoup plus simple : vous pouvez copier les commandes qu’elle vous fournit dans le terminal, puis lui transmettre le résultat. Elle peut ensuite vous proposer une nouvelle commande en fonction de ce que vous souhaitez examiner.
Dans ce guide, nous allons vous montrer quelques exemples d’utilisation du terminal. Il est toutefois important de souligner que cette approche devient vraiment efficace lorsque vous faites appel à une IA pour générer vos commandes et analyser leurs résultats.
Examiner une utilisation élevée du CPU et un éventuel trafic de bots
Votre hébergement web utilise beaucoup de CPU ou votre site est lent ? Cela peut être dû à des bots automatisés ou à de nombreuses requêtes répétées vers votre site.
Le terminal cPanel vous permet d’examiner le trafic de vos sites. Vous trouverez Terminal dans Advanced → Terminal dans cPanel. Les commandes ci-dessous sont en lecture seule et ne modifient rien sur votre compte d’hébergement.
Identifier les User-Agents les plus actifs
Un User-Agent est la chaîne d’identification qu’un navigateur ou un bot envoie avec sa requête. La commande suivante indique quels User-Agents ont effectué le plus de requêtes ayant reçu une réponse HTTP 200 au cours des 60 dernières minutes :
grep -hE "$(for i in $(seq 0 59); do LC_ALL=C date -d "$i minutes ago" '+%d/%b/%Y:%H:%M'; done | paste -sd'|' -)" \
~/access-logs/* 2>/dev/null \
| awk -F'"' '$3 ~ /^ 200 / {
ua=$6;
if (ua=="") ua="-";
print ua
}' \
| sort | uniq -c | sort -nr | head -100
Exemple de résultat :
1662 Mozilla/5.0 ... Edg/156.0.0.0
810 Mozilla/5.0 ... Chrome/156.0.0.0 Mobile
479 WP Rocket/Preload
96 Mozilla/5.0 ... bingbot/2.0
Le nombre à gauche indique le nombre de requêtes. Si un User-Agent se démarque nettement, vous pouvez examiner les adresses IP dont provient le trafic.
Remarque : Un grand nombre de requêtes n’est pas forcément suspect. Par exemple, WP Rocket peut générer de nombreuses requêtes lors de la création du cache. Les User-Agents peuvent également être falsifiés. La commande affiche uniquement les réponses HTTP 200, et non les réponses HTTP 403 ou 429, par exemple.
Identifier les adresses IP derrière un User-Agent précis
Copiez le User-Agent que vous souhaitez examiner et collez-le entre les guillemets après UA=. Ici, nous prenons Microsoft Edge comme exemple :
UA='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 Edg/156.0.0.0'
grep -hE "$(for i in $(seq 0 59); do LC_ALL=C date -d "$i minutes ago" '+%d/%b/%Y:%H:%M'; done | paste -sd'|' -)" \
~/access-logs/* 2>/dev/null \
| awk -F'"' -v ua="$UA" '
$3 ~ /^ 200 / && $6 == ua {
split($1,a," ")
print a[1]
}
' \
| sort | uniq -c | sort -nr | head -20
Exemple de résultat :
865 192.0.2.10
591 198.51.100.20
1 203.0.113.30
Vous pouvez voir ici que la majorité des requêtes proviennent de deux adresses IP.
Bloquer une adresse IP via cPanel
Si vous avez examiné le trafic et estimez qu’une adresse IP pose problème, vous pouvez la bloquer via cPanel :
- Connectez-vous à cPanel.
- Ouvrez Security → IP Blocker.
- Saisissez l’adresse IP que vous souhaitez bloquer.
- Cliquez sur Add.
- Répétez l’opération pour d’autres adresses IP si nécessaire.
Vous pourrez débloquer l’adresse IP au même endroit ultérieurement. Gardez à l’esprit qu’une adresse IP peut aussi appartenir à un visiteur légitime ou à une connexion Internet partagée.
Déterminer quel domaine reçoit le plus de trafic
Si vous hébergez plusieurs sites sur le même compte cPanel, vous pouvez déterminer quel domaine a reçu le plus de requêtes au cours des 60 dernières minutes. Cela peut vous aider à identifier le site à examiner de plus près lorsque l’utilisation du CPU est élevée.
python3 - <<'PY'
import glob
import json
import os
import re
import subprocess
from collections import Counter
from datetime import datetime, timedelta
now = datetime.now().astimezone()
start = now - timedelta(minutes=60)
counts = Counter()
domains = {}
# Retrouver la correspondance correcte des domaines dans cPanel
try:
result = subprocess.run(
['uapi', '--output=json', 'DomainInfo', 'domains_data'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
timeout=15
)
if result.returncode == 0:
response = json.loads(result.stdout)
data = response.get('result', {}).get('data') or {}
for category in ('addon_domains', 'sub_domains'):
for item in data.get(category) or []:
if not isinstance(item, dict):
continue
internal = item.get('servername')
public = item.get('domain')
if internal and public:
domains[internal] = public
main = data.get('main_domain') or {}
if isinstance(main, dict):
internal = main.get('servername')
public = main.get('domain')
if internal and public:
domains[internal] = public
except (OSError, ValueError, subprocess.TimeoutExpired):
pass
# Parcourir les journaux d’accès des 60 dernières minutes
seen = set()
for path in glob.glob(os.path.expanduser('~/access-logs/*')):
try:
if not os.path.isfile(path):
continue
stat = os.stat(path)
identity = (stat.st_dev, stat.st_ino)
# Éviter de lire le même fichier via plusieurs liens physiques
if identity in seen:
continue
seen.add(identity)
name = os.path.basename(path)
name = re.sub(r'-ssl_log$', '', name)
# Afficher le nom de domaine correct fourni par cPanel
domain = domains.get(name, name)
with open(path, errors='replace') as logfile:
for line in logfile:
match = re.search(r'\[([^\]]+)\]', line)
if not match:
continue
try:
timestamp = datetime.strptime(
match.group(1),
'%d/%b/%Y:%H:%M:%S %z'
)
except ValueError:
continue
if start <= timestamp <= now:
counts[domain] += 1
except OSError:
continue
print('REQUÊTES PAR DOMAINE – 60 DERNIÈRES MINUTES')
print()
for domain, count in counts.most_common():
print('{:8} {}'.format(count, domain))
PY
Exemple de résultat :
REQUÊTES PAR DOMAINE – 60 DERNIÈRES MINUTES
4821 site-a.fr
936 site-b.fr
124 site-c.fr
Dans cet exemple, site-a.fr reçoit beaucoup plus de trafic que les autres sites.
Un grand nombre de requêtes ne signifie toutefois pas nécessairement une utilisation élevée du CPU. Une seule requête WordPress gourmande en ressources peut solliciter davantage le serveur que de nombreuses requêtes mises en cache. Ces chiffres constituent donc un indice, et non une mesure directe de l’utilisation du CPU.
Examiner l’utilisation de l’espace disque et trouver les fichiers les plus volumineux
Votre compte d’hébergement manque d’espace disque ? Le terminal vous permet de trouver les fichiers les plus volumineux de votre compte. C’est particulièrement utile pour repérer d’anciennes sauvegardes, de gros fichiers journaux et d’autres fichiers qui ne sont peut-être plus nécessaires.
Trouver les 20 fichiers les plus volumineux
find ~ -type f -printf '%s %p\n' 2>/dev/null \
| sort -nr | head -20 \
| awk '{printf "%.1f MB %s\n", $1/1048576, $2}'
Exemple de résultat :
1850.4 MB /home/user/backups/backup-old.zip
724.2 MB /home/user/public_html/wp-content/backup.zip
312.8 MB /home/user/public_html/error_log
Soyez patient : La commande peut prendre plusieurs minutes, surtout si votre compte contient de nombreux fichiers.
Cette commande permet de repérer les possibilités de libérer de l’espace sur votre hébergement. Elle ne supprime rien.
Important : Ne supprimez jamais de fichiers si vous ne savez pas à quoi ils servent. Examinez-les éventuellement dans le gestionnaire de fichiers de cPanel avant de les supprimer.