FAQ Unix

Tout ce que vous avez toujours voulu savoir sur l'utilisation (minimale) d'une station UNIX au LIA

Sous-sections : LaTeX - Images/Graphiques/etc... - emacs

Cette section :


Qu'est-ce qu'une FAQ ?

FAQ est l'abréviation de "Frequently Asked Questions" (parfois traduit "Foire Aux Questions"). Ce terme provient des news où il est employé pour désigner la/les news qui regroupe(nt) les réponses aux questions les plus fréquements posées dans un newsgroup.
Qui dit FAQ suppose donc des QUESTIONS POSÉES. N'hésitez donc pas à me contacter pour poser des questions relatives à votre utilisation quotidienne des stations Unix.


Comment avoir la notion de "poubelle" sous Unix ?
Comment ne plus perdre tous mes fichiers avec un rm malheureux ?

Avec ce petit bout de csh-script, à mettre dans votre .cshrc

#
# Poubelle ou WasteBasket
#
setenv POUBELLE ${HOME}/.wastebasket
alias rm       'mv \!* ${POUBELLE}'
alias unrm     'mv -i ${POUBELLE}/\!* .'
alias undelete 'mv -i ${POUBELLE}/\!* .'
alias vide-poubelle '/bin/rm -fr ${POUBELLE}; mkdir ${POUBELLE}'
alias eboueur vide-poubelle

et faire un vide-poubelle lors de la première installation afin de créer le répertoire poubelle, sinon ça ne fonctionne pas.

Avec ceci le rm se transforme en un move dans votre poubelle ! Et vous avez même le undelete !

Mais attention il faut pensez alors à vider sa poubelle périodiquement (à l'aide de vide-poubelle ou eboueur). Le mieux est de mettre un cron (voir ici pour plus de détails).

Si vous voulez VRAIMENT le rm vous tapez alors \rm ou /bin/rm ce qui bypass l'alias.

Complément :
Ce qui précède est spécifique à (t)csh. En bash, voici les lignes à mettre dans de .bashrc :

export POUBELLE=${HOME}/.wastebasket
function myrm {
    mv $* $POUBELLE
}
alias rm=myrm

Comment avoir des lettres accentuées dans mon terminal ?

Normalement par défaut cela devrait être le cas. Il suffit d'appuyer la touche <Compose>, la lettre à accentuer, puis la touche simulant l'accent.
Par exemple pour produire un "é", tapez : <Compose> e '

Si ceci ne marche pas cela vient surement de votre locale, c'est-à-dire des variables LANG, LC_CTYPE, LC_NUMERIC, LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGESet LC_ALL (voir les man pages locale et environ, section 5, pour plus de détails).
L'environnement en_US (normalement par défaut) permet les accents. Si vous ne l'avez pas c'est que soit vous avez joué avec l'option "Language" lors de votre login, soit vous avez volontairement modifié votre locale (par exemple dans votre .cshrc).
Voici l'environnement courant au LIA (et sous lequel les accents fonctionnent) :

LANG=en_US
LC_CTYPE=en_US
LC_NUMERIC=en_US
LC_TIME=en_US
LC_COLLATE=en_US
LC_MONETARY=en_US
LC_MESSAGES=C
LC_ALL=

Comment faire l'intersection de 2 fichiers ?

comm -12 file1 file2
Voir la man page de comm


Comment selectionner x% des fichiers au hasard ?

Avec ce petit bout de csh-script, on selectionne 80% (1-0.2) des fichiers locaux :

ls -1 > ! /tmp/files
foreach file ( `gawk 'BEGIN {srand()} rand() > 0.2' /tmp/files` )
        do_your_job_on $file
end
rm /tmp/files

Comment executer périodiquement une tâche ?
Comment lancer des cron ?

Pour executer de façon périodique un script shell il existe la commande cron, ou plus exactement crontab. Cette commande permet de tenir à jour la liste des commandes à executer périodiquement sur une machine donnée. J'insiste sur ce dernier point : un cron est ordoné sur une machine donnée. N'oubliez donc pas de bien vous souvenir sur quelle machine vous lancer votre cron : cela vous évitera des mauvaises surprises (2 cron lancés sur 2 machines différentes, un cron indésirable oublié sur une machine, ...) !

Pour exectuer péridiquement une tâche complexe, le mieux est de la mettre dans un fichier script (typiquement Shell script) et de ne lancer que ce fichier depuis la crontab. Ceux qui se sentent assez fort peuvent s'ammuser à écrire leurs scripts directement dans la crontab, mais je le déconseille fortement. Une fois ce fichier script crée (disons mon_script.sh pour l'exemple) il suffit d'ajouter une ligne dans votre crontab par
crontab -e
qui lance votre éditeur préféré.
On ajoute alors la ligne en spécifiant la péride sous la forme
minutes (0-59) heure (0-23) jour dans le mois (1-31) mois (1-12) jour dans la semaine (0-6, 0=dimanche)
puis on met la commande derrière.

