cipi app create

cipi app create prend en charge deux types d'applications : Laravel (par défaut) et Personnalisé (--custom). Les applications Laravel bénéficient d'un environnement entièrement isolé : Utilisateur Linux, pool PHP-FPM ou Laravel Octane (FrankenPHP) depuis v5.0, Nginx vhost, base de données (MariaDB par défaut ; facultatif PostgreSQL depuis v4.8.0), Supervisor Worker, entrée crontab, versions de déploiement sans temps d'arrêt, SSH clé de déploiement et compilation automatique .env. Les applications personnalisées sont plus simples – voir applications personnalisées pour plus de détails.

Application Laravel (par défaut : PHP-FPM)

coup
$ cipi app create

Laravel Octane (FrankenPHP)

coup
$ cipi app create --octane
$ cipi app create --octane=frankenphp   # explicit (same as --octane)

Voir Laravel Octane pour les exigences, la conversion et comment le vhost diffère du FPM.

Non interactif (drapeaux)

coup
$ cipi app create \
    --user=myapp \
    --domain=myapp.com \
    --repository=git@github.com:you/myapp.git \
    --branch=main \
    --php=8.5

# Laravel Octane (FrankenPHP) — v5.0+
$ cipi app create --user=myapp --domain=myapp.com \
    --repository=git@github.com:you/myapp.git --octane

# optional PostgreSQL (v4.8.0+, after cipi db install pgsql)
$ cipi app create --user=myapp --domain=myapp.com \
    --repository=git@github.com:you/myapp.git --engine=pgsql
--userNom d'utilisateur Linux pour l'application. Doit être unique, minuscule, alphanumérique.
--domainDomaine principal (par ex. myapp.com). Utilisé pour l'hôte virtuel Nginx et APP_URL.
--repositoryURL SSH Git (par ex. git@github.com:you/repo.git). Doit être SSH, pas HTTPS.
--branchBranche à déployer. La valeur par défaut est main.
--phpVersion PHP pour cette application (par ex. 8.5). La valeur par défaut est PHP 8.5. Doit être une version installée – uniquement 8.3, 8.4 et 8.5 sont acceptés depuis la v4.5.4 (Deployer 8 nécessite PHP ≥ 8.3).
--octane / --octane=frankenphpServir HTTP via Laravel Octane (FrankenPHP) au lieu de PHP-FPM (puisque v5.0). Laravel applications uniquement – rejetées avec --custom. Voir Laravel Octane.
--engineMoteur de base de données : mariadb (par défaut) ou pgsql (depuis la v4.8.0 ; nécessite cipi db install pgsql). Des invites de création interactives lorsque PostgreSQL est installé. Écrit la correspondance .env / connection URL.
Si un jeton GitHub ou GitLab est configuré, Cipi ajoute automatiquement la clé de déploiement SSH et crée le webhook sur le référentiel – aucune étape manuelle n'est nécessaire. Voir Configuration automatique de Git pour les instructions de configuration et options de secours lorsque la configuration automatique n’est pas disponible.

Laravel Octane (FrankenPHP)

Depuis v5.0, Laravel applications peuvent servir HTTP via Laravel Octane avec le FrankenPHP serveur au lieu d'un par application Piscine PHP-FPM. Octane et les applications FPM classiques s'exécutent côte à côte sur le même serveur Cipi.

Ce que Cipi configure

  • Alloue un port localhost dans 8100–8999 et magasins octane / octane_port dans apps.json
  • Nginx vhost utilise proxy_pass à Octane et sert les fichiers statiques de current/publicpas de pool FPM par application
  • Programme Supervisor ${app}-octane aux côtés des travailleurs de la file d'attente
  • Modèle de déploiement laravel-octane.php redémarre/recharge Octane lors du déploiement
  • .env: OCTANE_SERVER=frankenphp, OCTANE_HTTPS=true

Exigences de l'application

Votre référentiel Laravel doit inclure laravel/octane et courir php artisan octane:install --server=frankenphp. Octane commence après le premier déploiement réussi.

coup
# create an Octane app
$ cipi app create --user=myapp --domain=myapp.com \
    --repository=git@github.com:you/myapp.git --octane

# convert an existing FPM app → Octane (or the reverse)
$ cipi app convert myapp --to=octane
$ cipi app convert myapp --to=fpm

