De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Dicas e truques para configuração de um ambiente de trabalho com shell

Colaboração: Fernando M. Roxo da Motta

Data de Publicação: 16 de maio de 2014

De tempos em tempos vemos aqui na Dicas-L uma pilha de dicas realmente valiosas, outras, como algumas das minhas, nem tanto. Hoje eu estava lendo um artigo sobre artimanhas, ou artes e manhas, com o prompt do Bash. Sim, embora muitos não acreditem, ainda existem muitos usuários Linux que utilizam a tal "tela preta" que aterroriza os mais arraigados usuários de interfaces gráficas. Não só isto, existem até aqueles que são capazes de usar o vi[|m] para escrever uma dica!

Sabem como é, uma mente desocupada é um caldeirão em ebulição. Não que não tenha nada para fazer, na verdade tenho muito o que fazer, mas estou com preguiça e a hora do almoço está chegando, então vou fingir que estou trabalhando escrevendo uma dica. ;)

Sobre o que falar? Bem, eu lembrei que quando eu trabalhava em uma grande empresa brasileira de petróleo, eu usava um ambiente bem complexo. Haviam dezenas de aplicativos específicos da minha atuação profissional. Mais ainda, estas aplicações rodavam em estações Unix (os mais diversos "sabores") e Linux. O diretório pessoal era distribuído via NFS, portanto o mesmo ~/.profile era executado em todas as plataformas. Cada aplicação necessitava um conjunto de variáveis de ambientes para a sua execução. A consequência disto vocês podem imaginar, um ~/.profile quilométrico e completamente desorganizado, um pesadelo evitado por 11 entre 10 profissionais de suporte, principalmente porque os .profile eram pessoais, ou seja todos eram iguaizinhos, só que diferentes. :P

Ok, hoje já não trabalho naquele ambiente, mas ainda tenho vários aplicativos ou ambientes que precisam de um conjunto de variáveis de ambientes específicas. Como resolver isto?

Vocês já repararam na configuração do sistema qual a estrutura do /etc/profile e do /etc/profile.d? Ou mesmo a estrutura dos diretórios /etc/rc.*. Resolvi usar algo similar para mim.

Primeiro passo, alterei meu ~/.profile para :

#
#  Não use #! se a sua SHELL não é Bash
#
#  Carrega as configurações necessárias para seção interativa
#
# Para debug
# set -xv
#
#  Se quiser cancelar a execução sem desistir do "login":
#return
#
MEU_OS="`uname`"
TTY="`tty|cut -d\/ -f 2`"
#
#  No caso do administrador tentar forçar um csh ou similar.
#  Se possível, troca a SHELL pelo Bash
#
if [ "$MEU_OS" = "Linux"       -a \
  "$TTY" = "dev"        -a \
  -z "$BASH_VERSION" ]; then