Exemples :

14 04 * * * mon_script.sh
execute mon_script.sh tous les jours à 04h14

01 00 31 12 * cd ou/je/vais; mon_script.sh
execute mon_script.sh dans le répertoire ${HOME}/ou/je/vais tous les 31 décembre à minuit une

01 00 31 12 0 mon_script.sh
execute mon_script.sh tous les dimanches 31 décembre à minuit une (ce qui est rare)

01 00 * 12 0 mon_script.sh
execute mon_script.sh tous les dimanches de décembre à minuit une

Il faut évidemment que la commande (ici mon_script.sh) soit executable ! Ca veut dire avec les bons droits et accessible via le PATH !

Sachez enfin que crontab -l liste vos cron sur la machine courante.


Comment ajouter des plug-in Netscape ?

Essentiellement suivre les instructions venant avec le plug-in. MAIS ne pas oublier de modifier la variable d'environement NPX_PLUGIN_PATH ! Par exemple (dans son .cshrc) :
NPX_PLUGIN_PATH=/nfs/depot-local/sunos/communicator/SUNWj2pi/plugins:${HOME}/.netscape/plugins
si vous avez mis vos nouveaux plugin dans votre répertoire .netscape/plugins


Que faire avec le message de Netscape suivant :
A plugin for the mime type text/plain was not found ?

Installer le plugin ! ;-)
Il s'agit du plugin "Netscape Default Plugin" (fichier libnullplugin.so). Il est fournit ici pour Solaris. Le mettre dans vos plugins (cf question ci-dessus).


Comment avoir des couleurs dans mon ls ?

Il faut déjà avoir un terminal qui autorise les couleurs (kvt, dtterm, color_xterm, ...) ce qui n'est pas le cas d'xterm. Puis il faut utiliser le gnu ls, par exemple /usr/local/bin/gnu/ls avec l'option --color=auto.
En clair : ajouter la ligne
alias ls '/usr/local/bin/gnu/ls --color=auto'
dans votre .cshrc
La variable qui controle les couleurs est LS_COLORS. Voir la man page de GNU ls (ou gls). Pour ma part j'utilise :
setenv LS_COLORS 'ln=4;35:ex=31:*~=36'


Comment faire de la bureautique (traitement de texte, tableur, présentations, ...)
Que faire des fichiers Word ?

Bien que la seule et unique façon de correctement traiter des fichiers Word soit à mes yeux de les mettre directement à la poubelle, il se peut que vous ayez envie de jetter un coup d'oeuil à ce n-ième fichier Word que vous venez de recevoir par email, et ceci sans avoir à vous déplacer/logger sur les PC.
La solution existe : Star Office (soffice). Cette "suite logicielle" vous permet aussi de lire/produire des fichiers Excel, PowerPoint etc... Bref un (preque) vrai Office comme si vous y étiez.