# tune Octane workers (also see app limits)
$ cipi app limits myapp --octane-workers=4

cipi app convert --to=octane|fpm réécrit le pool / vhost / Supervisor / Deployer modèle / .env, et réapplique SSL lorsqu'un certificat est déjà présent.

Conseil Octane : maintenir le travail en file d'attente de longue durée cipi worker ou Horizon — Octane gère uniquement HTTP. Associer avec Reverb pour les WebSockets.

cipi app create --custom

Crée un application personnalisée avec déploiement classique (pas de temps d'arrêt nul) : le code est déployé dans htdocs — non current/shared liens symboliques. Idéal pour les sites statiques, SPA (Vue, React, Svelte), WordPress, autres CMS ou tout projet ou framework non Laravel PHP.

Lors de la création, vous choisissez uniquement la racine du document (par défaut /, ou par ex. www, dist, public). Nginx est préconfiguré avec index index.html index.php, try_files $uri $uri/ /index.php?$args, et error_page 404 /404.html - aucune invite pour try_files ou point d'entrée.

Git facultatif (SFTP uniquement)

Le dépôt Git est facultatif pour les applications personnalisées. Laravel les applications nécessitent toujours un référentiel. Si vous ignorez le référentiel pour un application, Cipi crée /home/<app>/htdocs avec un espace réservé index.html et fait ne configurez pas de clé de déploiement ou webhook — vous téléchargez des fichiers avec SFTP (ou SCP/rsync) à ~/htdocs en tant qu'utilisateur de l'application. La sortie d'intégration explique ce "pas de dépôt - SFTP uniquement" flux de travail. Si vous fournissez un référentiel, le comportement reste inchangé : utilisez cipi deploy <app> pour extraire le code htdocs.

Ce qui est inclus et ce que vous ajoutez

Les applications personnalisées ont pas de base de données, non .env, non cron et non travailleurs de la file d'attente. Lorsqu'un référentiel est configuré, une clé de déploiement et (avec la configuration automatique de Git) webhook sont montré ; pour les applications SFTP uniquement, celles-ci sont omises. Le résumé post-création répertorie l'accès SSH et les éléments suivants étapes en conséquence.

Si votre application personnalisée nécessite une base de données (par exemple WordPress, Drupal), créez-en une avec cipi db create --name=<app> après le déploiement. Voir cipi dB pour la sauvegarde, la restauration et la gestion des mots de passe.

Avec Git — exemple non interactif :

coup
$ cipi app create --custom --user=mysite --domain=mysite.com \
    --repository=git@github.com:you/mysite.git --docroot=dist

SFTP uniquement : omettre --repository et --branch:

coup
$ cipi app create --custom --user=mysite --domain=mysite.com --docroot=dist

Avec un référentiel, utilisez cipi deploy <app> déployer; le code est cloné dans /home/<app>/htdocs.

app list / app show / app edit / app delete

Commande Descriptif
cipi liste d'applications Répertoriez toutes les applications avec le domaine, la version PHP et le statut ((suspended) quand hors ligne)
cipi application afficher <application> Détails complets : domaine, PHP, clé de déploiement, nœuds de calcul, webhook, état de suspension. Pour les applications personnalisées : tapez « Personnalisé », docroot ; webhook (et clé de déploiement) omis lorsque SFTP uniquement sans référentiel.
cipi modification de l'application <application> --php=8.5 Version PHP remplaçable à chaud. Mises à jour du pool FPM, du socket Nginx, Supervisor, crontab, Deployer configuration, et .env — zéro temps d'arrêt
cipi modification de l'application <app> --branch=develop Changer la branche de déploiement
cipi modification de l'application <app> --domain=new.example.com Renommez le domaine principal (puisque v4.6.2). Valide le format et l'unicité, déplace l'ancien principal vers des alias, régénère le vhost Nginx, met à jour APP_URL, actualise les webhooks Git lorsqu'ils sont automatiquement configurés et réédite Let's Encrypt lorsqu'un certificat existait déjà
cipi modification de l'application <app> --repository=<SSH-URL> Attachez ou modifiez le référentiel Git (par exemple, activez le déploiement sur une application personnalisée SFTP uniquement) créé sans --repository). Composable avec --branch, --php, et --domain
cipi app edit <app> --node-build='npm ci && npm run build' Exécutez une build Node après Composer fournisseurs à chaque déploiement (depuis v5.0). Le déployeur s'exécute .deployer/node-build.sh (fermé sur échec ; la commande est validée). Effacer avec --no-node-build
cipi modification de l'application <app> --predeploy-snapshot Activez un dump de base de données avant chaque déploiement (puisque v5.0). Même comportement que le dépassement --snapshot sur chacun cipi deploy. Voir Pré-déployer des instantanés de base de données
cipi conversion d'application <app> --to=octane|fpm Convertir entre PHP-FPM et Laravel Octane (depuis v5.0). Voir Laravel Octane
cipi app env <app> [--show|--get|--set|--unset] Ouvrez l'application .env en nano, ou gérer les clés de manière non interactive puisque v5.0.3 (--show/--get/--set/--unset, facultatif --json). Quitte avec une erreur pour les applications personnalisées (pas de .env).
cipi exécution de l'application <app> <cmd> [args…] Commande non interactive sur liste blanche en tant qu'utilisateur de l'application (depuis v5.0.3). Voir app run
cipi application déployer-config <application> Options de recette du déploiement structuré (depuis v5.0.3). Voir déployer-config
cipi application webhook recréer <app> [--rotate-secret] Recréez le déploiement GitHub/GitLab webhook ; rotation secrète facultative mises à jour CIPI_WEBHOOK_TOKEN (depuis v5.0.6). REPOS :POST /api/apps/{name}/webhook/recreate (PHP 1.15.0+). Depuis 5.0.6, app edit --repository= recrée uniquement webhook/clé de déploiement lorsque l'URL du référentiel change réellement.
cipi réinitialisation du mot de passe de l'application <app> Régénérez le mot de passe SSH de l'utilisateur Linux de l'application. Le nouveau mot de passe s'affiche sur écran - enregistrez-le immédiatement
cipi application réinitialiser-db-password <app> Régénérez le mot de passe de la base de données de l'application (MariaDB ou PostgreSQL par application engine) et mettre à jour automatiquement DB_PASSWORD dans l'application .env. Quitte avec une erreur pour les applications personnalisées (pas de base de données).
cipi application supprimer <app> Supprimez définitivement l'application, l'utilisateur, la base de données (si Laravel), l'hôte virtuel Nginx, le pool FPM et Supervisor travailleurs. Pour les applications personnalisées, ignore la suppression de la base de données (aucune n'a été créée). Demande confirmation.
cipi suppression de l'application <app> --force Identique à delete mais ignore l'invite de confirmation — pour les scripts, le panneau API et cipi-cli