export SHELL=/bin/bash
exec bash --login
fi
#
# Aqui começa a festa.
#
for s in $HOME/.profile.d/*.sh; do

if [ -x $s ]; then

 . $s

fi

done
#
#  Desliga o debug
#
set +xv
#
#   agora deixa de brincadeira e vamos trabalhar, po !!
#

Ok, parte da jogada já foi feita agora vamos organizar a brincadeira.

Nesta segunda etapa vamos criar o diretório ~/.profile.d.

$ mkdir -p ~/.profile.d
$ cd ~/.profile.d

Vamos criar um script base para a nossa estrutura de configurações. Um modelo poderia ser:

#
#  Não usar "#!", use o interpretador ativo.
#
#  script modelo para as configurações.
#
#  Função:  Configuração do 
#
#  Recomendações:  Colocar avisos específicos para evitar estragar tudo.
#
#  Criação:  data da criação (dããããããã)
#
# Debug:
# set -xv
# 
# Colocar aqui as configurações específicas.

# 
# 
# Desliga o Debug
#
set +xv

Salve este arquivo com o nome de modelo.sh, NÃO dê autorização de execução para ele.

Como criar os outros arquivos? Bem, eu uso um padrão de nome que é NN<oqueestouconfigurando>.sh.

Por exemplo, por conta da história que contei lá em cima o primeiro arquivo criado se chamava 00sys.sh. O 00 (zerozero) vai garantir que ele vai ser o primeiro a ser executado. Eu o uso para configurações específicas do systema, por exemplo:

#
#  Não usar "#!", use o interpretador ativo.
#
#  Função:  Configuração de variáveis específicas do sistema.
#
#  Criação:  25/04/1997
#
#  Alterado: 05/10/1999 
# - Alterada a forma "export VAR=..." para "VAR=..." "EXPORT VAR"
#   O ksh do IRIX não gosta disto.
#
#  Alterado: 12/03/2001
#  - Incluida a chamada do fortune
#
#  Alterado: 07/05/2004
#  - Incluida a chamada 'cal'
#
#  Alterado: 17/08/2007
#  - Alterada a chamada do fortune.
#
# Debug:
# set -xv
# 
#----------------------------------------------------------
#  Configurações iniciais ...
#----------------------------------------------------------
#
#  verifica onde estou ...
#
export MEU_SYS=`uname -s`
export NODE=`uname -n | cut -f1 -d\.`
#
#  verifica de onde vim ...
#
temp="`who am i`"
temp="`echo $temp`"
#
#  Estou local ou remoto ?
#
#  O "who am i" no Irix parece ter o "cerebro danificado" e nao informa
# de onde o indigitado esta' se logando.  Mas, pelo menos na unica
# que consegui logar, existia uma variavel "REMOTEHOST" com a informacao.
#
if [ "$MEU_SYS" = "IRIX" -o "$MEU_SYS" = "IRIX64" ]; then
DONDE="$REMOTEHOST"
else
DONDE="`echo $temp | cut -f2 -d\( | cut -f1 -d\)`"
fi
primc="`echo $DONDE | cut -c1`"
if [ ! -z "$WHOAMI" ]; then
DONDE=$WHOAMI
fi

#
#  Se $DONDE == $temp  | $DONDE(1:1) == ':' entao esta' local ...
#
if [ "$DONDE" = "$temp"  -o \
  "$primc" = ":" ]; then
  DONDE="$NODE"
fi
#
#  Se o endereco nao foi resolvido, entao ou o DISPLAY esta' ok
#  ou entao eu vim da rede de micros.
#
#  Mas algumas ( quase todas ) so' escrevem parte do nome, por isto
#  vamos tentar determinar qual deve ser o nome correto.
#
case "$primc" in
 [0-9])  echo "O seu endereco nao foi resolvido pelo sistema."
         ;;
 
 *)      DONDE="`echo $DONDE | cut -f1 -d\.`"
 ;;
esac
#
export DONDE
#
#
if [ -z "$DISPLAY" -a "$TERM" != "linux" ]; then
export DISPLAY=$DONDE:0.0
echo
echo "DISPLAY=$DISPLAY"
else
echo
echo "default DISPLAY=$DISPLAY"
fi
#
#  Se estiver vindo do Zaurus
if [ "$DONDE" = "zaurus" ]; then
     stty cols 42
fi
# ==========  este arquivo é longo, é só para dar idéia do que é
#
#  Os terminais no Irix parecem nao obedecer ao ^C.  Para esta joca funcionar,
#  estabelece claramente o que se quer.
#
if [ "$SYS" = "IRIX" -o "$SYS" = "IRIX64" ]; then
stty intr "^C" 2>/dev/null
fi
#
#
#  O telnet do rWindow$ 95 se identifica como 'ANSI' e as maquinas
#  Unix nao costumam ter este terminal no terminfo/termcap.
#  A substituicao por vt100 parece funcionar a contento.
#
if [ "$TERM" = "ANSI" ]; then
export TERM=vt100
fi
#
#  O CDE usa um tal de "dtterm", trata este caso.
#
if [ "$TERM" = "dtterm" ]; then
export TERM=xterm
fi

# ==========  este arquivo é longo, é só para dar idéia do que é
#
#----------------------------------------------------------
#  Para saber o que me espera, lista o uptime...
#----------------------------------------------------------
#
uptime
#
#acpitool
#
echo ""
cal
#
# Ninguém é de ferro...
fortune -sa
#
set +xv

Ok, concordo que este exemplo pode ser meio usual, mas acredito que alguns que leem estas dicas ainda enfrentam este tipo de problema e podem se beneficiar da magia negra acima. Na verdade este script é muuuuito longo, cuidando de casos como uso de console de sistemas específicos e mais um mundo de tralhas.

Em seguida eu tenho um que cuida do meu conforto pessoal, o 10ambiente.sh:

#
#  Não usar "#!", use o interpretador ativo.
#
#  Função:  Configuração de variáveis para meu conforto pessoal
#
#  Criação:  25/04/1997
#
#============ cortada uma longa série ========8<-----------------
#
#  Alterado: 17/08/2010
#  - Alterada a definição do prompt para o caso de acesso vi 'ssh'.
#
# Debug:
# set -xv
#
#----------------------------------------------------------
# The different colours as variables
#----------------------------------------------------------
R="\033[01;31m" # Red
G="\033[01;32m" # Green
Y="\033[01;33m" # Yellow
B="\033[01;34m" # Blue
M="\033[01;35m" # Magenta
C="\033[01;36m" # Cyan
W="\033[01;37m" # White
D="\033[0m"     # Back to default
#
#  Exemplo de uso.
#
#HOSTNAME=`uname -n`
#KERNEL=`uname -r`
#CPU=`uname -p`
#ARCH=`uname -m`
#echo -e "$R#===================================================#" 
#echo -e "       $W Welcome $B $USER $W to $B $HOSTNAME  " 
#echo -e "       $R ARCH   $W= $ARCH                     " 
#echo -e "       $R KERNEL $W= $KERNEL                   " 
#echo -e "       $R CPU    $W= $CPU                      " 
#echo -e "$R#==================================================#"
#
#
#----------------------------------------------------------
#  Variáveis especificas para aplicações
#----------------------------------------------------------
#
#
#  para uso com o PYTHON
#
#export PYTHONPATH=$HOME/desenv/python/lib/python
# Path for manual pages
if [ -n "$PYTHONPATH" ]; then
export PYTHONPATH=$PYTHONPATH:/lib/python2.7/site-packages:/desenv/python/lib/python
else
export PYTHONPATH=$HOME/lib/python2.7/site-packages:/desenv/python/lib/python
fi
#
#  para uso com o MPI
#
if [ -f /usr/lib/liblam.a ]; then
export LAMRSH="ssh -x"
export LAMMPIF77=gfortran
fi
#
#----------------------------------------------------------
#  Variáveis de ambiente genéricas
#----------------------------------------------------------
#
# Meu prompt:
# | hostname:$PWD
# | $ _
#
#  Normal : Cyan
#  SSH    : Verde
#  Android: Amarelo
#  Root   : Vermelho
#
#  PS1="\n\\[$R\\]$NODE:\$PWD \n#\\[$D\\] "
#
#
if [ ! -z "$SSH_CONNECTION" ]; then
PS1="\n\\[$G\\]$NODE:\$PWD \n$\\[$D\\] "
elif [ "$TERM" = "screen" -o "$TERM" = "screen-bce" ]; then
PS1="\n\\[$Y\\]$NODE:\$PWD \n$\\[$D\\] "
else
PS1="\n\\[$C\\]$NODE:\$PWD \n$\\[$D\\] "
fi
#
# Só de sacanagem...
# export PS1="\n\\[$G\\]C:${PWD////\\\\}>\\[$D\\] "
#
#
#----------------------------------------------------------
#

VISUAL="`which vim 2>/dev/null`"
if [ "$?" != "0" ]; then
VISUAL=vi
fi
EDITOR=$VISUAL
export EDITOR VISUAL
#
#  Para o ScientificLinux 4.4
#
#  Usa rubout como erase char
stty erase ^? 2>/dev/null
#----------------------------------------------------------
#
#   Qual o PATH para as funcoes da Korn Shell ?
#
FPATH=$HOME/.functions
#
#  O BASH parece não ter este recurso, vamos na mão grande como
#  faz o /etc/profile :
for i in $HOME/.functions/*.sh ; do
 if [ -x $i ]; then
     . $i
 fi
done
#
#----------------------------------------------------------
#
#  Constrói o PATH
#
echo $PATH | grep sbin > /dev/null
if [ "$?" != "0" ]; then
PATH=$PATH:/sbin:/usr/sbin
fi
echo $PATH | grep $LOGNAME > /dev/null
if [ "$?" != "0" ]; then
PATH=$PATH:$HOME/bin
fi
echo $PATH | grep "$HOME/bin/$MEU_OS" > /dev/null
if [ "$?" != "0" ]; then
PATH=$PATH:$HOME/bin/$MEU_OS
fi
#  Este é para o emulador SIMHV
echo $PATH | grep "$HOME/bin/simhv" > /dev/null
if [ "$?" != "0" ]; then
PATH=$PATH:$HOME/bin/simhv
fi
echo $PATH | grep "bin/Linux64" > /dev/null
if [ "$?" != "0" -a "$ARCH" = "x86_64" ]; then
PATH=$PATH:$HOME/bin/Linux64
fi
echo $PATH | grep "[^a-zA-Z0-9]\.[^a-zA-Z0-9]"  > /dev/null
if [ "$?" != "0" ]; then
PATH=$PATH:.
fi

if [ "$MEU_OS" = "SunOS" ]; then

echo $PATH | grep "/usr/ccs/bin"  > /dev/null
if [ "$?" != "0" ]; then

   PATH=$PATH:/usr/ccs/bin

fi

fi

echo $PATH | grep "/sismica/bin"  > /dev/null
if [ $? -ne 0 ]; then #{
if [ -d /sismica/bin ]; then #{
 PATH=$PATH:/sismica/bin
 if [ -d /sismica/bin/$MEU_OS ]; then #{
    PATH=$PATH:/sismica/bin/$MEU_OS
 fi #}
fi #}
fi #}

# Ninguém é de ferro.  ;)
echo $PATH | grep "/usr/games"  > /dev/null
if [ $? -ne 0 ]; then   #{
    PATH=$PATH:/usr/games
fi #}

echo $PATH | grep "/usr/share/games"  > /dev/null
if [ $? -ne 0 ]; then   #{
    PATH=$PATH:/usr/share/games
fi #}

export PATH
#
# Tratamento do Mail
#

export MAIL=$HOME/mail/IN_

if [ ! -z "$MAILMSG" ]; then # This is at Shell startup. In normal echo "$MAILMSG" # operation, the Shell checks fi # periodically. # # Proxies # #export http_proxy="http://proxy:" #export ftp_proxy="http://proxy:" #export gopher_proxy="http://proxy:" #export wais_proxy="http://proxy:" # #export no_proxy="localhost,192.168.*,10.*" # # #---------------------------------------------------------- # Servicos Intra/Internet #---------------------------------------------------------- # # Para o irc # #export IRCSERVER=irc.brasnet.org #export IRCNICK=SeiLa #export IRCNAME="Ergo Sum" # # para o News # .export NNTPSERVER=news.uol.com.br # # para o WWW # export WWW_HOME="file:///usr/share/xubuntu-docs/index.html" export WWW_HOME # # # BROWSER settings.... # #export BROWSER="netscape -raise -remote \"openURL(%s,new-window)\":lynx" #export BROWSER="netscape -n %s:lynx" #export BROWSER="MozillaFirebird %s:lynx" export BROWSER="firefox %s:lynx" # # #-------------------------------------------------------------- # # Define impressora padrão #export PRINTER=PDF # #-------------------------------------------------------------- # # # outras configurações set -o ignoreeof set -o vi #set -o noclobber # nao escreve por cima de file existente. if [ "$meu_SYS" = "Linux" -a ! -z "$KSH_VERSION" ]; then export HISTFILE=$HOME/.sh_history export HISTSIZE=5000 fi # #export HISTSIZE=1000 # lembra os últimos 1000 comandos # Esta é da Dicas-L export HISTSIZE=1000000 HISTFILESIZE=1000000 # 1M comandos!!!! export HISTCONTROL=ignoredups # o shell history nao precisa guardar duplicatas. # # permite mensagens. # mesg y 2>/dev/null # umask 022 # # Cores para o 'ls' # if [ -f $HOME/.dir_colors ]; then eval `dircolors $HOME/.dir_colors` fi # # Limites para a secao... # # Evita geração de core dump ulimit -c 0 2>/dev/null # Alguns sistemas reclamam disto. # set +xv # #

Eu sei que este foi muuuuito longo, mas é para mostrar um pouco do que aconteceu quando os computadores deixaram de ser movidos a lenha. :)

Ok, se eu tenho que configurar uma aplicação, como eu faço?

Como tenho muitos aplicativos e pacotes da área de geofísica (ninguém é perfeito) eu os instalo todos sob um diretório, por isto eu tenho uma configuração geral para todas as aplicações de geofísica no script 45geof.sh:

#
#  Leave the above line as is, don't #! it.
# nome        : geof.sh
# author      : Fernando M. Roxo da Motta 
# description : Script for geophysics environment configuration
# changelog :
# 14/01/2004 - 1st version
#
# Just for debug, leave commented
# set -xv
#
if [ -z "$GEOFDIR" ]; then
#
#
# Put your geophysics directory tree root here :
export GEOFDIR=/usr/local/geof
#
if [ -d $GEOFDIR ]; then


   PATH=$GEOFDIR/bin:$PATH
   export PATH

fi
#
fi
#
set +xv

Um exemplo específico, para o pacote Seismic Unix (SU) do Center for Wave Phenomena (CWP) eu uso o

#
#  Leave the above line as is, don't #! it.
# nome        : cwp.sh
# author      : Fernando M. Roxo da Motta 
# description : Script for CWP/SU environment configuration
#               See:  http://cwpcodes.mines.edu/
# changelog :
# 14/01/2004 - 1st version
#
# Just for debug, leave commented
# set -xv
#
CWPROOT=$GEOFDIR/cwp
if [ -d "$CWPROOT" ]; then
#
#
# Put your CWP/SU directory tree root here :
export CWPROOT
#
if [ -d $CWPROOT ]; then

   export PATH=$CWPROOT/bin:$PATH

   #
   #  Define o visualizador de PS
   #
   type -p gv > /dev/null 2>&1
   if [ $? -eq 0 ]; then
     export PSPREVIEWER="gv -"
   fi
   #
   export MEUCWP=$HOME/geof/cwp
   #
   #  Para o pacote TkSu
   #
   export TKSU_PATH=$MEUCWP/tksu
   export TKSU_TMPDIR=/tmp/tksu.$LOGNAME
   if [ ! -d $TKSU_TMPDIR ]; then
      mkdir -p $TKSU_TMPDIR
      chmod 1777 $TKSU_TMPDIR
   fi

fi
#
fi
#
set +xv

Isto pode se repetir "ad nauseam", eu tenho 15 scripts "50xxxx.sh", todos eles para aplicações ou pacotes de geofísica. Alguns destes não estão em uso. Como faço para inibir a execução de um deles? Basta tirar a autoridade de execução:

$ cd ~/.profile.d
$ chmod -x 50scriptdesb.sh

Por último, e não menos importante, eu tenho as definições de alias para as minhas seções no "80aliases.sh":

#
#  Não usar "#!", use o interpretador ativo.
#
#  Função:  Configuração de alias de comandos
#
#  Criação:  25/04/1997
#
#============ cortada uma longa série ========8<-----------------
#
#
# Debug:
# set -xv
#
#
#  Definição de aliases genéricos
#
# 
if [ "$MEU_OS" = "Linux" ]; then
#
alias l="ls -lA --color=tty"
alias ls="ls -FA --color=tty"
alias lh="ls -lhA --color=tty"
alias bc="bc -l ~/.bc/*"
#
#----------------------------------------------------------
#   alias file default do CL 8
#----------------------------------------------------------
#
alias minicom='minicom -con -L'
alias ts='tail -f /var/log/syslog'
alias tm='tail -f /var/log/messages'
alias tmm='tail -f /var/log/mail.log'
alias tms='tail -f /var/log/secure'
alias cds='cd /etc/rc.d/init.d ; ls'
#alias fd='mount /dev/fd0 /mnt/floppy ; cd /mnt/floppy ; ls'
#alias ufd='cd /mnt ; umount floppy ; ls'
#alias ldir='mount /mnt/floppy ; l /mnt/floppy ; umount /mnt/floppy'
else
alias l="ls -lA"
alias ls="ls -FA"
alias bc="bc -l"
fi
#
# ---------------------------------------------------------
#
alias apt-get='apt-fast'
#
# ---------------------------------------------------------
#
nada=`type mpif90 > /dev/null 2>&1`
RC1=$?
nada=`type mpif77 > /dev/null 2>&1`
RC2=$?
if [ $RC1 -ne 0 -a $RC2 -eq 0 ]; then
alias mpif90="~/bin/mpif90.sh"
fi
unset nada RC1 RC2
#
# ---------------------------------------------------------
# Para montagem de dispositivos MTPfs
# http://www.omgubuntu.co.uk/2011/12/how-to-connect-your-android-ice-cream-sandwich-phone-to-ubuntu-for-file-access
#
alias razr-connect="mtpfs -o allow_other /media/RzrI"
alias razr-disconnect="fusermount -u /media/RzrI"
#
# ---------------------------------------------------------
#  Sou preguiçoso, este é o comando que mais uso. :p
alias x=exit
#
alias rm="rm -i"
#http://www.dicas-l.com.br/arquivo/aumente_sua_produtividade_com_aliases_inteligentes.php
#
#alias mkdir='mkdir -pv'
#
$TYPE vi >/dev/null 2>&1
if [ $? -ne 0 ]; then
alias vi="$VISUAL"
fi
#
alias xlinks="links2 -driver x"
#
# Abre um terminal na máquina remota...
alias maisum="xterm -geometry 80x25 -ls -sl 1000 -fn 7x14 -sb -fg gray95 -bg black -title \"$LOGNAME\"@\"`hostname -s`\"&"
#
# dica :
#xterm  -fn fixed -bg black -fg yellow -geom 80x25-0-0 -e /bin/sh -c "who; read"
#
#  Alguns históricos
#
if [ "$MEU_OS" != "Linux" ]; then
alias more="more -dw"       # more que da' dica e nao sai se nao pedir
alias uso="ps -aF runame,tty,pid,time,vsz,pcpu,comm" # ps macetoso
fi

alias usov="ps avw|sort -n -k 5" # ps macetoso
alias xload="xload -geometry 73x73 -fg Blue -bg Gray75 -jumpscroll 1 -hl red -update 5 -label $NODE &"
alias xman="xman -bothshown -pagesize 750x750 -notopbox"

#
#----------------------------------------------------------------------
#
alias xdos="xdosemu"

#alias  quake="quake -mode 8"
#----------------------------------------------------------------------
#
alias tn=telnet
#
#
#  Alguns destinos
#alias bw1="ssh no1"
#alias bw3="ssh no3"
#
#alias linux02="ssh linux02"
#alias linux09="ssh linux09"
#alias linux51="ssh linux51"

#alias roxo2="ssh roxo@uml2"
#alias roxo3="ssh roxo@uml3"
#alias roxo4="ssh roxo@uml4"
#alias roxo5="ssh roxo@uml5"
#
alias  bacurau="ssh bacurau"
#
# Só por preguiça.
alias cls=clear

# Por alguma razão vivo perdendo a tecla "d"
alias c=cd

alias mc='. /usr/share/mc/bin/mc-wrapper.sh'
#  Inclui as funções ZZ
#source /usr/bin/funcoeszz
#export ZZPATH=/usr/bin/funcoeszz
#
# Shortcut via tab para o libreoofice
alias ooffice=libreoffice
#
# Emulador to Spectrum
function xspect() {
export LD_PRELOAD=libpulsedsp.so
/usr/bin/xspect
}

#
# Isto não é um alias, é uma função para obter a conversão entre moedas.
# Uso:  xcc Val Org Dst
# Onde:  Val é o valor a converter.  1 fornece a taxa de conversão.
#        Org Moeda original de Val.
#        Dst Moeda de destino da conversão.
# Ex:  xcc 1 usd brl  # converte de US$ para BRL.
#      xcc 1 usd arl  # converte de US$ para Peso Argentino.
#      xcc 1 eur usd  # converte de Euro para US$.
#
xcc() { wget -qO- "http://www.google.com/finance/converter?a=$1&from=$2&to=$3&hl=es" | sed '/res/!d;s/<[^>]*>//g'; }
#
set +xv

É claro que isto tudo é um apanhado de scripts para organizar um ambiente bem complexo, mas espero que possa dar ideias para administradores que têm que dar conta de uma situação destas.

Eu mostrei aqui como eu uso na minha máquina, se você tem uma rede complexa em que os seus usuários montam o diretório pessoal via NFS e 'automount', você pode manter no mesmo sistema de arquivos do $HOME de seus usuários uma estrutura só para estas configurações. Ainda mais, você pode ter um subdiretório para cada grupo de usuários e colocar as configurações específicas nestes subdiretórios.

Resumo da história, nada é tão simples que não possa ser complicado, mas pode-se complicar de forma organizada.

Espero que isto ajude.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Fernando M. Roxo da Motta