você está aqui: Home  → Arquivo de Mensagens

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 !!
  #
  #========================8<-----------------------------

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:

  #========================8<-----------------------------
  #
  #  Não usar "#!", use o interpretador ativo.
  #
  #  script modelo para as configurações.
  #
  #  Função:  Configuração do <FIXME>
  #
  #  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
  #========================8<-----------------------------

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:

  #========================8<-----------------------------
  #
  #  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
  #========================8<-----------------------------

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":

  #========================8<-----------------------------
  #
  #  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:<porta>" #export ftp_proxy="http://proxy:<porta>" #export gopher_proxy="http://proxy:<porta>" #export wais_proxy="http://proxy:<porta>" # #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 # # #========================8<-----------------------------

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":

  #========================8<-----------------------------
  #
  #  Leave the above line as is, don't #! it.
  # nome        : geof.sh
  # author      : Fernando M. Roxo da Motta <email @ oculto>
  # 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
  #========================8<-----------------------------

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

  #========================8<-----------------------------
  #
  #  Leave the above line as is, don't #! it.
  # nome        : cwp.sh
  # author      : Fernando M. Roxo da Motta <email @ oculto>
  # 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
  #========================8<-----------------------------

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":

  #========================8<-----------------------------
  #
  #  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
  #========================8<-----------------------------

É 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.



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

 

 

Opinião dos Leitores

Murilo Fujita
18 Mai 2014, 10:11
Muito bom! Eu gostaria de uma orientação, por favor. Eu envio e-mails usando o sendEmail, mas quando preciso passar pelo proxy, como configuro o Bash? Vi que usou export http_proxy="http://proxy:<porta>. E no caso do protocolo SMTP? Obrigado e abraço!
Oscar Stockwel
16 Mai 2014, 12:58
Viva!
Eu costumava ler os seus posts num newsgroup sobre linux onde você tinha uma assinatura digital que julgo que seria uma expressão latina e que rezava mais ou menos assim: Non luctare, ludare! (Estou a dizer de côr pois já não me lembro bem da frase). Ora acontece que andei durante muito tempo a tentar saber o significado da mesma e, apesar do Google, não consegui saber. Já que o "vejo" novamente resolvi fazer este comentário. Pode, por favor, dizer-me qual o significado da frase?
Cesar Brod
16 Mai 2014, 11:37
Grande Roxo! Estava com saudade de suas dicas!
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script