Qu'est-ce qui cause ce fond vert dans la sortie de ls?

141

screencap de la sortie ls sur une machine Linux

Il y a deux répertoires affichés par 'ls'. Normalement, les répertoires sont bleus sur fond noir. Mais le premier est bleu sur vert et impossible à lire. Pourquoi est-ce? Comment le rendre bleu sur le noir, ou au moins quelque chose de clair sur quelque chose de sombre?

Ceci est sur Ubuntu 12.04, en utilisant bash dans Gnome Terminal. Dans Konsole, le bleu est légèrement plus foncé et peut être lu, mais pourrait être beaucoup mieux.

DarenW
la source

Réponses:

162

Outre la coloration des fichiers en fonction de leur type (turquoise pour les fichiers audio, rouge vif pour les archives et fichiers compressés, et le violet pour les images et les vidéos), lscoloriez également les fichiers et les répertoires en fonction de leurs attributs:

  • Le texte noir sur fond vert indique qu’un répertoire est inscriptible par d’autres que le groupe et l’utilisateur propriétaires et qu’il possède le sticky bit set ( o+w, +t).
  • Le texte bleu sur fond vert indique qu'un répertoire est accessible en écriture par d'autres utilisateurs que l'utilisateur et le groupe propriétaires et qu'il ne possède pas le sticky bit set ( o+w, -t).

Stephano Palazzo à Ask Ubuntu a créé cette image très instructive par-dessus les différentes couleurs d'attributs:

Que signifient les différentes couleurs dans le terminal

Comme le souligne terdon , les paramètres de couleur peuvent être modifiés via dircolors. Une liste des différents paramètres de coloration peut être consultée avec dircolors --print-database.

Chaque ligne de sortie, telle que BLK 40;33;01, est de la forme:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
  • TARGET indique la cible pour la règle de coloration

  • TEXT_STYLE indique le style du texte:

    • 00 = aucun
    • 01 = gras
    • 04 = soulignement
    • 05 = clignote
    • 07 = inverse,
    • 08 = caché
  • FOREGROUND_COLOR indique la couleur de premier plan:

    • 30 = noir
    • 31 = rouge
    • 32 = vert
    • 33 = jaune
    • 34 = bleu,
    • 35 = magenta
    • 36 = cyan
    • 37 = blanc
  • BACKGROUND_COLOR indique les couleurs de fond:

    • 40 = noir
    • 41 = rouge
    • 42 = vert
    • 43 = jaune
    • 44 = bleu,
    • 45 = magenta
    • 46 = cyan
    • 47 = blanc

Les champs peuvent être omis en partant de la droite, ce qui .tar 01;31signifie par exemple gras et rouge.

XTerm et la plupart des autres émulateurs de terminaux modernes prennent en charge 256 couleurs.

Un code de couleur de premier plan XTerm 256 couleurs est de la forme:

38;5;[FOREGROUND_COLOR]

Un code de couleur d'arrière-plan XTerm 256 couleurs est de la forme:

48;5;[BACKGROUND_COLOR]

où les deux FOREGROUND_COLORet BACKGROUND_COLORest un nombre compris entre 0 et 255. Une liste complète des codes de couleur pour les modes 16 et 256 couleurs est présentée dans la capture d'écran ci-dessous:

Codes de couleurs en mode couleur 16 et 256

Thomas Nyman
la source
5
Les codes BACKGROUND_COLOR ne sont pas identiques à FOREGROUND_COLOR; Les codes de fond sont 40-47
Ryan V. Bissell
38;5;lance un code de couleur de premier plan xterm 256 couleurs. 48;5;démarre un code de couleur d'arrière-plan xterm 256 couleurs. Le cyan dans ma sortie de dircolors n’est 38;5;51 pas le 36 même, mais le résultat est le même.
Stevesliva
1
@ stevesliva: Merci pour votre commentaire. J'ai modifié la réponse pour indiquer correctement les codes de couleur d'arrière-plan et décrire les codes de couleur d'avant-plan et d'arrière-plan de 256 couleurs.
Thomas Nyman
55

Les couleurs de lspeuvent représenter les autorisations, la valeur par défaut de certains systèmes consiste à afficher les répertoires dans lesquels tout le monde a des autorisations en écriture avec un arrière-plan vert:

entrez la description de l'image ici

Vous pouvez changer les couleurs en modifiant votre $LS_COLORSvariable en utilisant dircolors(depuis man ls):

   Using color to distinguish file types is disabled both by  default  and
   with  --color=never.  With --color=auto, ls emits color codes only when
   standard output is connected to a terminal.  The LS_COLORS  environment
   variable can change the settings.  Use the dircolors command to set it.

La syntaxe est certes un peu gênante ici, mais vous pouvez changer cette couleur en créant un fichier avec les couleurs de votre choix et en l’enregistrant comme suit ~/.dircolors:

dircolors -p > ~/.dircolors

Cette commande affichera les valeurs par défaut ~/.dircolors. Vous devrez ensuite éditer ce fichier et changer cette ligne:

OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky

Par exemple, pour que le texte soit noir sur un fond rouge (voir ici la liste des codes de couleur):

OTHER_WRITABLE 30;41 # dir that is other-writable (o+w) and not sticky

