Hva er den korteste måten å løse et vertsnavn til en IP-adresse i et Bash-skript? Jeg bruker Arch Linux .
Kommentarer
Svar
Du kan bruke getent
, som følger med glibc
(slik at du nesten helt sikkert har det på Linux) . Dette løser seg ved hjelp av gethostbyaddr / gethostbyname2, og vil også sjekke /etc/hosts
/ NIS / etc:
getent hosts unix.stackexchange.com | awk "{ print $1 }"
Eller, som Heinzi sa nedenfor, kan du bruke dig
med +short
argumentet (spør DNS-servere direkte, ser ikke på /etc/hosts
/ NSS / etc):
dig +short unix.stackexchange.com
Hvis dig +short
er utilgjengelig, er det noen av følgende skal fungere. Alle disse spørringene DNS direkte og ignorerer andre måter å løse:
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 bare vil skrive ut en IP, legg til exit
kommando til awk
» s arbeidsflyt.
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 bruk bare med ipv4, hvor verten gir 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 IP-en.
- Noen ganger
host
kan bli tidsavbrutt og returnerer ingenting. For noen domener kandig +short
returnere domenealias i første linje. Så for å sikre at utdataene er en IPv4 adresse, brukdig +short example.com | grep -Eo '[0-9\.]{7,15}' | head -1
. - Bruk av
getent hosts <host>
er feil, som for eksempel ce det kan gi en IPv6-adresse mens IPv6 ikke fungerer ‘ t. Den riktige løsningen er å brukegetent ahosts <host>
for å prøve både IPv6 og IPv4 om nødvendig. - Verdt å nevne: vert, dig og nslookup ser ut til å snakke direkte med serverne som er oppført i resolv.conf, mens » mottatte verter » respekterer både den lokale vertsfilen og caching på biblioteknivå (for eksempel nscd) hvis aktivert .
Svar
Med host
fra dnsutils pakke:
$ host unix.stackexchange.com unix.stackexchange.com has address 64.34.119.12
( Rettet pakkenavn i henhold til kommentarene. Som et notat har andre distribusjoner host
i forskjellige pakker: Debian / Ubuntu bind9-host , openSUSE bind-utils , Frugalware bind .)
Kommentarer
- Se resolip-oppføringen nedenfor hvis du trenger å løse noe som ikke er i DNS (f.eks. / Etc / hosts)
- Vær oppmerksom på at
host
returnerer noen ganger flere linjers utdata (i tilfelle omdirigeringer), vil du ‘ vil hahost unix.stackexchange.com | tail -n1
hvis du bare vil ha linjen med IP-adressen. - Det finnes flere versjoner av » vert » med forskjellige utdataformater. F.eks. de fleste systemer ser ut til å ha BIND9-versjonen, men min Ubuntu 10.04 LTS-server har en eller annen helt annen versjon på en eller annen måte ..
- hvis du ikke har ‘ t har
host
ellerdig
installert, du kan bruke ping i stedet som alltid er tilgjengelig:ping unix.stackexchange.com -c 1 -q 2>&1 | grep -Po "(\d{1,3}\.){3}\d{1,3}"
dette trenger ikke noe ekstra pakker installeres på de fleste Unix / Linux matchines. - Dette svaret fortjener en seriøs nedstemning.
host
er et DNS-verktøy (lignernslookup
), så det bare ser opp verter i DNS, ikke i f.eks./etc/hosts
. Så det er IKKE et svar på OP ‘ s spørsmål.
Svar
Jeg har et verktøy på maskinen min som ser ut til å gjøre jobben. Mannsiden viser at det ser ut til å komme med mysql … Slik kan du bruke den:
resolveip -s unix.stackexchange.com 64.34.119.12
Returverdien til dette verktøyet er forskjellig fra 0 hvis vertsnavnet 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 antar at det ville skape en merkelig avhengighet for skriptet ditt …
Kommentarer
- Dette ser ut til å være den eneste løsningen her som bruker OS ‘ s innebygd resolver – så fungerer for / etc / hosts samt DNS.
-
getent
, som beskrevet i det andre svaret, ser også på / etc / hosts, og kommer med glibc, så har ingen avhengigheter av et Linux-system. - Jeg vil ikke bruke resolip siden du oppretter en avhengighet av en annen pakke. getent er installert som standard. host, nslookup og dig er alt i valgfrie pakker. Definitivt bruk getent i et skript.
- Jeg liker dette svaret, men det ‘ t returnerer ipv6
Svar
Følgende kommando med dig
lar deg lese resultatet direkte uten sed / awk / etc. magi:
$ dig +short unix.stackexchange.com 64.34.119.12
dig
er også inkludert i dnsutils
pakke.
Merk : dig
har en returverdi på 0
, selv om navnet ikke kunne løses. Dermed må du sjekke om utgangen er tom i stedet for å sjekke returverdien:
hostname=unix.stackexchange.com ip=`dig +short $hostname` if [ -n "$ip" ]; then echo IP: $ip else echo Could not resolve hostname. fi
Merknad 2 : Hvis et vertsnavn har flere IP-adresser (prøv debian.org
, for eksempel), vil alle være returnert. Dette «problemet» påvirker alle verktøyene som er nevnt i dette spørsmålet så langt:
Kommentarer
- Merk at hvis et domene har en CNAME-oppføring domenet kan skrives ut på første linje i stedet for en IP-adresse.
Svar
getent hosts unix.stackexchange.com | cut -d" " -f1
Kommentarer
- Vurder også
ahosts
,ahostsv4
,ahostsv6
medgetent
. -
cut
vil ikke getent ‘ s, som bruker\t
for å skille kolonner. Dette er tilfelle på Solaris. - @ceving: På Sola ris må du kanskje kjøre
cut
uten-d
(standard er\t
som skilletegn). På Linux er det ‘ s mellomrom, slik at linjen over fungerer.
Svar
Løsningene som er gitt hittil fungerer for det meste i det enklere tilfellet: vertsnavnet løses direkte til en enkelt IPv4-adresse. Dette kan være det eneste tilfellet der du trenger å løse vertsnavn, men hvis ikke, nedenfor er en diskusjon om noen saker du kanskje trenger å håndtere.
Chris Down og Heinzi diskuterte kort saken der vertsnavnet løser seg til mer enn én IP-adresse. I dette tilfellet (og andre nedenfor) kan grunnleggende skript under antagelse om at et vertsnavn løses direkte til en enkelt IP-adresse, bryte. Nedenfor, et eksempel med et vertsnavn som løser mer enn 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 hva er www.l.google.com
? Det er her alias saken må innføres. La oss sjekke 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 seg ikke direkte til IP-adresser, men til et alias som i seg selv løser flere IP-adresser. Hvis du vil ha mer informasjon om aliaser, kan du sjekke her . Selvfølgelig er tilfellet der et alias har en enkelt IP-adresse mulig , 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 lenkes?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 fant ikke noe eksempel der et vertsnavn løser seg til et alias som ikke løser en IP-adresse, men jeg tror saken kan oppstå.
Mer enn flere IP-adresser og aliaser, er det noen andre spesielle tilfeller … hva 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
Der vertsnavnet ipv6.google.com
er et bare IPv6-vertsnavn. Hva med dual-stack vertsnavn:
$ 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::
Igjen om IPv6, hvis verten din bare er IPv4, kan du likevel løse IPv6-adresser (testet på bare IPv4 WinXP og med ipv6.google.com, kan du prøve det på Linux). I dette tilfellet lykkes oppløsningen, men et ping mislykkes med en ukjent vertsfeilmelding . Dette kan være et tilfelle der skriptingen din mislykkes.
Jeg håper disse kommentarene var nyttige.
Kommentarer
- For en flott utfyller det aksepterte svaret, og viser alle edge-tilfeller man kanskje vil håndtere i skript. Min versjon
host
oppgir ikke engang » har adresse » for boksene mine.
Svar
For å unngå problemet med aliaser og alltid få en enkelt IP-adresse klar til bruk:
python -c "import socket; print socket.gethostbyname("www.example.com")"
Kommentarer
- Jeg lagde en bash-funksjon for å stikke i bashrc fra dette svaret: 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 uten avhengighet av andre systemer (og for verter spesifisert i / etc / hosts)
Kommentarer
- Bruk av ping er det jeg trengte da jeg trenger verdien fra vertsfilen, men sed mønsteret parses riktig, men dette fungerte ping – q -c 1 -t 1 your_host_here | grep PING | sed -e » s / ^ [^ (] * [(] // » | sed -e » s / [)]. * $ // »
- For å løse noe på hjemmenettverket mitt som mittnavn.lokal fungerer dette for meg dette er det beste svaret.
- Kan jeg foreslå dette også:
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 for erklæringer i/etc/hosts
også … og det ‘ er gå-til-verktøyet for alle slags systemdatabaser (passwd, gruppe, aliaser, tjenester).
Svar
Enkelt, men nyttig :
-
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 verten fremdeles eksisterer. Hvis verten peker på et CNAME, vil den også få IP-adressen i den sak.
Den første kommandoen returnerer den løste IPv4-adressen.
Den andre kommandoen returnerer res olved IPv6-adresse.
Den tredje kommandoen returnerer eierens foretrukne adresse, som enten kan være en IPv4- eller en IPv6-adresse.
Kommentarer
- Den desidert mest enkle. Og det er tilgjengelig som standard. Ikke som
host
som krever installasjon avbindutils
Svar
Her er en liten variasjon av ping
tilnærmingen som tar hensyn til «ukjent vert» (ved å røre gjennom stderr) og bruker tr
for å unngå bruk av sed
regexps:
ping -c1 -t1 -W0 www.example.com 2>&1 | tr -d "():" | awk "/^PING/{print $3}"
I tilfelle det er viktig å fange utgangsverdien, så fungerer følgende (men 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øsningen, fordi den fungerer uten ekstra verktøy.
Svar
For å fullføre Chris Downs svar, og adressere jfgagne-kommentarer om (muligens lenket) aliaser, her er en løsning som:
- tar hensyn til flere IP-er
- tar hensyn til ett eller flere aliaser (CNAME)
- spør ikke
/etc/hosts
fil ( i mitt tilfelle ønsket jeg det ikke); for å spørre om det, dbernt «s python-løsning er perfekt) -
bruker ikke awk / sed
dig +short www.alias.com | grep -v "\.$" | head -n 1
Returnerer alltid den første IP-adressen, eller tom tring hvis den ikke er løst. med versjon av dig:
$ dig -v DiG 9.8.1-P1
Kommentarer
- Takk, andre svar antar at » dig + kort » alltid returnerer en enkelt ip-adresse. De ‘ t sto for CNAME.
Svar
php -r "echo gethostbyname("unix.stackexchange.com");"
Kommentarer
- dette fungerer, men det krever at php er installert på terminalen din
- kan være nyttig i en typisk php docker container der » vert «, » dig » etc. er ikke tilgjengelig
Svar
Jeg skulle gjerne lagt til dette som en kommentar til Andrew McGregor Re: ping. Det ville imidlertid ikke la meg, så jeg må legge til dette som et annet svar. (Hvis noen kan flytte det til en kommentar, er du velkommen til.)
Dette er en annen variant, bare ved bruk av ping og grep. :
ping -q -c1 -t1 your_host_here | grep -Eo "([0-9]+\.?){4}"
grep -E
for utvidet regulært uttrykk og grep -o
til returner bare den matchende delen. selve regexp ser etter ett eller flere sifre ([0-9]+
) og eventuelt et punktum (\.?
) fire ganger ( {4}
)
Svar
Du kan bruke 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-oppskrift Jeg kokte opp med andre folks svar – prøv først /etc/hosts
, og fall så tilbake 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 å være klar, er
getent hosts
‘ t bare et oppslag i / etc / hosts – det ‘ er en fullstendig DNS-løsning for samtale til gethostbyaddr (3) , og det ‘ s veldig usannsynlig å mislykkes i et tilfelle derdig
vil lykkes. Se mansiden for getent . - @Stuart har rett – jeg ‘ har lært mye siden du skrev det og forenklet en kraftig kommando.
getent
er fortsatt min favoritt, selv om jeg også likerdig +short
Svar
nmap -sP 192.168.178.0/24|grep YOUR_HOSTNAME|sed -n "s/.*[(]\([0-9\.]*\)[)].*/\1/p"
var løsningen jeg fant uten DNS-server
Svar
Kanskje ikke det mest konsise, men det ser ut til å 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 gir ut en enkelt IPv4 IP, samt returnere 1
i tilfelle feil, mens du maskerer stderr-utdata.
Du kan bruke den slik:
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 ha en IPv6-adresse, er det bare å erstatte -4
med -6
.
Svar
dig +noall +answer +nocomments example.com | awk "{printf "%-36s\t%s\n", $1, $5 }"
Kommentarer
- Noe sammenheng på hvilken måte svaret forbedres i forhold til de allerede eksisterende vær flott. Vær så snill å trekke inn kommandoer med fire mellomrom (jf. Syntaks for markdown).
Svar
dig er også treg, nslookup er mye raskere
nslookup google.com | grep -Po "Address:\s*[0-9.]+" | tail -1 | sed -e "s/Address:\s*//g"
Svar
1 linje løser en liste av vertsnavn
for LINE in `cat ~/Desktop/mylist`; do a=$(nslookup $LINE | awk "/^Address: / { print $1 }"); echo $a >> ~/Desktop/ip; done
Svar
Jeg gjør dette hele tiden på min Mac som ikke har getent
. ping
virker som et hack. Jeg vil også ta /etc/hosts
med i betraktningen.
Så, jeg skrev en dum innpakning til dns.lookup
for du som har Node.js installert for å gi en CLI:
$ npm install -g lookup-hostname $ lookup google.com 62.243.192.89
Kommentarer
- 60% sjanse brudd før du kommer i nærheten av en løsning.
- @dotbit kan du utdype det? Jeg ‘ har brukt dette ukentlig siden ‘ 17 og har aldri hatt noen problemer.
- @Jensen men du ‘ er den eneste noensinne, som alltid. Vi andre støter vanligvis på FAIL av den ene eller den andre typen, og alltid.
- » som alltid » Hva mener du med det? » Vi andre » Hvem ‘ er det ? » Mislykkes » Hvilket spesifikt problem ser du? Jeg ‘ er nysgjerrig.
Svar
Jeg don » ikke vet den enkleste måten for et bash-skript, men hvis du vil løse et vertsnavn og se om verten er oppe, bruk ping
!
ping -a hostname -c 1
Vil ping
verten en gang og løse vertsnavnet 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
- å bruke ping er bra, fordi alle har det, men du må filtrer IP-delen fra utgangene, hvis du vil bruke den i et skript.
Svar
Ja, det er mange svar allerede, men en løsning som bruker perl mangler:
perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" unix.stackexchange.com
I et bash-skript kan det brukes slik:
#!/bin/bash ipaddr=$(perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" unix.stackexchange.com) echo $ipaddr
Moduler som brukes her er kjernemoduler, så de bør være tilgjengelige overalt uten å installere med CPAN.
Kommentarer
-
perl -MSocket -MNet::hostent -E 'say inet_ntoa((gethost shift)->addr)' unix.stackexchange.com 2>/dev/null
er mye renere. men ingen andre enn oss to bruker p ö rl, alle andre bruker selvfølgelig Pascal Script. - Egentlig foretrekker jeg å se feilmeldingene hvis noe går galt.
Can't call method "addr" on an undefined value
er ikke ‘ t akkurat den beste feilmeldingen, men kan gi et hint 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
- Rubyversjonen skriver ut anførselstegn rundt IP-adressen — sannsynligvis bør
print
brukes i stedet forp
. - thx, @Slaven Rezic og gjerne stemme. så igjen, her nederst kan skriptet være mer synlig faktisk … 😉
Svar
host -t a cisco.com
denne kommandoen viser ip-adresse (vil gjenta domene til IP)
Svar
I tillegg til løsningen ovenfor, kan du oversette flere vertsnavn til ip via skriptet nedenfor, den eneste avhengigheten er «ping» -kommandoen i kjerne 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>
svaret er et sted der nede i bunnen. Det ‘ er det enkleste, krever ingen ekstra pakker og er lettere å analysere fra et Bash-skript også.getent hosts somehost
, når kjører denne mens du er påsomehost
vil produsere en IPv6-adresse , som er forskjellig fra hvordan de fleste andre verktøy (ping
,ssh
i det minste) løse navn og bryte noen ting. Brukahosts
i stedet forhosts
.ahostsv4
) eller IPv6 (ahostsv6
) adresser? Personlig finner jeg ingenting galt med at den uspesifikke forespørselen om å returnere IPv6. Koden din skal utarbeides. IPv6 har vært der i mer enn 20 år nå.hosts
, og så langt har 4 personer oppstemt vinc17 ‘ s kommentar som uttrykker smerten forårsaket av » plutselig IPv6 «. Å være forberedt på IPv6 er ikke alltid problemet: mange programmer trenger en måte å avgjøre om to navn / adresser refererer til samme vert. De kan enten bruke enkel strengtilpasning, eller de må vite mye om nettverket for å finne » true » svaret. Sistnevnte er et minefelt, så mange tredjepartsprogrammer og -systemer – som jeg ikke har kontroll over – bruker det første.