Question Est-ce que "ps -u" est vraiment une mauvaise syntaxe?


A mon humble avis ps -u montre une sortie très utile, beaucoup mieux que ps -u $USER:

$ ps -u
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
elastic   234897  0.0  0.0 105980  1336 pts/2    S+   Oct10   0:00 /bin/bash ./run.sh collector-json-1.conf
elastic   234899 48.7  7.1 10087120 4433104 pts/2 Sl+ Oct10 2804:11 /usr/java/jdk1.7.0_09_x64/bin/java -Xmx6144m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatin
:

par rapport à

$ ps -u $USER
    PID TTY          TIME CMD
 234897 pts/2    00:00:00 run.sh
 234899 pts/2    1-22:44:04 java
:
  1. Mais pourquoi est-ce une "mauvaise syntaxe"? /usr/share/doc/procps-3.2.8/FAQ n'aide pas beaucoup.
  2. Quelle serait une "syntaxe appropriée" pour obtenir exactement le même résultat?

Au cas où ce serait important:

$ uname -a
Linux h22k34.local 2.6.32-042stab044.17 #1 SMP Fri Jan 13 12:53:58 MSK 2012 x86_64 x86_64 x86_64 GNU/Linux

75
2017-10-14 06:49


origine


réponses éclairantes. Merci d'avoir posé la question! - Frank Thomas
Et maintenant, pour la partie difficile: quelle réponse devrait avoir la coche? - sjngm
En fait, j'ai pensé que je devais vous laisser, les utilisateurs, décider. Celui avec les notes les plus élevées devrait l'obtenir. Mais, vous ne rendez pas cela plus facile;) - sjngm
Lorsque les deux réponses sont également correctes, je révise les deux et coche l'utilisateur avec le représentant le plus faible, en particulier lorsque la différence est supérieure à 100 000. - Frank Thomas
@FrankThomas fait :) - sjngm


Réponses:


La syntaxe correcte, qui renvoie la même sortie, serait:

ps u

Il y a une bonne raison pour laquelle la syntaxe moderne pour ps est un gâchis. Historiquement, il y avait deux versions incompatibles de ps. Les options avec un premier tiret ont été héritées de la version AT & T Unix de ps. Les options sans tiret principal ont été héritées de BSD. La version de ps Les distributions Linux généralement utilisées sont GNU, qui a fusionné les deux ensembles d’options et ajouté son propre ensemble d’options commençant par un double tiret.

Ainsi, ps u est de style BSD et ps -u $USER est de style AT & T. Le fait que GNU ps te permet de courir ps -u et, à part l'avertissement, obtenir le même résultat que ps u montre que GNU tente de tirer le meilleur parti d’une mauvaise situation.


130
2017-10-14 06:54





le ps historiquement la commande avait une syntaxe très différente dans BSD et System V Unix.

  • Dans BSD ps, la u option (no dash) ne prend aucun paramètre et affiche la "sortie orientée utilisateur" avec les colonnes supplémentaires.

  • Dans SunOS ps, la -u option (avec un tiret) prend un nom d'utilisateur comme paramètre et inclut uniquement les processus appartenant à cet utilisateur, mais sans changer le format d'affichage.

(Comme autre exemple très courant, BSD e signifie "environnement d'exposition", tandis que SunOS -e signifie "afficher les processus de tout le monde".)

Linux procps  ps essaie de supporter les deux styles. Donc, si vous utilisez l'option «tiret» -u, il faudra s'attendre à ce que ce soit l'option "filtrer cet utilisateur" de SunOS, ne pas l'option colonnes étendues. Les deux sont assez confus, cependant, que procps essaie de faire ce que vous voulez - si le nom d'utilisateur est manquant, il supposera que vous lui avez donné une option BSD mais que vous avez utilisé la syntaxe SunOS.

(Il y avait en fait tellement de variantes de ps que le procps a un tableau réel de "personnalités" pour forcer un comportement ambigu à être interprété comme un style ou un autre ou encore un autre - en plus de boutons comme "UNIX95", "CMD_ENV", "_XPG", "I_WANT_A_BROKEN_PS" ...)


84
2017-10-14 07:04



"I_WANT_A_BROKEN_PS" hah.
... Au début, je pensais que c'était une blague. Mais non ... - Izkata
Hmm, il s'avère que c'est exactement l'option de masquer "l'usage ambigu" des avertissements que voit OP. - grawity