Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

find xargs syslog et ncurse ??

6 réponses
Avatar
françois
Bonsoir,

Je viens de m'apercevoir d'un truc tout à fait bizarre:

J'expose brievement la façon dont j'ai procédé.

A intervalle régulier j'ai le tag MARK,
dans la console ou j'ai redirigé les messages syslog, qui
s'affiche. Aprés une recherche, j'ai plusieurs réponses:

*soit cela indique que syslogd est en fonctionnement
(pourquoi pas)

*soit (rotation des log) "logrotate exécuté par cron avec droits de root"
(j'en doute)

*soit netfilter "IP: use netfilter MARK value as routing key" activé
(possible)

Ce qui m'intrigue: (à moins d'être atteint de cécité)
je ne l'avais jamais vu auparavant.

Je continue mes recherches en décidant de faire une recherche dans
/var/log (debian) en lancant:

find /var/log | xargs grep -i mark

et boum c'est incompréhensible, mon xterm est de couleur bleue,
je pense que cela à activer l'interface ncurse, et m'indique des
choses plutôt bizarre avec des noms de pays, hongkong, belgique
(c'est peut-être une mauvaise blagues :-) ) (à essayer, suis-je le
seul?), de plus cela ce reproduit en mode console et l'ecran reste bleue
même aprés un clear et un logout, en su comme en utilisateur.

(cependant j'ai identifier la cause du message:
je pense amha que c'est bien syslogd qui s'autotest (toutes les heures)
le message provenant en effet de /var/log/syslogd (j'aurais d'ailleurs
du le savoir) faut que j'aille voire l'ophtalmo).

et donc ma question:

Pourquoi ncurse s'active aprés le lancement de la commande?
cela ressemble bien à un bug ...

Merci pour les éventuelles suggestions.


ps:

Le phénomène intervient seulement lorsque je lance la recherche dans
/var/log.

Cela se reproduit également avec un autre motif: su, pam, et tous ce que
vous voulez (pourvu qu'il "match" quelque chose), pour les pays c'est
juste lorsque je lance la recherche sur mark (?).

Et enfin, je suis maintenant sûre que c'est ncurse qui est chargé aprés
vérification à l'aide de lsof (/lib/libncurses.so.5.4 chargé au moment
du lancement de la commande).

je pense bien approfondir le sujet en lancant un strace, mais
franchement votre avis m'interesse avant d'aller plus loin.

6 réponses

Avatar
Nicolas George
françois wrote in message <tKvkd.70021$:
*soit cela indique que syslogd est en fonctionnement
(pourquoi pas)



Extrait de syslogd(8) :

-m interval
The syslogd logs a mark timestamp regularly. The default inter-
val between two -- MARK -- lines is 20 minutes. This can be
changed with this option. Setting the interval to zero turns it
off entirely.

je pense que cela à activer l'interface ncurse


Il n'y a pas d'interface ncurses, ncurses n'est qu'une bibliothèque de
contrôle du terminal. L'affichage semi-graphique sur un terminal est
contrôle par des séquences d'échappement. Tu peux essayer, par exemple :

printf 'e[41mBonjour.n'

Il y a dans /var/log des fichiers compressé, dont le contenu est donc non
pas du texte, mais des suites d'octets quelconques. Il est possible que le
grep tombe sur un bout de tel fichier qui a l'air d'un fichier texte (et
donc est affiché, normalement c'est « Binary file foo matches »), mais
contient en fait des séquences de contrôle du terminal qui le font changer
de couleur.

Avatar
françois
Nicolas George wrote:
françois wrote in message <tKvkd.70021$:

*soit cela indique que syslogd est en fonctionnement
(pourquoi pas)




Extrait de syslogd(8) :

-m interval
The syslogd logs a mark timestamp regularly. The default inter-
val between two -- MARK -- lines is 20 minutes. This can be
changed with this option. Setting the interval to zero turns it
off entirely.




Ok, je m'en suis apercu aprés mes recherches (comme quoi la relecture
des man est toujours la bienvenu).

je pense que cela à activer l'interface ncurse



Il n'y a pas d'interface ncurses, ncurses n'est qu'une bibliothèque de
contrôle du terminal. L'affichage semi-graphique sur un terminal est
contrôle par des séquences d'échappement. Tu peux essayer, par exemple :

