sabato, Dicembre 21, 2024

Configurazione ottimale di una shell di Bash in FreeBSD 4.x

Questo documento proviene da , sito da tempo dismesso. La sua documentazione è qui pubblicata in modo tale che non vada persa e che possa quindi continuare a essere utile come lo era un tempo su FreeBDI.org.

Non basta installare dai ports o dai binari una “bash”, la shell su cui molti di voi son abituati da tempo ma bisogna creare alcuni files nelle nostre home-dir per configurare a dovere la bourne shell. Se invece decidessimo di tenere la shell proposta da FreeBSD , ossia la csh (linkata fra l’altro a tcsh, quindi son la stessa shell), dovremo solo preoccuparci di modificare .cshrc e .profile ad esempio.

Inizialmente su FreeBSD la bash non è neppure installata, ma dato che a me (ed a molti piace), la installeremo al volo dai ports con il comando:

#cd /usr/ports/shells/bash2 && make install clean"

A questo punto la prima cosa da fare è verificare se il file /etc/shells è aggiornato con il path dell’eseguibile della nostra nuova bash:

#less /etc/shells

e se fra le varie

/bin/sh
/bin/csh
/bin/tcsh
/usr/local/bin/ksh
/usr/local/bin/bash
/sbin/nologin

ci fosse il path della bash (/usr/local/bin/bash) sarebbe tutto ok, altrimenti lo aggiungeremo noi esattamente come indicato sopra. Ora proviamo dal prompt della nostra esistente csh (% = utente , oppure # = root) a lanciare una bash con il comando “#bash”. Ci dovrebbe apparire un prompt:

bash-2.05$

il che vuol dire che è installata in modo corretto.
Ora facciamo in modo che i nostri utenti al boot della macchina usino la bash con il comando “chsh“. Da root eseguiamo (ad es. con un utente pippo e root):

#chsh -s bash pippo
#chsh -s bash root

A questo punto non resta che configurarla a dovere anche se è una cosa abbastanza personale io vi do in pasto questi files da creare e/o modificare nella vostra home utente (ed anche root), tanto per aver un’idea di cosa possiamo fare. Con questi files ho settato il prompt differente, in modo che in ogni momento sai in che dir sei, cioè un prompt del tipo:

(bash) k7 10:16:59 /usr/local/bin #

ed anche i colori in shell pura ad ogni “ls” ecc.. Vi ricordo che questi son file di configurazione, ossia generalmente nascosti (questi lo sono), infatti cominciano tutti con un . (punto) e sono: .bash_profile, .bashrc, .cshrc e .profile.

---------------.bash_profile (nuovo da creare)----------------
# Bourne Again SHell configuration file for login shells.

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/bin:/usr/local/sbin:/usr/X11R6/
bin:/usr/local/lib/php ;
export PATH

# file permissions: rwxr-xr-x
umask 022

BLOCKSIZE=K; export BLOCKSIZE
EDITOR=aee; export EDITOR
PAGER=/usr/bin/less; export PAGER
LANG=it_IT.ISO_8859-1; export LANG
#TERM=xterm-color; export TERM

# set ENV to a file invoked each time bash is started for interactive use.
ENV=$HOME/.shrc; export ENV

# some useful aliases
alias h='fc -l'
alias j=jobs
alias l=$PAGER
alias ll='ls -la -FG'
alias l='ls -l -FG'
alias ls='ls -FG'
alias g='egrep -i'
alias df='df -H'
alias du='du -s -h'
alias mc='mc -c'
alias xterm='xterm -bg black -fg white'
alias licq='licq -- -noxim'
alias aterm='aterm -tr -trsb -tint cyan -sh 25 -fg lightgrey -txttype Invert -cr grey'

# set prompt
#PS1="[u@h] w $ "
#PS1="u@h w !$ "
PS1="h (bash) [$(tput md)]	 w[$(tput me)] $"
PS2=">"

# search path for cd(1)
# CDPATH=.:$HOME
[ -x /usr/games/fortune ] && /usr/games/fortune  italia && /usr/games/fortune freebsd-ti
ps

--------------------------------------------------------------------------

-----------------.bashrc (nuovo da creare)--------------------------------

# .bashrc - Bourne Again SHell configuration file for interactive shells.

# file permissions: rwxr-xr-x
umask 022

#PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/bin:/usr/local/sbin:/usr/X11R6
/bin:/usr/local/lib/php:/usr/local/linux-sun-jdk1.3.1/bin;
#export PATH

BLOCKSIZE=K; export BLOCKSIZE
EDITOR=aee; export EDITOR
PAGER=/usr/bin/less; export PAGER
LANG=it_IT.ISO_8859-1; export LANG
TERM=xterm-color; export TERM

# some useful aliases
alias h='fc -l'
alias j=jobs
alias l=$PAGER
alias ll='ls -la -FG'
alias l='ls -l -FG'
alias ls='ls -FG'
alias g='egrep -i'
alias df='df -H'
alias du='du -s -h'
alias mc='mc -c'
alias xterm='xterm -bg black -fg white'
alias licq='licq -- -noxim'
alias aterm='aterm -tr'
# set prompt
#PS1="[u@h] w $ "
#PS1='([$(tput md)]	 [$(tput me)]) $(echo $?) $ '
PS1='h [$(tput md)]	 w[$(tput me)] $'
PS2=">"

# search path for cd(1)
# CDPATH=.:$HOME

--------------------------------------------------------------

ATTENZIONE: la variabile di sistema LANG ci permette di settare l’internazionalizzazione (in questo caso in italiano) dell’intero sistema visto dall’utente in questione.
Mentre la variabile TERM=xterm-color, nel caso della bash va settata SOLO ED ESCLUSIVAMENTE nei files ~/.bashrc e ~/.xinitrc, in quanto verrà “presa” solo dalla sessione X. In shell pura la variabile di sistema TERM dovrà SEMPRE risultare in questo caso cons25.

I valori delle variabili impostate vengono visualizzati dal prompt di shell col comando:

$echo $TERM (per la variabile TERM in questo caso e cosi’ via ).

-------------.cshrc (esistente da modificare se si decide di usare questa al posto di bash)-----

# $FreeBSD: src/etc/root/dot.cshrc,v 1.25.2.2 2001/03/05 13:36:53 asmodai Exp $
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
# see also csh(1), environ(7).
#

alias h         history 25
alias j         jobs -l
alias la        ls -a
alias lf        ls -FA
alias ll        ls -lA
alias licq       licq -- -noxim
# A righteous umask
umask 22

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr
/local/linux-sun-jdk1.3.1/bin /usr/X11R6/bin /usr/local/lib/php )