Pour y avoir accès, il suffit de faire (la première fois) une petite installation locale. Lancez pour cela la commande

/nfs/liasun25/office-51/bin/setup
et répondez à toutes les questions. Attention au choix du répertoire où vous installer Star Office : il ne sera pas possible (enfin si, mais difficile !) de le déplacer par la suite.

Ceci dit, pour faire des jolis documents et/ou transparents, qui soient portables, gratuits, etc.. etc.., je conseille l'emploi de LaTeX (ou LyX pour les débutants) et sa classe seminar pour les transparents.


Comment imprimer une manpage ?

gtroff -man manpage.1 |grops

Pour l'avoir en commande directe, utiliser ce petit alias :
alias man2ps 'gtroff -man \!* |grops'
que l'on utilise par exemple par :
( man2ps /usr/share/man/man1/ls.1 ) > ! ls.ps

Pour connaître les fichier man, utiliser l'option -l de man. Par exemple :
man -l ls

Pour ceux qui souhaite avoir une commande qui agit comme man mais produit un fichier PostScript, voir la commande psman dans /users/chaps/bin et dont le code source est donné ici.


Comment jouer un fichier WAV ?

sox -t .wav MONWAVFILE.wav -t .au - | audioconvert -f format=sun,voice | audioplay


Comment graver un CD pour Unix ?

Il vous faut pour cela un logiciel qui supporte les Rock Ridge extensions (voir aussi ici).

Au LIA, mkisofs est disponible dans la zone publique :
<zone-publique>/mkisofs-1.12.1/bin/mkisofs

L'utilisation standard pour graver un CD qui soit compatible avec les Sun (cad noms longs, liens symboliques, etc...) est de :

  1. Creer l'image ISO-9660 par
    mkisofs -J -r -pad -o monimage.iso mon_directory_a_graver
    -J c'est mieux pour pouvoir aussi voir le CD sous Windows,
    -pad c'est mieux pour pouvoir bien lire le CD sur Linux.
  2. Aller sur le PC, mapper votre compte Unix et lancer NeroCDBurn
  3. Chosir "Other data format" puis "Image"
  4. Charger comme fichier monimage.iso précédemment crée.

Pour plus de détails, voir la manpage :
<zone-publique>/mkisofs-1.12.1/man/man8/mkisofs.8
Notez l'existence des flags bien utiles -m et -no-bak.

