Hvad er den mest kortfattede måde at løse et værtsnavn til en IP-adresse i et Bash-script på? Jeg bruger Arch Linux .
Kommentarer
Svar
Du kan bruge getent
, der følger med glibc
(så du har næsten helt sikkert det på Linux) . Dette løses ved hjælp af gethostbyaddr / gethostbyname2, og så kontrolleres også /etc/hosts
/ NIS / etc:
getent hosts unix.stackexchange.com | awk "{ print $1 }"
Eller, som Heinzi sagde nedenfor, kan du bruge dig
med +short
argumentet (spørger DNS-servere direkte, ser ikke på /etc/hosts
/ NSS / etc):
dig +short unix.stackexchange.com
Hvis dig +short
er utilgængelig, er der nogen af følgende skal fungere. Alle disse spørger DNS direkte og ignorerer andre løsningsmetoder:
host unix.stackexchange.com | awk "/has address/ { print $4 }" nslookup unix.stackexchange.com | awk "/^Address: / { print $2 }" dig unix.stackexchange.com | awk "/^;; ANSWER SECTION:$/ { getline ; print $5 }"
Hvis du kun vil udskrive en IP, skal du tilføje exit
kommando til awk
” s workflow.
dig +short unix.stackexchange.com | awk "{ print ; exit }" getent hosts unix.stackexchange.com | awk "{ print $1 ; exit }" host unix.stackexchange.com | awk "/has address/ { print $4 ; exit }" nslookup unix.stackexchange.com | awk "/^Address: / { print $2 ; exit }" dig unix.stackexchange.com | awk "/^;; ANSWER SECTION:$/ { getline ; print $5 ; exit }"
Kommentarer
- Som standard fungerer brug kun med ipv4, hvor værten giver både ipv4- og ipv6-svar. Dette kan være uventet. Du kan prøve
host www.google.com
,dig +short www.google.com
,host ipv6.google.com
,dig +short ipv6.google.com
,host www.facebook.com
,dig +short www.facebook.com
. - DIG fungerer ikke, hvis det er et CNAME, returnerer det ikke IPen.
- Nogle gange
host
kan timeout og returnerer intet. For nogle domæner kandig +short
muligvis returnere domænealias i første linje. Så for at sikre, at output er en IPv4 adresse, brugdig +short example.com | grep -Eo '[0-9\.]{7,15}' | head -1
. - Brug af
getent hosts <host>
er forkert som for instan ce kan det give en IPv6-adresse, mens IPv6 ikke ‘ t fungerer. Den rigtige løsning er at brugegetent ahosts <host>
til at prøve både IPv6 og IPv4, hvis det er nødvendigt. - Værd at nævne: vært, grave og nslookup ser ud til at tale direkte med de anførte servere i resolv.conf, hvorimod ” modtagende værter ” respekterer både den lokale værtsfil og caching på bibliotekniveau (såsom nscd), hvis den er aktiveret .
Svar
Med host
fra dnsutils pakke:
$ host unix.stackexchange.com unix.stackexchange.com has address 64.34.119.12
( Rettet pakkenavn i henhold til kommentarerne. Som en note har andre distributioner host
i forskellige pakker: Debian / Ubuntu bind9-host , openSUSE bind-utils , Frugalware bind .)
Kommentarer
- Se resolutionip-posten nedenfor, hvis du har brug for at løse noget, der ikke er i DNS (f.eks. / Etc / hosts)
- Vær opmærksom på, at
host
returnerer undertiden multi-line output (i tilfælde af omdirigeringer), du ‘ vilhost unix.stackexchange.com | tail -n1
hvis du bare vil have linjen med IP-adressen. - Der er flere versioner af ” vært ” med forskellige outputformater. For eksempel. de fleste systemer ser ud til at have BIND9-versionen, men min Ubuntu 10.04 LTS-server har en eller anden måde på en eller anden måde ..
- hvis du ikke ‘ ikke har
host
ellerdig
installeret, du kan bruge ping i stedet, som altid er tilgængeligt:ping unix.stackexchange.com -c 1 -q 2>&1 | grep -Po "(\d{1,3}\.){3}\d{1,3}"
dette behøver ikke noget ekstra pakker installeres på de fleste Unix / Linux matchines. - Dette svar fortjener en seriøs nedstemning.
host
er et DNS-værktøj (svarende tilnslookup
), så det kun ser op på værter i DNS, ikke i f.eks./etc/hosts
. Så det er IKKE et svar på OP ‘ s spørgsmål.
Svar
Jeg har et værktøj på min maskine, der ser ud til at udføre jobbet. Mandsiden viser, at det ser ud til at komme med mysql … Sådan kan du bruge det:
resolveip -s unix.stackexchange.com 64.34.119.12
Returværdien for dette værktøj er forskellig fra 0 hvis værtsnavnet ikke kan løses:
resolveip -s unix.stackexchange.coma resolveip: Unable to find hostid for "unix.stackexchange.coma": host not found exit 2
UPDATE På fedora kommer den med mysql-server:
yum provides "*/resolveip" mysql-server-5.5.10-2.fc15.x86_64 : The MySQL server and related files Dépôt : fedora Correspondance depuis : Nom de fichier : /usr/bin/resolveip
Jeg gætter på, at det ville skabe en mærkelig afhængighed af dit script …
Kommentarer
- Dette ser ud til at være den eneste løsning her, der bruger OS ‘ s indbyggede resolver – så fungerer for / etc / hosts samt DNS.
-
getent
, som beskrevet i det andet svar, ser også på / etc / hosts og leveres med glibc, så har ingen afhængigheder af et Linux-system. - Jeg bruger ikke resolip, da du opretter en afhængighed af en anden pakke. getent er installeret som standard. vært, nslookup og dig er alle i valgfri pakker. Brug bestemt getent i et script.
- jeg kan godt lide dette svar, men det ‘ t returnerer ipv6
Svar
Følgende kommando ved hjælp af dig
giver dig mulighed for at læse resultatet direkte uden sed / awk / osv. magi:
$ dig +short unix.stackexchange.com 64.34.119.12
dig
er også inkluderet i dnsutils
pakke.
Bemærk : dig
har en returværdi på 0
, selvom navnet ikke kunne løses. Således skal du kontrollere, om output er tomt i stedet for at kontrollere returværdien:
hostname=unix.stackexchange.com ip=`dig +short $hostname` if [ -n "$ip" ]; then echo IP: $ip else echo Could not resolve hostname. fi
Note 2 : Hvis et værtsnavn har flere IP-adresser (prøv f.eks. debian.org
), vil alle være returneret. Dette “problem” påvirker alle de værktøjer, der er nævnt i dette spørgsmål hidtil:
Kommentarer
- Bemærk, at hvis et domæne har en CNAME-post dets domæne kan blive udskrevet i den første linje i stedet for en IP-adresse.
Svar
getent hosts unix.stackexchange.com | cut -d" " -f1
Kommentarer
- Overvej også
ahosts
,ahostsv4
,ahostsv6
medgetent
. -
cut
er ikke til getent ‘ s, der bruger\t
til at adskille kolonner. Dette er tilfældet i Solaris. - @ceving: På Sola ris skal du muligvis køre
cut
uden-d
(standard\t
som afgrænser). På Linux er det ‘ mellemrum, så linjen ovenfor fungerer.
Svar
De hidtil givne løsninger fungerer for det meste i det enklere tilfælde: værtsnavnet løses direkte til en enkelt IPv4-adresse. Dette er muligvis det eneste tilfælde, hvor du har brug for at løse værtsnavne, men hvis ikke, nedenfor er en diskussion om nogle tilfælde, som du muligvis skal håndtere.
Chris Down og Heinzi diskuterede kort sagen, hvor værtsnavnet løser til mere end en IP-adresse. I dette tilfælde (og andre nedenfor) kan grundlæggende scripting under antagelse af, at et værtsnavn direkte løses til en enkelt IP-adresse muligvis gå i stykker. Nedenfor er et eksempel med et værtsnavn, der løser mere end en enkelt IP-adresse:
$ host www.l.google.com www.l.google.com has address 209.85.148.147 www.l.google.com has address 209.85.148.103 www.l.google.com has address 209.85.148.99 www.l.google.com has address 209.85.148.106 www.l.google.com has address 209.85.148.105 www.l.google.com has address 209.85.148.104
Men hvad er www.l.google.com
? Det er her, at alias skal introduceres. Lad os tjekke eksemplet nedenfor:
$ host www.google.com www.google.com is an alias for www.l.google.com. www.l.google.com has address 74.125.39.103 www.l.google.com has address 74.125.39.147 www.l.google.com has address 74.125.39.105 www.l.google.com has address 74.125.39.99 www.l.google.com has address 74.125.39.106 www.l.google.com has address 74.125.39.104
Så www.google.com
løser ikke direkte til IP-adresser, men til et alias, der i sig selv løser flere IP-adresser. For mere information om aliasser, se her . Det er naturligvis muligt, hvor et alias har en enkelt IP-adresse , som vist nedenfor:
$ host g.www.ms.akadns.net g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net. lb1.www.ms.akadns.net has address 207.46.19.190
Men kan alias kædes sammen?Svaret er ja:
$ host www.microsoft.com www.microsoft.com is an alias for toggle.www.ms.akadns.net. toggle.www.ms.akadns.net is an alias for g.www.ms.akadns.net. g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net. lb1.www.ms.akadns.net has address 207.46.19.254 $ host www.google.fr www.google.fr is an alias for www.google.com. www.google.com is an alias for www.l.google.com. www.l.google.com has address 74.125.39.147 www.l.google.com has address 74.125.39.103 www.l.google.com has address 74.125.39.99 www.l.google.com has address 74.125.39.106 www.l.google.com has address 74.125.39.104 www.l.google.com has address 74.125.39.105
Jeg fandt ikke noget eksempel, hvor et værtsnavn løser et alias, der ikke løser en IP-adresse, men jeg tror, at tilfælde kan forekomme.
Mere end flere IP-adresser og aliaser, er der nogle andre specielle tilfælde … hvad med IPv6? Du kan prøve:
$ host ipv6.google.com ipv6.google.com is an alias for ipv6.l.google.com. ipv6.l.google.com has IPv6 address 2a00:1450:8007::68
Hvor værtsnavnet ipv6.google.com
er et værtsnavn, der kun er IPv6. Hvad med dual-stack værtsnavne:
$ host www.facebook.com www.facebook.com has address 66.220.153.15 www.facebook.com has IPv6 address 2620:0:1c08:4000:face:b00c::
Igen om IPv6, hvis din vært kun er IPv4, kan du stadig løse IPv6-adresser (testet kun på en IPv4 WinXP og med ipv6.google.com kan du prøve det på Linux). I dette tilfælde lykkes opløsningen, men et ping mislykkes med en ukendt værtsfejlmeddelelse . Dette kan være et tilfælde, hvor din scripting mislykkes.
Jeg håber, at disse bemærkninger var nyttige.
Kommentarer
- Hvilket godt supplement til det accepterede svar, der viser alle de kanttilfælde, som man måske vil behandle i scripting. Min version
host
angiver ikke engang ” har adresse ” til mine felter.
Svar
For at undgå problemet med aliaser og altid få en enkelt IP-adresse klar til brug:
python -c "import socket; print socket.gethostbyname("www.example.com")"
Kommentarer
- Jeg lavede en bash-funktion til at holde fast i min bashrc fra dette svar: gist.github.com/brycepg/ba117a37de53906dc8fcc312bd7d5fee
-
python3 -c 'import socket; print(socket.gethostbyname("www.example.com"))'
Svar
ping -q -c 1 -t 1 your_host_here | grep PING | sed -e "s/).*//" | sed -e "s/.*(//"
fungerer uden afhængighed af andre systemer (og for værter specificeret i / etc / hosts)
Kommentarer
- Brug af ping er det, jeg har brug for, da jeg har brug for værdien fra værtsfilen, men sed-mønsteret parses korrekt, men dette fungerede ping – q -c 1 -t 1 dit_host_her | grep PING | sed -e ” s / ^ [^ (] * [(] // ” | sed -e ” s / [)]. * $ // ”
- For at løse noget på mit hjemmenetværk som mit hostname.local fungerer dette så for mig dette er det bedste svar.
- Må jeg også foreslå dette:
ping -q -c 1 -t 1 bahface.local | grep -m 1 PING | cut -d "(" -f2 | cut -d ")" -f1
-
getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>
fungerer også til erklæringer inden for/etc/hosts
også … og det ‘ er go-to-tool til alle slags systemdatabaser (passwd, gruppe, aliaser, tjenester).
Svar
Enkelt men nyttigt :
-
getent ahostsv4 www.google.de | grep STREAM | head -n 1 | cut -d " " -f 1
-
getent ahostsv6 www.google.de | grep STREAM | head -n 1 | cut -d " " -f 1
-
getent hosts google.de | head -n 1 | cut -d " " -f 1
Alle kommandoer løser en IP-adresse, hvis værten stadig eksisterer. Hvis værten peger på et CNAME, får den også IP i det sag.
Den første kommando returnerer den løste IPv4-adresse.
Den anden kommando returnerer res olved IPv6-adresse.
Den tredje kommando returnerer ejerens foretrukne adresse, som enten kan være en IPv4- eller en IPv6-adresse.
Kommentarer
- Langt den mest enkle. Og det er som standard tilgængeligt. Ikke som
host
, der kræver installation afbindutils
Svar
Her er en lille variation af ping
tilgang, der tager “ukendt vært” i betragtning (ved at røre gennem stderr) og bruger tr
for at undgå brugen af sed
regexps:
ping -c1 -t1 -W0 www.example.com 2>&1 | tr -d "():" | awk "/^PING/{print $3}"
I tilfælde det er vigtigt at fange udgangsværdien, så fungerer følgende (skønt det er mindre elegant):
ping -c1 -t1 -W0 www.example.com &>/dev/null && ping -c1 -t1 -W0 www.example.com 2>&1 | tr -d "():" | awk "/^PING/{print $3}"
Kommentarer
- Jeg elsker denne løsning, fordi den fungerer uden ekstra værktøjer.
Svar
For at udfylde Chris Downs svar og adressere jfgagne-kommentarer om (muligvis kædede) aliasser, her er en løsning, der:
- tager højde for flere IPer
- tager højde for et eller flere aliaser (CNAME)
- spørger ikke
/etc/hosts
fil ( i mit tilfælde ville jeg ikke have det); for at spørge om det er dbernt “s python-løsning perfekt) -
bruger ikke awk / sed
dig +short www.alias.com | grep -v "\.$" | head -n 1
Returnerer altid den første IP-adresse eller tom tring, hvis den ikke er løst. med version af dig:
$ dig -v DiG 9.8.1-P1
Kommentarer
- Tak, andre svar antager ” dig + kort ” returnerer altid en enkelt ip-adresse. De ‘ t tegnede sig for CNAME.
Svar
php -r "echo gethostbyname("unix.stackexchange.com");"
Kommentarer
- dette fungerer, men det kræver, at php er installeret på din terminal
- kan være nyttigt i en typisk php docker container, hvor ” vært “, ” dig ” osv. er ikke tilgængelige
Svar
Jeg ville gerne tilføje dette som en kommentar til Andrew McGregor Re: ping. Det ville dog ikke lade mig, så jeg er nødt til at tilføje dette som et andet svar. (Hvis nogen kan flytte det til en kommentar, er du velkommen til.)
Dette er en anden variant, der kun bruger ping og grep :
ping -q -c1 -t1 your_host_here | grep -Eo "([0-9]+\.?){4}"
grep -E
til udvidet regulært udtryk og grep -o
til returner kun den matchende del. selve regexp ser efter et eller flere cifre ([0-9]+
) og eventuelt en prik (\.?
) fire gange ( {4}
)
Svar
Du kan bruge host
:
hostname=example.org # strips the IP IP=$( host ${hostname} | sed -e "s/.*\ //" ) # checks for errors if [ $? -ne 0 ] ; then echo "Error: cannot resolve ${hostname}" 1>&2 exit 1; fi
Svar
her “en Bash opskrift Jeg kogte op ved hjælp af andre folks svar – forsøg først /etc/hosts
, og fald derefter tilbage til nslookup:
resolveip(){ local host="$1" if [ -z "$host" ] then return 1 else local ip=$( getent hosts "$host" | awk "{print $1}" ) if [ -z "$ip" ] then ip=$( dig +short "$host" ) if [ -z "$ip" ] then echo "unable to resolve "$host"" >&2 return 1 else echo "$ip" return 0 fi else echo "$ip" return 0 fi fi }
Kommentarer
- For at være klar er
getent hosts
ikke ‘ t bare et opslag i / etc / hosts – det ‘ et komplet DNS-opløsende opkald til gethostbyaddr (3) , og det ‘ s meget sandsynligvis ikke mislykkes i et tilfælde, hvordig
vil lykkes. Se mandsiden for getent . - @Stuart har ret – jeg ‘ har lært en hel del siden at skrive det og forenklet en stærk kommando.
getent
forbliver min favorit, selvom jeg også kan lidedig +short
Svar
nmap -sP 192.168.178.0/24|grep YOUR_HOSTNAME|sed -n "s/.*[(]\([0-9\.]*\)[)].*/\1/p"
var den løsning, jeg fandt uden DNS-server
Svar
Måske ikke det mest kortfattede, men det ser ud til at være robust og effektivt:
# $(get_host_dns_short "google.com") # # Outputs the IPv4 IP Address of a hostname, resolved by DNS. Returns 0 if DNS # responded successfully; 1 otherwise. Will mask error output. function get_host_dns_short() { ( set -o pipefail host -4 -W1 -t A "$1" 2>/dev/null | awk "/has address/ { print $NF; exit }" ) && return 0 || return 1 }
Dette udsender en enkelt IPv4 IP samt returnere 1
i tilfælde af fejl, mens du maskerer stderr-output.
Du kan bruge det på denne måde:
GOOGLE_IP="$(get_host_dns_short "google.com")" if [[ $? -eq 0 ]]; then echo "Google"s IP is ${GOOGLE_IP}." else echo "Failed to resolve Google"s IP." fi
Googles IP er 216.58.192.46.
Hvis du i stedet vil have en IPv6-adresse, skal du bare erstatte -4
med -6
.
Svar
dig +noall +answer +nocomments example.com | awk "{printf "%-36s\t%s\n", $1, $5 }"
Kommentarer
- Noget sammenhæng på hvilken måde dette svar forbedres i forhold til de allerede eksisterende Vær dygtig. Indsæt også kommandoer med 4 mellemrum (jf. Markdown-syntaksen).
Svar
dig er også langsom, nslookup er meget hurtigere
nslookup google.com | grep -Po "Address:\s*[0-9.]+" | tail -1 | sed -e "s/Address:\s*//g"
Svar
1 linje løser en liste af værtsnavn
for LINE in `cat ~/Desktop/mylist`; do a=$(nslookup $LINE | awk "/^Address: / { print $1 }"); echo $a >> ~/Desktop/ip; done
Svar
Jeg gør det hele tiden på min Mac, der ikke har getent
. ping
virker som et hack. Jeg vil også gerne tage /etc/hosts
med i betragtning.
Så jeg skrev en dum indpakning til dns.lookup
til du, der har Node.js installeret til at levere en CLI:
$ npm install -g lookup-hostname $ lookup google.com 62.243.192.89
Kommentarer
- 60% chance af brud, inden du kommer tæt på en løsning.
- @dotbit kunne du uddybe? Jeg ‘ har brugt dette ugentligt siden ‘ 17 og har aldrig haft nogen problemer.
- @Jensen men du ‘ er den eneste nogensinde, som altid. Resten af os støder normalt på FAIL af den ene eller den anden art og altid.
- ” som altid ” Hvad mener du med det? ” Vi andre ” Hvem ‘ er det ? ” løber ind i FEJL ” Hvilket specifikt problem ser du? Jeg ‘ er nysgerrig.
Svar
Jeg don ” t kender den nemmeste måde for et bash-script, men hvis du vil løse et værtsnavn og se om værten er oppe, skal du bruge ping
!
ping -a hostname -c 1
Vil ping
værten én gang og løse værtsnavnet til IP-adresse.
$ ping -a www.google.com -c 1 PING www.google.com (216.58.211.132) 56(84) bytes of data. 64 bytes from arn09s10-in-f4.1e100.net (216.58.211.132): icmp_seq=1 ttl=54 time=1.51 ms
Kommentarer
- at bruge ping er godt, fordi alle har det, men du skal filtrer IP-delen fra output, hvis du kan lide at bruge den i et script.
Svar
Ja, der er allerede mange svar, men en løsning, der bruger perl, mangler:
perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" unix.stackexchange.com
I et bash-script kunne det bruges sådan:
#!/bin/bash ipaddr=$(perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" unix.stackexchange.com) echo $ipaddr
Moduler, der bruges her, er kernemoduler, så de skal være tilgængelige overalt uden installation med CPAN.
Kommentarer
-
perl -MSocket -MNet::hostent -E 'say inet_ntoa((gethost shift)->addr)' unix.stackexchange.com 2>/dev/null
er meget renere. men ingen andre end os to bruger p ö rl, alle andre bruger selvfølgelig Pascal Script. - Faktisk foretrækker jeg at se fejlmeddelelserne, hvis noget går galt.
Can't call method "addr" on an undefined value
isn ‘ t nøjagtigt den bedste fejlmeddelelse, men kan give et tip om problemet.
Svar
#!/bin/bash systemd-resolve RT.com -t A | awk "{ print $4 ; exit }" systemd-resolve unix.stackexchange.com -t A --legend=no | awk "{ print $4 ; exit }" resolveip -s RT.com dig +short RT.com host RT.com | awk "/has address/ { print $4 }" nslookup RT.com | awk "/^Address: / { print $2 }" ping -q -c 1 -t 1 RT.com | grep PING | sed -e "s/).*//" | sed -e "s/.*(//" ruby -rresolv -e " print Resolv.getaddress "RT.com" " python2 -c "import socket; print socket.gethostbyname("RT.com")" perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" RT.com 2>/dev/null php -r "echo gethostbyname( "RT.com" );" echo " all do work for me - take your pick! "
Kommentarer
- Ruby-versionen udskriver citater omkring IP-adressen — sandsynligvis skal
print
bruges i stedet forp
. - thx, @Slaven Rezic og velkommen til at stemme. så igen, her i bunden kan scriptet faktisk være mere synligt … 😉
Svar
host -t a cisco.com
denne kommando viser ip-adresse (vil gendanne domæne til IP)
Svar
Udover ovenstående løsning kan du oversætte flere værtsnavne til ip via nedenstående script, den eneste afhængighed er “ping” -kommandoen i kerne Unix:
getip(){ ping -c 1 -t 1 $1 | head -1 | cut -d " " -f 3 | tr -d "()" 2>&1 | tee >> /tmp/result.log & } getip "hostname.number1.net" getip "hostname.number2.net" getip "hostname.number3.net" getip "hostname.number4.net" getip "hostname.number5.net" getip "hostname.number6.net" getip "hostname.number7.net" getip "hostname.number8.net"
$ cat /tmp/result.log ABC.DEF.GHI.XY1 ABC.DEF.GHI.XY2 ABC.DEF.GHI.XY3 ABC.DEF.GHI.XY4 ABC.DEF.GHI.XY5 ABC.DEF.GHI.XY6 ABC.DEF.GHI.XY7 ABC.DEF.GHI.XY8
getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>
svarer er et eller andet sted dernede nær bunden. Det ‘ er det enkleste, kræver ingen ekstra pakker og er lettere at parse fra et Bash-script også.getent hosts somehost
, når kører denne , mens den er påsomehost
producerer en IPv6-adresse , som er forskellig fra, hvordan de fleste andre værktøjer (ping
,ssh
i det mindste) løse navne og bryde nogle ting. Brugahosts
i stedet forhosts
.ahostsv4
) eller IPv6 (ahostsv6
) adresser? Personligt finder jeg intet galt med den uspecifikke anmodning om at returnere IPv6. Din kode skal udarbejdes. IPv6 har været derude i mere end 20 år nu.hosts
, og indtil videre har 4 personer opstemt vinc17 ‘ s kommentar, der udtrykker smerten forårsaget af ” pludselig IPv6 “. At være forberedt på IPv6 er ikke altid problemet: mange programmer har brug for en måde at afgøre, om to navne / adresser henviser til den samme vært. De kan enten bruge simpel strengtilpasning, eller de skal vide meget om netværket for at finde ” true ” svaret. Sidstnævnte er et minefelt, så mange tredjepartsprogrammer og -systemer – som jeg ikke har kontrol over – bruger det første.