Sida 1 av 1
Hostname
Postat: 25 jul 2009, 23:07
av Linus Göransson
Jag har precis fått igång min webbserver och den fungerar som den ska. Problemet är när jag testar att ändra i /etc/hostname till en IP-adress istället så ser det ut som följande:
root@127:~$
OBS! Detta är bara ett exempel. Jag är inte inloggad som root.
D.v.s. att den "skalar" av efter första punkten. Min fråga är om det går att skriva ut hela IP-adressen?
Tacksam för svar!
Med vänliga hälsningar
Linus Göransson

Re: Hostname
Postat: 25 jul 2009, 23:13
av andol
/etc/hostname ska, likt namnet antyder, innehålla just ett värdnamn.
Låter som om du försöker lösa fel problem på fel sätt :)
Vilket resultat är det du är ute efter?
Re: Hostname
Postat: 25 jul 2009, 23:18
av Linus Göransson
andol skrev:/etc/hostname ska, likt namnet antyder, innehålla just ett värdnamn.
Låter som om du försöker lösa fel problem på fel sätt
Vilket resultat är det du är ute efter?
Att kunna se hela IP-adressen.

Re: Hostname
Postat: 25 jul 2009, 23:20
av andol
Jo, men var vill du att den ska visas? I terminalprompten enligt exemplet ovan?
Re: Hostname
Postat: 25 jul 2009, 23:23
av Linus Göransson
andol skrev:Jo, men var vill du att den ska visas? I terminalprompten enligt exemplet ovan?
Ja.
Re: Hostname
Postat: 25 jul 2009, 23:29
av andol
Rätt lösning är i sådant fall att peta på filen ~/.bashrc och där redigera variabeln PS1, så att prompten visar user@ip-adress istället för user@hostname.
Kan dock inte den syntaxen i huvudet.Kanske kan någon annan hjälpa dig. Annars så får jag återkomma.
Re: Hostname
Postat: 25 jul 2009, 23:32
av dmz
andol skrev:Rätt lösning är i sådant fall att peta på filen ~/.bashrc och där redigera variabeln PS1, så att prompten visar user@ip-adress istället för user@hostname.
Fast så enkelt är det nog inte... Om man inte kan använda sig av backticks i PS1 och greppa reda på IP från ifconfig eller dylikt då. Det vill säga, om man vill vara säker på att det faktiskt är ens IP och inte bara en nummerserie utan mening...
Re: Hostname
Postat: 25 jul 2009, 23:34
av dmz
Kanske borde testa innan jag skriver. Det gick ju utmärkt att använda sig av backticks.

Re: Hostname
Postat: 25 jul 2009, 23:38
av dmz
En riktigt ful fullösning
Kod: Markera allt
PS1="`whoami`@`ifconfig|head -2|tail -1|awk '{print $2}'|sed s/addr\://` > "
Edit: Buggfix
Re: Hostname
Postat: 26 jul 2009, 10:04
av andol
Utanför ämnet: För egen del hade jag gjort en`ifconfig eth0 | egrep "^\s*inet addr:" | sed -r "s/\s+inet addr:(([0-9]{1,3}\.){3}[0-9]{1,3})\s+.*/\1/"` där DMZ kör med `ifconfig|head -2|tail -1|awk '{print $2}'|sed s/addr\://`. Ingen aning om vilken utav dessa metoder som egentligen är bäst, men jag är rätt säker på att de säger något om skillnaden mellan mig och DMZ. Vad denna skillnad skulle vara är jag dok mindre säker på :)
Åter till ämnet.
Lösningen DMZ föreslår är helt funkis. Däremot kan den anpassas bättre till hur Ubuntu i övrigt sätter PS1 i
~/.bashrc.
Om du öppnar sagda fil så torde du hitta tre rader som sätter "PS1=...". Någonstans innan den första utav dessa ska du infoga följande rad.
Kod: Markera allt
IPA=`ifconfig|head -2|tail -1|awk '{print $2}'|sed s/addr\://`
Därefter ska du modifiera dessa tre PS1=. Börja med att lokalisera delen på raderna där det står
\u@\h. Byt där ut \h mot ${IPA}, så att du istället får
\u@${IPA}.
Notera att jag utgår från Ubuntu 9.04. Fullt möjligt att detaljerna skiljer sig i andra Ubuntu-versioner.
Re: Hostname
Postat: 26 jul 2009, 12:03
av dmz
Givetvis är andol's lösning klart snyggare. Skillnanden mellan oss är att jag är amatör.

