Der er to mapper vist af “ls”. Normalt er mapper hvor som helst blå på sort baggrund. Men den første er blå på grøn og umulig at læse. Hvorfor er det? Hvordan gør man det blåt på sort eller i det mindste noget lys på noget mørkt?
Dette er på Ubuntu 12.04 ved hjælp af bash i Gnome Terminal. I Konsole er den blå lidt mørkere og mulig at læse, selvom den kunne være meget bedre.
Svar
Bortset fra farvning filer baseret på deres type (turkis til lydfiler, lyse rødt til arkiver og komprimerede filer og lilla til billeder og videoer), ls
farver også filer og mapper ud fra deres attributter:
- Sort tekst med grøn baggrund indikerer, at en mappe kan skrives af andre bortset fra den ejer og gruppe, der har den klæbende bit (
o+w, +t
) . - Blå tekst med grøn baggrund angiver, at en mappe kan skrives af andre bortset fra den bruger og gruppe, der ejer, og har ikke den klæbende bit sæt (
o+w, -t
).
Stephano Palazzo over på Ask Ubuntu har lavet dette meget lærerige billede over de forskellige attributfarver:
Som terdon påpegede, kan farveindstillingerne ændres via dircolors
. En liste over de forskellige farveindstillinger kan fås med dircolors --print-database
.
Hver linje med output, såsom BLK 40;33;01
, har formen:
[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
-
TARGET
angiver målet for farvelægningsreglen -
TEXT_STYLE
angiver tekstformat:-
00
= ingen -
01
= fed -
04
= understreg -
05
= blink -
07
= omvendt, -
08
= skjult
-
-
FOREGROUND_COLOR
angiver forgrundsfarven:-
30
= sort -
31
= rød -
32
= grøn -
33
= gul -
34
= blå, -
35
= magenta -
36
= cyan -
37
= hvid
-
-
BACKGROUND_COLOR
angiver baggrundsfarverne:-
40
= sort -
41
= rød -
42
= grøn -
43
= gul -
44
= blå, -
45
= magenta -
46
= cyan -
47
= hvid
-
Felter kan udelades startende fra højre, så for eksempel .tar 01;31
betyder fed og rød.
XTerm og de fleste andre moderne terminalemulatorer understøtter 256 farver.
En XTerm 256-farve forgrundsfarvekode er af formen:
38;5;[FOREGROUND_COLOR]
En XTerm 256-farve baggrundsfarvekode er af form:
48;5;[BACKGROUND_COLOR]
hvor både FOREGROUND_COLOR
og BACKGROUND_COLOR
nummer området 0-255. En komplet liste over farvekoder til 16 og 256 farvetilstande vises i nedenstående skærmbillede:
Kommentarer
Svar
Farverne på ls
kan repræsentere tilladelserne er standarderne for nogle systemer at vise mapper, hvor alle har skrivetilladelser med en grøn baggrund:
Du kan ændre farverne ved at redigere din $LS_COLORS
variabel ved hjælp af dircolors
(fra 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.
Syntaksen er ganske vist irriterende her, men du kan ændre denne farve ved at oprette en fil med de ønskede farver og gemme den som ~/.dircolors
:
dircolors -p > ~/.dircolors
Denne kommando udskriver standardindstillingerne til ~/.dircolors
. Du bliver derefter nødt til at redigere den fil og ændre denne linje:
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
For eksempel at gøre den sort tekst på en rød baggrund (se her for en liste over farvekoder):
OTHER_WRITABLE 30;41 # dir that is other-writable (o+w) and not sticky
Du behøver ikke at have alle standardindstillingerne , kan du også bare oprette en fil med en enkelt linje og omdefinere netop den, du vil ændre. Under alle omstændigheder, når du har oprettet filen, skal du indlæse den med:
eval "$(dircolors ~/.dircolors)";
Og her er det i aktion:
For at få det til at ske automatisk skal du tilføje eval
kommando ovenfor til din ~/.bashrc
fil.
Kommentarer
- Standardfarverne synes ofte at indikere, at den oprindelige forfatter hader os og vores øjne dog …
- Tak. Hvorfor skriver du nogle gange ~ / .dirname, og nogle gange ~ / dircolors, og nogle gange ~ / .farver? skal de være de samme?
- Th anker. Hvorfor
eval "$(dircolors ~/dircolors)";
i stedet for mere direkte måde somdircolors ~/dircolors
? - @Tim fordi dirfarver kun udskriver indstillingerne, du har brug for at evaluere det for at de kan læses.
- for at de kan læses af hvem?
Svar
Selvom alle tekniske svar er sande, vil jeg betragte det som en uformel advarsel, at du uddelte rettighederne lidt til generøst eller kopiering af criss + cross … (oftest gør vi alle , for at få tingene til at virke oprindeligt, ikke?)
Hvordan gør man det blåt på sort, …?
En god„ de-greener “for at komme tilbage til rettigheder, du sandsynligvis vil have, er denne erklæring:
chmod -R a-x,o-w,+X thatGreenFolderWithSubfolders/
Bedst forstået hvad det gør, hvis du forstår formålet med store bogstaver + X „special execute“, dvs. se Wikipedia
Det er kun virkelig nyttigt, når det bruges med “+” og normalt i kombination med -R mulighed for at give gruppe eller anden adgang til et stort katalogtræ uden at indstille udfør tilladelse til normale filer (såsom tekstfiler), hvilket normalt ville ske, hvis du bare brugte “chmod -R a + rx …
Svar
Her er de 3 trin, jeg brugte til at ændre farverne:
Kopier først standardfarverne til en fil
dircolors -p > ~/.dircolors
Rediger derefter denne fil. Du kan finde nogle værdier for farver indeni, og her er nogle flere:
Code Color 0 Default Colour 1 Bold 4 Underlined 5 Flashing Text 7 Reverse Field 31 Red 32 Green 33 Orange 34 Blue 35 Purple 36 Cyan 37 Grey 40 Black Background 41 Red Background 42 Green Background 43 Orange Background 44 Blue Background 45 Purple Background 46 Cyan Background 47 Grey Background 90 Dark Grey 91 Light Red 92 Light Green 93 Yellow 94 Light Blue 95 Light Purple 96 Turquoise 100 Dark Grey Background 101 Light Red Background 102 Light Green Background 103 Yellow Background 104 Light Blue Background 105 Light Purple Background 106 Turquoise Background
( kilde )
Og til sidst tilføj følgende linje til din ~/.bashrc
-fil for at farverne automatisk indlæses, når du åbner en terminal:
eval "dircolors ~/.dircolors" > /dev/null
For ~/.zshrc
:
if [[ -f ~/.dircolors ]] ; then eval $(dircolors -b ~/.dircolors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fi
Svar
For hurtigt at løse problemet, (gør andre skrivbare filer gule på nobg):
LS_COLORS+=":ow=01;33"
Udskift 33
med 34
til blå på nobg. Endnu enklere at gøre det nofg på nobg:
LS_COLORS+=:ow=
For at gøre din ændring permanent skal du tilføje den til din .profil:
echo "export LS_COLORS+=":ow=01;33"" >> ~/.profile
For at se de ikke-udvidelsesrelaterede regler for LS_COLORS:
echo "$LS_COLORS" | sed "s/:/\n/g" | grep -v "\*."
sed
sætter hver regel på en linje, og grep
fjerner reglerne, der begynder med *.".
To udforsk ls
farverne på din terminal, overvej at bruge
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. }
Så
LS_COLORS="$C:ow=38;5;250;48;5;025";t
Som anført i et andet svar (det af Thomas Nyman) er 38;5;
præfikset for forgrunds x-term 256-farver, og 48;5;
til baggrunds x-term 256-farver. 256-farver understøttes dog ikke af alle terminaler.
Se også -Hvad betyder de forskellige farver i ls? – på AskUbuntu .
Kommentarer
- Jeg fandt at droppe
LS_COLORS+=':ow=01;33'
i min~/.zshrc
hjalp med at deaktivere farvebaggrund for mapper i en git-repo.Dette er på en Windows 10-maskine med en Pengwin-WSL-distribution. Nu er alle mapper inden for git-repo læsbare.
Svar
Nå dette betyder, at denne mappe har tilladelser, hvis du kører dette:
сhmod og-w AU_LI
det fjerner bgcolor 🙂
Svar
For at rette dette, prøv ow parameter til LS_COLORS
For eksempel:
~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
Nu tilføjer du ow (OTHER_WRITABLE
) mulighed
~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
Kommentarer
- Hvis du ønsker at ændre farven via .dir_colors, kan du tilføje
OTHER_WRITABLE 34;43
. Tak til: gist.github.com/jmoz/280005/…
Svar
Du kan ændre tonen i grønt i kitt for at gøre teksten læsbar.
Åbn kitt og gå til vindue \ Farver, vælg “ANSI Green”, indstil den til en mørkere grøn (R: 0 G: 70 B: 0).
38;5;
starter en xterm 256-farve forgrundsfarvekode.48;5;
starter en xterm 256-farve baggrundsfarvekode. Cyan i min dircolors output er38;5;51
ikke36
selvom resultatet er det samme.