"logguer" ces différents shells

bonjours à tous/toutes,

je souhaiterais tracer mes activités sur la console dans un fichier texte tout simple.
1 fichier par ouverture de consoles nommé “utilisateur_shell1**_date.log”

afin de pouvoir analyser mes erreurs par la suite, ne pas perde des commandes passé, un peu à la façon de “showterm” ou “asciinema” sauf que je ne cherche pas à faire de diffusion sur le web.

j’ai bien essayé de rajouter un petit script dan mon fichier .bashrc contenant un “exec”, un "tee"
mais rien à faire.

j’ai bien testé “ttyrec”/“ttyplay”, mais les fichier de logs ne sont pas lisible hors “ttyplay” et l’utilisation de la commande ne me convient pas.
exemple :

belmont@debian:/usr/log$ cat test_tty_rec_3
�0MTZpmtoto
Chargement des variables d'envirronement [ OK ]
belmont@debian:/usr/log$ �0MTce�0MT�c�0MT�O	h�0MT�a
 �0MT��"�0MTը                                        o�0MT
                t�0MT�e�0MT:|s�0MTU�t�0MT�� �0MTg�
                                                         t�0MT1
t�0MT�*y�0MTlt�0MT��i�0MTsn
m�0MT�v
F       e�0MT�"�0MT%L
test ttytime
elmont@debian:/usr/log$ �0MT�4ttytime�0MT�q
6belmont@debian:/usr/log$ �0MT+�ttytime�0MT��ttytime�0MT��:^C
 �0MT�f/usr/log/test_tty_rec_3�0MT40MT��
�0MTU     18�0MT:	�0MT�/usr/log/test_tty_rec_3�0MT7
0MTC6belmont@debian:/usr/log$ �0MT\ttytime /usr/log/test_tty_rec_3�0MT�
     20�0MT�	�0MT�/usr/log/test_tty_rec_3�0MTK
�0MT.
     6belmont@debian:/usr/log$ �0MTU�	ttytime /usr/log/test_tty_rec_3�0MT�8
                                                                              
�0MT�C
           22�0MT�D
                   	�0MTAE
                              /usr/log/test_tty_rec_3�0MT�E
                                                            
�0MT�I
      6belmont@debian:/usr/log$ �0MT٣
                                    ttytime /usr/log/test_tty_rec_3�0MT
/usr/log/test_tty_rec_3�0MTBi
6belmont@debian:/usr/log$ �0MT
                               e�0MT��x�0MT��i�0MT��t�0MTE
exit

j’aimerais juste un fichier de log tout simple ou je pourrais faire des grep si besoin …

connaissez-vous un moyen simple d’arriver à ce résultats ?

J’utilise ça:

# cat /etc/bash.bashrc
PROMPT_COMMAND='history -a >(tee -a ~/.bash_history | logger -t "$USER[$$] $SSH_CONNECTION")'

Les commandes sont loggés dans syslog (après l’execution, m’enfin)

t’as façon de faire est intéressante mais ce n’est pas la type de fonctionnement que je cherche.

en faisant l’essai voila ce que j’obtiens :

commande :

belmont@debian:~$ history | logger -t toto

contenu de la syslog :

Oct 26 20:36:04 debian toto:   192  echo "toto"
Oct 26 20:36:04 debian toto:   193  ls
Oct 26 20:36:04 debian toto:   194  cd ..
Oct 26 20:36:04 debian toto:   195  ls
Oct 26 20:36:04 debian toto:   196  cd
Oct 26 20:36:04 debian toto:   197  ls
Oct 26 20:36:04 debian toto:   198  exit
Oct 26 20:36:04 debian toto:   199  lsr
Oct 26 20:36:04 debian toto:   200  cd

sa sauvegarde effectivement les commandes passées mais pas leur retour

ce que je cherche est un fonctionnement plus proche de “asciinema” ou “showterm” mais dans un simple fichier qui ne serait uploadé nul part et que je pourrais relire à ma guise.

Owh, au temps pour moi

script output.log (débute l’enregistrement)
exit (arrêt script et écriture final sur output.log)

cat output.log (affichage du log enregistrer)

script output.log -c ta_commande (lance ton logiciel et garde les logs via script)

Je pense que le «tee» est la bonne solution. Quels ont été tes tentatives ?

@ kripteks : :wink: merci quand même

@ Mimoza : pourquoi pas mais je ne vois pas comment le mettre en oeuvre

après quelques essai avec la commande “script” voila ce que j’ai fait :

dans mon fichier bashrc j’ai rajouté ceci à la fin :

# 25/10/2014 : ajout gestion variables d'environnement dans un fichier separé
if [ -f ~/.start ]; then
  . ~/.start
  CR_CHARGEMENT_START=$?
  if [ ${CR_CHARGEMENT_START} -eq 0 ]; then
    echo "Chargement des variables d'environnement [ OK ]"
  else
    echo "Chargement des variables d'environnement [ KO ]"
  fi
fi

contenu du script .start