printf 'e[41mBonjour.n'



c'est marrant, j'avais jamais vu, en tous cas je comprend mieux ncurse
maintenant.

et donc ==>

Il y a dans /var/log des fichiers compressé, dont le contenu est donc non
pas du texte, mais des suites d'octets quelconques. Il est possible que le
grep tombe sur un bout de tel fichier qui a l'air d'un fichier texte (et
donc est affiché, normalement c'est « Binary file foo matches »), mais
contient en fait des séquences de contrôle du terminal qui le font changer
de couleur.


C'est exactement ça, Merci beaucoup, je croyais vraiment être
ensorcellé, sans ton aide j'aurais pu galérer longtemps.

Conclusion: ce n'est donc pas un bug mais une mauvaise interprétation
des fichiers traité par grep (n'y aurait-il pas une façon d'éviter se
comportement==> réecrire grep, non je rigole :-) )


Avatar
Qing Liu
françois writes:

[find /var/log | xargs grep -i mark]
Conclusion: ce n'est donc pas un bug mais une mauvaise interprétation
des fichiers traité par grep (n'y aurait-il pas une façon d'éviter se
comportement==> réecrire grep, non je rigole :-) )


grep -I ? Cela dit, par défaut grep n'affiche pas le contenu d'un
fichier (qu'il pense être) binaire. man grep.

P.S. au lieu de find ... tu aurais pu aussi bien faire un
grep -ri mark /var/log
(l'option -r est spécifique au grep de Gnu), c'est plus court :).

--
Liu

Avatar
françois
Qing Liu wrote:
françois writes:


[find /var/log | xargs grep -i mark]
Conclusion: ce n'est donc pas un bug mais une mauvaise interprétation
des fichiers traité par grep (n'y aurait-il pas une façon d'éviter se
comportement==> réecrire grep, non je rigole :-) )



grep -I ? Cela dit, par défaut grep n'affiche pas le contenu d'un
fichier (qu'il pense être) binaire. man grep.



Je viens d'essayer, et cela donne le même comportement,

pourtant: man grep

-I Traiter un fichier binaire comme s'il ne contenait aucune
concordance; équivalent à l'option --binary-files=without-match


comprend pas ?



P.S. au lieu de find ... tu aurais pu aussi bien faire un
grep -ri mark /var/log
(l'option -r est spécifique au grep de Gnu), c'est plus court :).


Merci pour l'option -r (lit tous les fichiers à l'interieur de chaque
répertoire récursivement) que je viens d'apprendre (oh la il m'en reste
des man à lire) cela lance un seul processus, bien vu :-).

(mais toujours cette satané librarie ncurse qui revient)


Avatar
françois
françois wrote:
(mais toujours cette satané librarie ncurse qui revient)


J'ai trouvé, ouf, j'ai essayer sans l'option -i:

grep -r MARK /var/log

et hop plus de libncurse chargé (mais bon, je suis obligé de définir
la casse, fini l'option -i?)

**apparemment -i modifie le comportement par défaut de grep(bizarre), a
savoir comme l'a indiquer Qiung Liu:

"par défaut grep n'affiche pas le contenu d'un
fichier (qu'il pense être) binaire"

quant à -I (c'est ce que je veux)cela n'a l'air d'avoir aucune incidence
sur le traitement de la commande:
toujours la libncurse chargé (?)

j'ai essayer d'upgrader grep (2.5.1.ds1-3.2) même chose.

Avatar
Stephane Chazelas
2004-11-10, 21:56(+00), Nicolas George:
[...]
printf 'e[41mBonjour.n'
[...]


$ printf 'e[41mBonjour.n'
e[41mBonjour.

Le e est specifique a bash, ksh93 et zsh. Ca ne marchera pas
avec pdksh, dash, GNU printf...


A eviter donc.

printf '33[41mBonjour.33[mn'

sera plus portable.

Cela dit, pour les codes octaux, des qu'on depasse 77, if faut
utiliser %b.

Dans le premier argument des printf, certaines implementations
reconnaissent 351 et pas 351 (bash, GNU...) et certaines le
contraire (zsh). La syntaxe POSIX est 351.

printf %b '351n'

marchera avec tous les printf.

--
Stephane