Re: Hostname
Postat: 26 jul 2009, 14:03
av Linus Göransson
Jag gjorde precis som du skrev. Resultatet blev som följande:
root@:~$
D.v.s. den skriver inte ut något alls.

Re: Hostname
Postat: 26 jul 2009, 14:56
av dmz
Linus Göransson skrev:Jag gjorde precis som du skrev. Resultatet blev som följande:
root@:~$
D.v.s. den skriver inte ut något alls.

Posta din .bashrc
Re: Hostname
Postat: 27 jul 2009, 01:15
av Linus Göransson
dmz skrev:Linus Göransson skrev:Jag gjorde precis som du skrev. Resultatet blev som följande:
root@:~$
D.v.s. den skriver inte ut något alls.

Posta din .bashrc
Kod: Markera allt
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# don't put duplicate lines in the history. See bash(1) for more options
export HISTCONTROL=ignoredups
# ... and ignore same sucessive entries.
export HISTCONTROL=ignoreboth
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
IPA=`ifconfig|head -2|tail -1|awk '{print $2}'|sed s/addr\:`
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@${IPA}\[\033[00m\]$
else
PS1='${debian_chroot:+($debian_chroot)}\u@${IPA}:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
;;
*)
;;
esac
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
#if [ -f ~/.bash_aliases ]; then
# . ~/.bash_aliases
#fi
# enable color support of ls and also add handy aliases
if [ "$TERM" != "dumb" ] && [ -x /usr/bin/dircolors ]; then
eval "`dircolors -b`"
alias ls='ls --color=auto'
#alias dir='ls --color=auto --format=vertical'
#alias vdir='ls --color=auto --format=long'
#alias grep='grep --color=auto'
#alias fgrep='fgrep --color=auto'
#alias egrep='egrep --color=auto'
fi
# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
Re: Hostname
Postat: 27 jul 2009, 07:36
av andol
Tycker du att din IPA= ser ut som något vilket rekommenderades ovan?
Re: Hostname
Postat: 27 jul 2009, 11:29
av Konservburk
andol skrev:Utanför ämnet: För egen del hade jag gjort en`ifconfig eth0 | egrep "^\s*inet addr:" | sed -r "s/\s+inet addr:(([0-9]{1,3}\.){3}[0-9]{1,3})\s+.*/\1/"` där DMZ kör med `ifconfig|head -2|tail -1|awk '{print $2}'|sed s/addr\://`. Ingen aning om vilken utav dessa metoder som egentligen är bäst, men jag är rätt säker på att de säger något om skillnaden mellan mig och DMZ. Vad denna skillnad skulle vara är jag dok mindre säker på 
Du är mer petig med matchningen än dmz. Han plockar alltid ut andra ordet på andra raden, vilket inte nödvändigtvis behöver vara ip-adressen. Du antar å andra sidan att det alltid är eth0 som gäller, vilket kanske inte heller stämmer alla gånger.
Båda två har även onödigt mycket skräp i respektive pipeline. Finns
sed eller
awk med så bör det gå att klara sig utan
head,
tail,
grep och liknande.
För dmz hade det kunnat räcka med antingen
sed eller
awk:
Kod: Markera allt
ifconfig | sed '2!d;s/.*addr://;s/\s.*//'
ifconfig | awk -F'[ :]+' 'NR==2{print$4}'
Du hade klarat dig bra utan
egrep:
Kod: Markera allt
ifconfig eth0 | sed -nr "s/\s+inet addr:(([0-9]{1,3}\.){3}[0-9]{1,3})\s+.*/\1/p"
Själv hade nog plockat ut det första eth*-ip:t så här:
Kod: Markera allt
ifconfig eth | sed -n "/.*addr:/{s///;s/\\s.*//p;q}"
Exakt hur man gör beror förstås mycket på vad man är ute efter.
Sen vill jag också peka på att fnuttologin i det här fallet blir väldigt avgörande för i vilken ordning saker görs. Både dmz och du tar fram ip-adressen en gång när prompten sätts, vilket innebär att prompten inte kommer att återspegla eventuella ändringar av ip-adressen. Jämför dessa snarlika exempel:
Kod: Markera allt
IPA=`ifconfig eth | sed -n "/.*addr:/{s///;s/\\s.*//p;q}"`
PS1='${debian_chroot:+($debian_chroot)}\u@$IPA:\w\$ '
Vill man att ip-adressen som visas alltid ska vara den aktuella så behövs några extra fnuttar:
Kod: Markera allt
IPA='`ifconfig eth | sed -n "/.*addr:/{s///;s/\\s.*//p;q}"`'
PS1='${debian_chroot:+($debian_chroot)}\u@'$IPA':\w\$ '