Il y a aussi possibilité de faire des sessions multiples (mais je n'ai ni testé ni pratiqué). Pour cela voir :
<zone-publique>/mkisofs-1.12.1/doc/README.multi


telnet ne fonctionne plus ! Comment me connecter à ma station favorite ?

La raison est simple : le projet DIODE dont le but est de rendre le réseau de l'école un peu plus sécurisé.

Concrètement, utilisez ssh plutôt que telnet.

En principe sur les stations Unix de l'école il n'y a rien à faire. Pour les PC sous Linux, plusieurs distributions de Linux contiennent ssh. Sous Windows, il existe également un client telnet/ssh dénomé putty (voir ici pour download et infos).

Cependant, si vous n'avez pas de client ssh sur votre machine (distante par exemple), il est facile d'en installer un. On peut en trouver ici pour la plupart des plateformes. Ensuite, il suffit de lancer le client. La plupart sont configurés pour ouvrir une connection telnet à l'interieur d'un canal sécurisé.

Si le client n'a pas été configuré (ce qui sera surement votre cas), c'est le login (username + password) qui sont utilisés pour identifier la personne, exactement comme avec telnet (sauf que la transmission des données est cryptée).
Il est par contre possible pour accéder à certains server ssh paranos (ce qui ne semble pas encore être le cas de l'EPFL) qu'il faille se constituer une "identité" (sous Solaris au moyen de ssh-keygen) associée à chaque compte que l'on utilise, et placer dans un fichier particulier (${HOME}/.ssh/authorized_keys) la liste des identités autorisées à effectuer un login distant.

(Merci à Florian Seydoux pour sa contribution à cette réponse)

ftp ne fonctionne plus ! Comment accéder à mes fichiers favoris ?

ftp simple est en effet bloqué à l'EPFL depuis la mise en place du projet DIODE dont le but est de rendre le réseau de l'école un peu plus sécurisé.

Concrètement, utilisez votre browser préféré pour faire du ftp. Cela se fait à l'aide de l'entête ftp://. Utilisez user@adresse pour un accès personalisé.

Exemple : faire un ftp anonymous à l'adresse ici.site.pays, tapez l'URL

       ftp://ici.site.pays
dans votre browser.
Pour se connecter comme user machin à la même adresse, utilisez : ftp://machin@ici.site.pays

Pour déposer des fichiers sur un site, utilisez la fonctionnalité "Upload File.." de votre browser (menu "File" dans Netscape).

Pour plus de détails voir la FAQ du projet DIODE.


Comment imprimer sur un seul coté ?

lpr -Z side=1 -Pmonimprimante monfichier


Comment avoir le temps d'execution d'une commande 'pipe' ?

Passez la commande 'pipe' à votre shell favori et "timer" l'execution de ce shell. Ceci fonctionne d'ailleurs pour "timer" toute commande complexe.

Exemple : pour avoir le temps d'excusion de la commande ls | grep ps faire :
time sh -c 'ls | grep ps'


Comment avoir le temps d'execution d'une commande dans un fichier et le resultat dans un autre ?

Réponse en un exemple simple :
(time ls > resultat) > temps

Le fichier resultat contient le résultat de la commande (en l'occurence ls) et le fichier temps contient le résultat du "timing".


Comment faire grep d'une tabulation (TAB, '\t') ?

Simplement en mettant le TAB (en clair) dans l'argument de grep. Le problème vient souvent que votre shell interprète TAB avant même de le passer à la commande. Et il vous est donc impossible de taper :
grep ' ' fichier (entre les deux ' c'est un vrai TAB qu'il y a)

Solution : passez sous sh et tapez la commande précédente :
sh
$ grep ' ' fichier
$ exit

Une autre solution est d'utiliser gawk :
gawk '$0 ~ /\t/' fichier

Et pour l'équivalent de grep -n :
gawk '$0 ~ /\t/ {print NR,$0}' fichier


Comment écrire un gros fichier sur plusieurs disquettes ?

On ne peut pas le faire directement. Il faut d'abord préparer les divers fichiers sur votre disque (par exemple dans /tmp).
Pour cela, la bonne commande à utiliser est split (ou gsplit pour utiliser le split GNU). La syntaxe de base qui fonctionne pour les deux est :

	split -b 1392k grosfichier blocname.
      
où "1392k" est la taille des blocs en lequels le grosfichier va être découpé.
blocname est le nom de base de ces blocs. La commande va en effet créer blockname.aa, blockname.ab, etc...
Notez le "." à la fin des "blockname." si vous voulez des extensions séparées par un . (i.e. "à la DOS").

Pour plus de détails voir la manpage :

	man -s 1 split
      
Notez en particulier l'option -a 3 sur le split Unix standard (non GNU) si vous voulez des disquettes compatible DOS (mais c'est vrai que c'est rare de nos jours ;-) )

Remarque : pour aller sur une disquette 1.44 Mo, utilisez des blocs de 1392k (le reste étant pris par le système) :

	split -b 1392k -a 3 grosfichier /tmp/grosfichier.
      

Pour finir il vous reste à copier les blocks sur disquette, un après l'autre. Au labo, il faut faire :

      volcheck
      cp blocname.aa /floppy/floppy0/
      eject floppy
      
etc... etc...


Page maintenue par Jean-Cédric Chappelier (chaps@lia.di.epfl.ch)
Dernière mise à jour le 11 septembre 2002