#!/usr/bin/bash
#---------------------------------------------------------------
#              .start
#---------------------------------------------------------------
# Fichier contenant les variables d'environnement utilisateur
# date   : 25/10/2014
#---------------------------------------------------------------

REPLOG="/usr/log"
TERMINAL_NUMBER=$(tty | cut -d'/' -f 4)
DATE_CONNEXION=$(date +%d%m%y)
FICLOGTERMINAL=${DATE_CONNEXION}_${USERNAME}_term${TERMINAL_NUMBER}.log

if [ -d ${REPLOG} ]; then
  script -c ${REPLOG}/${FICLOGTERMINAL}
fi

Mais cela ne fonctionne pas.
à l’ouverture d’un nouveau terminal voila ce qui ce passe :

Le script a débuté, le fichier est typescript bash: /usr/log/261014_belmont_term2.log: Aucun fichier ou dossier de ce type Script terminé, le fichier est typescript Chargement des variables d'envirronement [ OK ] belmont@debian:~$

si je refait la même chose sans l’option -c => script ${REPLOG}/${FICLOGTERMINAL}
le nouveau terminal boucle en faisant un appel recursif à bash


Le script a débuté, le fichier est /usr/log/271014_belmont_term0.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term2.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term3.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term4.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term5.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term6.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term7.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term8.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term9.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term10.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term11.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term12.log

Le script a débuté, le fichier est /usr/log/271014_belmont_term13.log

jusqu’à ce que je l’interrompe avec un ctrl+c

Suivit de “script” il faut “le nom du fichier log” sinon c’est automatiquement sur le fichier “typescript” qu’il écrit.
Donc: script ton.log -c ta_commande

Il te manque aussi, “exit” qui termine l’écriture du log et qui arrête “script”.

Si tu fais: script ton.log -c ta_commande
À la fermeture/terminaison de la commande, “script” s’auto-termine et affiche le message de fin.

Mais si tu ouvres tes commandes manuellement après avoir lancer un “script ton.log”, il faudra faire “exit” soit même pour terminer “script” et afficher le message de fin.

le problème c’est que je veu mettre plus qu’une commande dans mon fichier de log …

script :

#!/bin/bash
  script /usr/log/test

resultat (ouverture d’un nouvel onglet du terminal) :

Le script a débuté, le fichier est /usr/log/test
Le script a débuté, le fichier est /usr/log/test
Le script a débuté, le fichier est /usr/log/test
Le script a débuté, le fichier est /usr/log/test
Le script a débuté, le fichier est /usr/log/test
^Cbelmont@debian:~$ 

je ne comprends pas pourquoi le script boucle :confusion-helpsos:
surtout que je n’ai de boucle nul part
je suis obligé de faire ctrl+c pour sortir de la boucle avant de pouvoir utiliser le terminal
un fois le ctrl+c passé le fichier de log ce rempli bien …

je ne comprend pas ce qui m’échappe

Je sais pas pourquoi tu as une boucle.

Pour le moment, essaye de mettre un if:
if(si script log n’est pas déjà lancé)
{
script ton.log
}

hello kripteks,

j’ai eu la même idée que toi mais ça ce comporte un peu bizarrement

#!/bin/ksh
#---------------------------------------------------------------
#              .start
#---------------------------------------------------------------
# Fichier contenant les variables d'environnement utilisateur
# date   : 25/10/2014
#---------------------------------------------------------------

#---------------------------------------------------------------
# Permet de tracer la nouvelle session ouverte
#---------------------------------------------------------------
FICHIER="/usr/log/buildlog_$(date +%d%m%y_%H%M%S_%s).log"

if [ -f $FICHIER ]; then
  echo "fichier deja présent"
else
  touch $FICHIER
  #script -ac $(basename $SHELL) ${FICHIER};exit
  script -ac ksh ${FICHIER}
fi

En utilisant : script -ac ksh ${FICHIER},
=> fonctionne mais ça empêche de changement de shell (dans la meme fenetre) sans quitter le shell courant donc en perdant l’utilisation de la log pour le nouveau shell

En utilisant : script -ac $(basename $SHELL) ${FICHIER};exit
ou script -ac $(basename $SHELL) ${FICHIER}
=> fonctionne en lançant le shell par defaut du /etc/profile mais ré-ouvre un autre shell par defaut par deçu le shell demandé il faut donc faire 2 ou 3 fois exit avant de retomber sur ksh par exemple.

De plus la commande script est parasitée si j’ouvre un vi … comme indiqué dans le man …

Je comprend toujours pas pourquoi ça boucle,peut etre un “path” moisi, je vais peut être commencer par analyser de ce coté la.
Je commence a me dire que c’était peut être un peut trop en vouloir trop vite je vais peut etre me concentrer sur des trucs moins tordu avant de reprendre ça

En tous cas merci pour l’aide apportée. Je passe le sujet en résolut mais je le rouvrirai peut être un jour, si une idée lumineuse me vient pour contourner le problème.