Vous n'avez pas besoin de connaître tous les paramètres par défaut, vous pouvez également créer un fichier avec une seule ligne, en redéfinissant uniquement celui que vous souhaitez modifier. Quoi qu’il en soit, une fois le fichier créé, chargez-le avec:

eval "$(dircolors ~/.dircolors)";

Et le voici en action:

entrez la description de l'image ici

Pour que cela se produise automatiquement, ajoutez la evalcommande ci-dessus à votre ~/.bashrcfichier.

terdon
la source
8
Les couleurs par défaut semblent souvent indiquer que l'auteur original nous déteste et que nos yeux nous
détestent
1
Merci. POURQUOI écrivez-vous parfois ~ / .dirname, et parfois ~ / dircolors, et parfois ~ / .dircolors? sont-ils censés être les mêmes?
Tim
Merci. Pourquoi eval "$(dircolors ~/dircolors)";au lieu de manière plus directe telle que dircolors ~/dircolors?
Tim
@Tim parce que dircolors imprime uniquement les paramètres, vous devez les évaluer pour pouvoir les lire.
terdon
pour qu'ils soient lus par qui?
Tim
11

Bien que toutes les réponses techniques soient vraies, je considérerais cela comme un avertissement informel, à savoir que vous cédiez le droit de copier généreusement ou que vous copiez criss + cross ... (le plus souvent, nous le faisons tous, pour que les choses fonctionnent initialement, hein ?)

Comment faire en bleu sur noir, ...?

Un bon «dégénérateur» pour revenir aux droits que vous voulez le plus probablement, est cette déclaration:

chmod -R a-x,o-w,+X thatGreenFolderWithSubfolders/

Mieux comprendre ce que cela fait, si vous comprenez le but de majuscule + X "exécuter spécial", c'est à dire voir Wikipedia

Il n’est vraiment utile que s’il est utilisé avec «+» et généralement en combinaison avec l’option -R pour donner un accès de groupe ou autre à une grande arborescence de répertoires sans configurer l’autorisation d’exécution sur des fichiers normaux (tels que les fichiers texte), ce qui se produirait normalement si vous venez d'utiliser "chmod -R a + rx ...

Frank Nocke
la source
8

J'avais la même question, la réponse de Terdon est bien mais je pense qu'il y a une confusion entre dirname et dircolors?

Quoi qu'il en soit, après quelques recherches supplémentaires, je pourrais changer les couleurs, je partage donc ma solution ici. Cela peut être utile pour quelqu'un un jour!

Donc, 3 étapes simples:

Tout d’abord, comme dit terdon, copiez les couleurs par défaut dans un fichier.

dircolors -p > ~/.dircolors

Puis modifiez ce fichier. Vous pouvez trouver quelques valeurs pour les couleurs à l'intérieur, mais j'ai trouvé plus ici :)

Et enfin, ajoutez la ligne suivante à votre ~/.bashrcfichier pour que les couleurs soient automatiquement chargées lorsque vous ouvrez un terminal:

eval 'dircolors ~/.dircolors' > /dev/null

Voilà :)

KevinG
la source
1
car ~/.zshrcje devais y aller avec if [[ -f ~/.dircolors ]] ; then eval $(dircolors -b ~/.dircolors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fi. Désolé, la coupure de la ligne est affreuse
Eric D. Johnson
2

Pour résoudre rapidement le problème, (définissez les fichiers inscriptibles en jaune sur nobg):

LS_COLORS+=':ow=01;33'

Remplacer 33par 34pour bleu sur nobg. Encore plus simple, pour le nofg sur nobg:

LS_COLORS+=:ow=

Pour que votre modification soit permanente, ajoutez-la à votre .profile:

echo "export LS_COLORS+=':ow=01;33'" >> ~/.profile

Pour afficher les règles de LS_COLORS non liées à l'extension:

echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'

sedmet chaque règle sur une ligne et grepsupprime les règles commençant par*.'.


Pour explorer les lscouleurs sur votre terminal, envisagez d'utiliser

C="$LS_COLORS"
function sc () {
    echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'
}
function t () {
    ls /mnt # Or the path to your example directory.
}

ensuite

LS_COLORS="$C:ow=38;5;250;48;5;025";t

Comme indiqué dans une autre réponse (celle de Thomas Nyman), 38;5;est le préfixe des 256 couleurs de premier plan x-term, et des couleurs 48;5;de fond x-term 256. 256 couleurs ne sont cependant pas supportés par tous les terminaux.

Voir aussi - Que signifient les différentes couleurs dans ls? - sur AskUbuntu.

loxaxs
la source
1

Eh bien, cela signifie que ce dossier a des permisions si vous exécutez ceci:

сhmod og-w AU_LI

ça enlèvera bgcolor :)

Gorodeckij Dimitrij
la source
0

Pour résoudre ce problème, essayez le paramètre ow sur LS_COLORS.

Par exemple:

~LS_COLORS='fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33'
~ls -l

entrez la description de l'image ici

Maintenant, vous ajoutez l' option ow

~export LS_COLORS='fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33:ow=0'
~ls -l

entrez la description de l'image ici

PYK
la source
0

Vous pouvez changer le ton du vert dans Putty pour rendre le texte lisible.

Ouvrez Putty et accédez à Fenêtre \ Couleurs, sélectionnez "Vert ANSI", configurez-le sur un vert plus foncé (R: 0 G: 70 B: 0).

Erhan Alankus
la source