setenv  EDITOR  aee
setenv  PAGER   less
setenv  BLOCKSIZE       K
#setenv TERM    xterm-color
setenv LANG     it_IT.ISO8859-1

if ($?prompt) then
        # An interactive shell -- set some stuff up
        set prompt = "csh-k7 %w $ "
        set filec
        set history = 500
        set savehist = 500
        set mail = (/var/mail/$USER)
        if ( $?tcsh ) then
                bindkey "^W" backward-delete-word
                bindkey -k up history-search-backward
                bindkey -k down history-search-forward
        endif
endif

[ -x /usr/games/fortune ] && /usr/games/fortune -s

------------------------------------------------------------------------------------

ATTENZIONE: Poco tempo fa, quando si installava la bash-2.05 dai ports, (da FreeBSD naturalmente), veniva automaticamente aggiunta una opzione ai vari ~/.cshrc di tutti gli utenti… a dir poco “perversa” (!). La stringa in questione veniva aggiunte sul fondo di .cshrc ed era esattamente:

[ -x /usr/local/bin/bash ] && exec /usr/local/bin/bash

Controllate nei vostri .cshrc se avete questa opzione e commentatela oppure (meglio) toglietela, in quanto è causa di problemi al boot del sistema, nel caso un giorno sceglieste di ritornare ad usare la csh, modificando semplicemente i settaggi di user (soprattutto root) con il comando “chsh -s csh root”, oppure modificando /etc/master.passwd con “vipw”. Attualmente infatti con le nuove versioni (4.7 al momento in cui scrivo), questa stringa NON viene piu’ applicata (e ti credo!!!). Questa cosa da problemi (verificato personalmente) se avete settato l’avvio di PPP (o PPPoE – è lo stesso) in automatico all’interno di /etc/rc.conf.

--------------------------.profile (esistente da modificare)------------------

# $FreeBSD: src/etc/root/dot.profile,v 1.20 1999/08/27 23:24:09 peter Exp $
#
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/lo
cal/lib/php:/usr/local/linux-sun-jdk1.3.1/bin
export PATH
#HOME=/root
#export HOME
TERM=${TERM:-cons25}
export TERM
PAGER=less
export PAGER

LANG=it_IT.ISO_8859-1
export LANG

------------------------------------------------------------------

Questa è una variante di “anathx” : Per far funzionare, (credo che funzioni solo per la bash) le lettere accentate della tastiera italiana sia in “shell pura” che in X e xterm vari, si deve creare nelle home_dir degli utenti (/root compresa quindi come di norma) il file “.inputrc“:

------------------------------------
set meta-flag on
set convert-meta off
set output-meta on
------------------------------------

Non vi resta che fare un sano COPIA/INCOLLA di tutto, uscire dalla shell e da X e riloggarvi da capo per vedere i cambiamenti. Non è necessario riavviare il sistema.

P.S. Un accorgimento utilissimo per fare lo “scrolling” della bash è quello di usare il tasto “Bloc Scorr” (quello in mezzo ai tasti “stamp” e “Pausa” in alto a destra, fra il tastierino numerico e le lettere). Naturalmente dopo aver premuto suddetto tasto, bisogna usare le freccette su e giù oppure pag-up e pag-down ma per sfortuna, non risale di molte righe…quindi dovremo usare il comando:

"#kbdcontrol -h 1000

se vogliamo farlo “risalire” di 1000 righe

Per far sì che ad ogni avvio sia settatto di default questo comando, dobbiamo inserire in “/etc/rc.conf” la riga:

allscreens_kbdflags="-h 1500"

Per quanto riguarda la configurazione shell in /etc/rc.conf vi butto questo esempio usato da me; (naturalmente per vedere il significato delle varie stringhe fate riferimento all’importantissimo “/etc/defaults/rc.conf“:

------------parte di /etc/rc.conf-----------

keymap="it.iso"
keyrate="fast"
keybell="visual"
saver="logo"

#vedi man moused
moused_enable="YES"
moused_port="/dev/psm0"
moused_type="auto"

#vedi man vidcontrol
allscreens_flags="-g 100x37 VESA_800x600  green"
allscreens_kbdflags="-h 1600 -r fast"

font8x16="iso-8x8"
font8x14="iso-8x14"
font8x8="iso-8x16"
clear_tmp_enable="YES"

-------------------------fine-----------------

Riferimenti docs:

  • man shells (riferito ad /etc/shells)
  • man bash (molto lungo e molto criptico…un vero manuale)
  • man csh

Articoli correlati

Noleggia una Tesla per il tuo evento ICT!

Categorie