cipi app reverb

Depuis v5.0, activez Laravel Reverb pour les WebSockets propriétaires sur un Application Laravel. Cipi alloue un port localhost dans 9000–9099, ajoute le programme Supervisor ${app}-reverb, procurations Nginx /app à ce port, et écrit REVERB_* dans .env.

coup
$ cipi app reverb enable myapp
$ cipi app reverb status myapp
$ cipi app reverb disable myapp

cipi app clone

Depuis v5.0, clonez une application Laravel existante dans une nouvelle application de préparation (ou de révision) avec son propre domaine. Ensembles cloned_from dans apps.json; fait pas copiez webhook ou les identifiants git.

coup
$ cipi app clone myapp --domain=staging.myapp.com
$ cipi app clone myapp --domain=staging.myapp.com --name=myapp-stg --branch=develop --with-db
$ cipi app clone myapp --domain=staging.myapp.com --no-db
--domainObligatoire. Domaine principal de la nouvelle application.
--nameNom d'utilisateur Linux facultatif pour le clone.
--branchBranche de déploiement pour le clone (par défaut, la branche branche de l'application source).
--with-dbCréez une nouvelle base de données pour le cloner.
--no-dbIgnorer le provisionnement de la base de données pour le cloner.

cipi app limits

Depuis v5.0, définissez des limites de ressources par application avec des plafonds stricts appliqués par Cipi.

coup
$ cipi app limits myapp --fpm-max-children=20 --memory-limit=256M
$ cipi app limits myapp --octane-workers=4 --worker-procs=3
$ cipi app limits myapp   # show current limits
--fpm-max-childrenPHP-FPM pm.max_children pour les applications FPM.
--memory-limitPHP memory_limit.
--octane-workersOctane nombre de travailleurs pour FrankenPHP applications.
--worker-procsProcessus de travail de file d'attente Supervisor compter.

app suspend / app unsuspend

Disponible depuis v4.5.8. Mettre une application hors ligne sans la supprimer : utile pour la facturation les retenues, les fenêtres de maintenance ou les sites de préparation que vous souhaitez complètement sombres. La suspension remplace le vhost Nginx par un statique HTTP 503 page servie à partir de /var/www/cipi-suspended/.

coup
$ cipi app suspend myapp      # take offline (503 page)
$ cipi app unsuspend myapp    # restore normal vhost
Commande Descriptif
cipi suspension de l'application <application> Ensembles suspended: true dans apps.json, reconstruit le vhost en retournez 503 pour toutes les demandes. Idempotent si déjà suspendu.
cipi application réactive <app> Efface l'indicateur, restaure le vhost Laravel/personnalisé normal et réapplique les blocs SSL. Idempotent si déjà en ligne.

Comportement

  • HTTPS inclus — certbot clone le vhost suspendu dans le :443 bloquer, donc HTTPS affiche également la page hors ligne
  • Let's Encrypt fonctionne toujours — le /.well-known/acme-challenge/ chemin reste public afin que les certificats puissent être délivrés ou renouvelés pendant leur suspension
  • Survit à la régénération du vhost — changements d'alias, modifications PHP et installations SSL respecter le drapeau suspendu
  • Visible dans les annoncescipi app list marque les applications suspendues ; cipi domains ajoute ⏸ suspended sur chaque ligne
Suspendre ou authentification de base : cipi basicauth affiche une invite de connexion mais exécute toujours votre application. app suspend arrête complètement PHP et sert une page statique hors ligne : les visiteurs n'atteignent jamais Laravel. Utilisez suspendre pour « site fermé » ; authentification de base pour « aperçu sur invitation uniquement ».

Également disponible via le REPOS API (POST /api/apps/{name}/suspend), cipi-cli (apps suspend), et le Module WHMCS (Suspendre / Réactiver les boutons). Nécessite une capacité de jeton apps-suspend pour l'accès API.

cipi basicauth

Disponible depuis v4.5.2. Protégez n'importe quelle application (Laravel ou personnalisée) derrière un Nginx invite de nom d'utilisateur/mot de passe. Utile pour les sites de test, les outils internes ou les applications qui ne sont pas prêtes à être utilisées. circulation publique.

Commande Descriptif
cipi basicauth activer <app> [--user=NAME] [--password=PASS] Activez l'authentification de base HTTP. Les informations d'identification sont générées lorsqu'elles sont omises et affichées une fois écran - enregistrez-les immédiatement
cipi basicauth désactiver <app> Supprimez l'invite et effacez les informations d'identification stockées
cipi statut basicauth <application> Afficher si l'authentification de base est activée et l'utilisateur configuré

Les informations d'identification sont hachées avec openssl passwd -apr1 (non apache2-utils nécessaire) et stocké dans /etc/nginx/cipi-basicauth/<app>.htpasswd; l'État activé vit dans apps.json. Le auth_basic les directives sont injectées par location bloquer, donc la protection survit à la régénération du vhost (changements d'alias, modifications PHP) et est clonée dans le :443 bloquer par certbot — HTTPS est également couvert. Les défis de l'ACME restent public, de sorte que la délivrance et le renouvellement des certificats ne sont jamais bloqués. L'authentification de base est automatiquement supprimée cipi app delete.

Ceci est distinct de cipi auth, qui gère le Composer auth.json pour les référentiels de packages privés.

Gestion des variables ENV

Chaque Laravel l'application a un seul .env dossier vivant à /home/<app>/shared/.env. Les applications personnalisées n'ont pas .env. Il est créé et pré-rempli par Cipi lors app create avec la base de données informations d'identification, APP_KEY, APP_URL, les paramètres de cache/session/file d'attente et les Jeton webhook. Le shared/ Le répertoire est lié symboliquement à chaque version, donc le même .env est toujours actif quelle que soit la version actuelle.

Modifier de manière interactive via CLI

Le moyen le plus sûr de modifier les valeurs ENV consiste à utiliser Cipi lui-même : il ouvre le fichier dans nano en tant qu'application. utilisateur, avec les autorisations appropriées :

coup
$ cipi app env myapp

Économisez avec Ctrl+O puis sortez avec Ctrl+X. Les modifications prennent effet immédiatement pour les nouveaux requêtes – aucun redémarrage n’est nécessaire pour la plupart des valeurs. Si vous modifiez la connexion à la file d'attente ou le pilote de cache, redémarrez les travailleurs :

coup
$ cipi worker restart myapp

Indicateurs non interactifs (v5.0.3+)

Depuis v5.0.3, les scripts, le panneau API et le web GUI peuvent gérer.env sans ouvrir un éditeur :

coup
$ cipi app env myapp --show
$ cipi app env myapp --show --json
$ cipi app env myapp --get=APP_URL
$ cipi app env myapp --set=APP_DEBUG=false
$ cipi app env myapp --unset=LEGACY_KEY

REPOS : GET|PUT /api/apps/{name}/env (capacité apps-env, PHP 1.14+). MCP : AppEnvShow, AppEnvUpdate.

Modifier directement via SSH

Vous pouvez également modifier le fichier directement via SSH en tant qu'utilisateur root ou en tant qu'utilisateur de l'application :

coup
# as root
$ nano /home/myapp/shared/.env

# or switch to the app user first
$ su - myapp
$ nano ~/shared/.env

Variables ENV clés définies par Cipi

Variable Descriptif Défini par
APP_KEY Clé de chiffrement Laravel — générée une fois lors de la création de l'application Cipi
APP_URL Mis à jour automatiquement par cipi ssl install Cipi
DB_CONNEXION mysql pour MariaDB (compatible drop-in), ou pgsql quand l'application le moteur est PostgreSQL (v4.8.0+) Cipi
DB_DATABASE / DB_USERNAME / DB_PASSWORD Informations d'identification générées automatiquement pour la base de données isolée de l'application Cipi
CACHE_STORE database — utilise la base de données de l'application Cipi
SESSION_DRIVER database Cipi
QUEUE_CONNECTION database Cipi
CIPI_WEBHOOK_TOKEN Secret HMAC pour la validation de cipi-agent webhook Cipi
CIPI_APP_USER Nom d'utilisateur Linux propriétaire de cette application Cipi
CIPI_MCP Activez ou désactivez le serveur MCP intégré à /cipi/mcp Utilisateur (true par défaut)
Ne modifiez pas les informations d'identification de la base de données manuellement. Si vous devez régénérer la base de données utilisation du mot de passe cipi db password myapp (ou cipi app reset-db-password myapp) — il met à jour à la fois le moteur et le .env atomiquement. Les modifier à la main risque de désynchroniser les deux.

Ajouter vos propres variables

Ajoutez n'importe quelle variable personnalisée au bas du fichier comme vous le feriez normalement dans un projet Laravel. Ils sont préservés à travers les déploiements car les .env vit dans shared/ et est jamais écrasé par Deployer.

env
# your custom variables
STRIPE_KEY=sk_live_...
STRIPE_SECRET=sk_live_...
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailgun.org

cipi app run

Depuis v5.0.3, exécutez un liste blanche non interactive commande comme application utilisateur — utile à partir du CLI, du panneau API et du Web GUI « Commandes de l'application ». Éditeurs, pagers, shells et Les REPL sont bloqués (nano, vim, less, bash, tinker,…). Indicateurs interactifs (par ex. tail -f, php -a) sont rejeté.

coup
$ cipi app run myapp composer install --no-dev
$ cipi app run myapp npm ci
$ cipi app run myapp ls -la shared
$ cipi app run --commands          # list allowed binaries
$ cipi app run --commands --json

Les binaires autorisés incluent composer, npm/npx/yarn/pnpm, ls/ll, cat/head/tail, système de fichiers aides, archives, git, php, node, et find. REPOS : POST /api/apps/{name}/run (travail asynchrone, capacité apps-run) et GET /api/run-commands (PHP 1.14+). MCP : AppRun, AppRunCommands.

v5.0.4+ fixe /usr/bin/env: '--': No such file or directory — chaque commande sur liste blanche (y compris les commandes d'application GUI) a échoué avant ce correctif. Courir cipi self-update.

cipi app logs

Enregistrez les journaux des applications en temps réel. Les journaux sont alternés quotidiennement et conservés pendant 14 jours. Par par défaut, tous les journaux sont affichés, y compris les journaux quotidiens Laravel (laravel-YYYY-MM-DD.log) de shared/storage/logs/.

coup
$ cipi app logs myapp                  # all logs (incl. Laravel daily logs)
$ cipi app logs myapp --type=nginx     # Nginx access + error
$ cipi app logs myapp --type=php       # PHP-FPM errors
$ cipi app logs myapp --type=worker    # queue worker output
$ cipi app logs myapp --type=deploy    # deploy history
$ cipi app logs myapp --type=laravel   # Laravel application logs
--type=nginxNginx journaux d'accès et d'erreurs
--type=phpPHP-Journal des erreurs FPM
--type=workerSupervisor / sortie du travailleur de file d'attente
--type=deploySortie du déployeur : historique complet du déploiement avec horodatages
--type=laravelLaravel journaux d'application de shared/storage/logs/ (rotation quotidienne laravel-YYYY-MM-DD.log)

app artisan & app tinker

Exécutez les commandes Artisan et Tinker en tant qu'utilisateur de l'application avec la version PHP correcte et open_basedir contexte - exactement comme ils s'exécuteraient lors d'un déploiement.

coup
$ cipi app artisan myapp migrate:status
$ cipi app artisan myapp queue:retry all
$ cipi app artisan myapp db:seed --class=ProductionSeeder
$ cipi app artisan myapp cache:clear
$ cipi app tinker myapp

SSH en tant qu'utilisateur de l'application

Chaque application s'exécute sous son propre utilisateur Linux isolé. Parfois, vous devez travailler directement à l'intérieur de cela l'environnement de l'utilisateur : inspectez les fichiers, exécutez des scripts ponctuels ou déboguez quelque chose qui ne se reproduit que sous forme de le bon utilisateur.

SSH direct en tant qu'utilisateur de l'application (recommandé)

Les utilisateurs de l'application peuvent se connecter directement en SSH au serveur avec le mot de passe généré lors de la création de l'application :

coup
# connect as the app user (password auth)
$ ssh myapp@your-server-ip

# you are directly inside the app user's shell
myapp@server:~$ pwd
/home/myapp

myapp@server:~$ cd ~/current
myapp@server:~$ ls

Le mot de passe est affiché lors de la création de l'application (ou lors de l'utilisation cipi app reset-password myapp à le régénérer). Cela fonctionne pour les clients SFTP, les sessions à distance IDE et l'accès aux terminaux.

Via cipi (chemin d'accès administrateur)

Si vous êtes déjà connecté en tant que cipi, vous pouvez passer directement à n'importe quel utilisateur de l'application :

coup
$ ssh cipi@your-server-ip
cipi@server:~$ sudo su - myapp

myapp@server:~$ pwd
/home/myapp

Réinitialiser le mot de passe de l'utilisateur de l'application

Si vous devez régénérer le mot de passe d'un utilisateur d'application (par exemple pour SSH ou SFTP direct), utilisez :

coup
$ cipi app reset-password myapp

Le nouveau mot de passe s'affiche à l'écran — enregistrez-le immédiatement.

Commandes utiles une fois connecté en tant qu'utilisateur de l'application

coup
# navigate to the active release
myapp@server:~$ cd ~/current

# run artisan directly with the correct PHP version
myapp@server:~$ /usr/bin/php8.5 ~/current/artisan tinker

# inspect the shared .env
myapp@server:~$ cat ~/shared/.env

# tail all logs
myapp@server:~$ tail -f ~/logs/*.log

# check active releases (ll is a built-in alias for ls -al)
myapp@server:~$ ll ~/releases/

Celui de chaque utilisateur de l'application .bashrc définit un pratique ll='ls -al' pseudonyme (depuis v4.5.5) pour un listage plus rapide des répertoires via SSH, aux côtés du deploy et composer raccourcis. Les applications créées avant 4.5.5 reçoivent le ll alias automatiquement au prochain cipi self-update via le 4.5.5 migration.

L'utilisateur de l'application open_basedir la restriction limite PHP à /home/myapp. Ceci est appliqué au niveau PHP-FPM, et non au niveau du shell — vous pouvez accéder à n'importe quel fichier de votre l'utilisateur du shell peut lire lorsqu'il travaille dans le terminal.