Copy of https://perso.isima.fr/loic/unixc/tpunix04.php
tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
Institut d'informatique ISIMA
  • twitter
  • linkedin
  • viadeo

[UNIX] TP 4

 Cette page commence à dater. Son contenu n'est peut-être plus à jour. Contactez-moi si c'est le cas!

Date de première publication : 2014/09/11

yoda watching

" Le web, aujourd'hui, tu découvriras "
      --- Un petit bonhomme vert

Avant de commencer, êtes-vous sûr d'avoir vidé le fichier crontab écrit hier ???

Gérer son espace de stockage

Voici la commande qui permet d'afficher l'espace disque occupé par le répertoire courant :

$ du -hs .

Vous pourrez ainsi repérer les répertoires à problème

La commande find permet de trouver des fichiers d'une certaine taille ou d'un certain âge et de coupler le résultat avec une action : archivage, effacement.

La commande df permet d'avoir des informations sur les partitions disque disponibles et en particulier leur remplissage (c'est super pratique pour savoir si on doit rajouter un disque) !

Trouver des fichiers suivant certains critères

Avec la commande find, on peut trouver tous les fichiers de taille nulle, tous les fichiers se terminant par un ~ (fichiers temporaires d'édition) et les effacer directement.

Le script suivant va générer une arborescence aléatoire avec des fichiers de noms et de tailles aléatoires. Si le fichier s'appelle alea.sh, voici ce qu'il faut faire :

chmod +x alea.sh
./alea.sh
#!/bin/bash
# Created by Ben Okopnik on Wed Jul 16 18:04:33 EDT 2008
# Modified by Loic to meet our needs on find command examples

########    User settings     ############
MAXDIRS=5
MAXDEPTH=2
MAXFILES=100
MAXSIZE=1000
######## End of user settings ############

# How deep in the file system are we now?

mkdir temptree
cd temptree

TOP=`pwd|tr -cd '/'|wc -c`

populate() {
  cd $1
  curdir=$PWD

  files=$(($RANDOM*$MAXFILES/32767))
  for n in `seq $files`
  do
    f=`mktemp XXXXXX`
    size=$(($RANDOM*$MAXSIZE/32767))
    if [ $size -gt 500 ]
    then 
       head -c $size /dev/urandom > $f
    else
      touch $f
    fi
  done

  depth=`pwd|tr -cd '/'|wc -c`
  if [ $(($depth-$TOP)) -ge $MAXDEPTH ]
  then
    return
  fi

  unset dirlist
  dirs=$(($RANDOM*$MAXDIRS/32767))
  for n in `seq $dirs`
  do
    d=`mktemp -d XXXXXX`
    dirlist="$dirlist${dirlist:+ }$PWD/$d"
  done

  for dir in $dirlist
  do
    populate "$dir"
  done
}

populate $PWD

Vous pouvez maintenant chercher tous les fichiers de taille nulle. Yoda, un peu d'aide ?

"Do or do not. There is no try ! En fait si ! Les fichiers de taille nulle ou vides (empty).

Compresser des fichiers

Pour transférer des fichiers (ou les sauvegarder), il vaut mieux avoir un gros fichier que plein de petits. Le gros fichier peut être obtenu par un utilitaire comme tar et être éventuellement compressé.

$ tar cvf archive.tar /usr/include/X11
# lire X onze
$ tar tvf archive.tar
$ tar xvf archive.tar

Plusieurs utilitaires existent pour compresser(Zipper) : compress (uncompress), gzip (gunzip)voire gzip2. tar sur certains systèmes accepte l'option z

$ gzip -9 archive.tar
$ gunzip archive.tar.zip

Réseau

La machine distante est tp-sftpserver.local.isima.fr. L'identifiant/login est celui de l'UCA.

ssh

Nous allons nous connecter à machine pour préparer la copie

$ ssh [login]@nom_machine_ou_adresse_IP
machine> Créer un répertoire "sauv"
machine> exit
$

Préciser le login est inutile si c'est le même entre la machine locale et la machine distante.

sftp

On va transférer le fichier tar/zip sur la machine distante pour le "sauvegarder".

$ sftp [login]@nom_machine_ou_adresse_IP

Comme précédemment, préciser le login est inutile si c'est le même entre la machine locale et la machine distante.

Pour changer de répertoire, cd le fait sur l'hôte distant, lcd sur la machine locale.

Mettez-vous dans le répertoire que vous avez créé ! Puis copiez le fichier.

Les commandes put et get permettent respectivement d'envoyer ou de récupérer un fichier.

Une fois le fichier transféré, il faut se déconnecter...

sftp> quit
# OU
sftp> bye

scp

La commande scp peut sembler plus intuitive :

$ scp archive.tar login@machine:.

Il faudra bien entendu saisir son mot de passe sauf si on sait l'éviter...

ssh

Nous allons nous connecter à la machine distante pour vérifier le transfert et décompresser le fichier

$ ssh login@machine
machine> faire ce qu'il faut avec le fichier ...
machine> exit
$

Ne pas oublier de tout nettoyer avant de quitter machine et de nettoyer aussi la machine locale que vous avez utilisée.

Imaginons maintenant que vous êtes chez vous et que vous voulez valider vos TPs ou travailler sur nightmare ou ada. Ces serveurs sont protégés de l'extérieur par VPN. Pour y accéder, il faut tout d'abord lancer correctement le VPN.

$ hostname
$ ssh -Y login@nightmare
etud> hostname
...
etud> exit
$

La commande hostname permet de savoir à quel serveur on est connecté. C'est pratique si le prompt n'est pas bavard.

Les options -X ou -Y permettent d'activer le graphisme pour la session ssh. Bien entendu, cela ne marche pas si vous utilisez Windows (la commande ssh n'est pas disponible non plus, il faudra utiliser un utilitaire comme putty)

Pour que tout cela marche sous Windows 10/11, vous pouvez installer le sous-système LINUX et même installer un serveur graphique X.

Si vous voulez accéder uniquement à vos données à partir de chez vous, une connexion VPN n'est pas nécessaire. Il suffit de se connecter à guacamole.isima.fr avec vos identifiants UCA.

Les fichiers de configuration

vi

Le fichier de configuration de vi se nomme .exrc et doit se trouver dans votre $HOME si vous en voulez un. Il est lu à chaque utilisation de l'éditeur.

Pour configurer vi pour que le mode d'insertion ou commande soit affiché et que les numéros de ligne le soient aussi par défaut :

$ cat > .exrc
set nu
set showmode
CTRL+D
$

shell

Si vous voulez changer votre prompt (variables PS1 et PS2), si vous voulez ajouter des alias ou tout simplement que le shell vous dise bonjour et que ces modifications soient permanentes, il va falloir modifier le fichier de configuration du shell, c'est-à-dire .bashrc (suivant la configuration des machines, il peut également s'agir de .bash_profile ou .profile)

Le fichier est lu à chaque nouvelle session de bash. Si le fichier est modifié, pour que les modifications prennet effet immédiatement, il va falloir forcer le shell à le relire, c'est ce que l'on appelle "sourcer". Il faut donc taper l'une des commandes suivantes :

$ source .bashrc 
$ . .bashrc

Alias

Quels sont les alias disponibles ?

alias

Vous pouvez constater que l'alias alias ll="ls - l" est déjà disponible. Ajoutez en un autre dans le .bashrc.

alias cd..="cd .."

Il sert à éviter une "faute" de frappe. On peut faire un alias en utilisant le nom de la commande comme nom alias et des options fixées par défaut, mais cela pourrait perturber une autre personne qui vous verrait travailler (vous ne prêtez pas votre compte, hein !)

alias rm="rm -i"

L'alias ne vous plait plus ? On le dégage du fichier ou on applique une des méthodes suivantes :

unalias rm #desactivation temporaire
\rm        #utilisation de la vraie commande

L'invite de commande

L'invite de commande est modifiable par les variables suivantes :

# afficher la valeur de PS1
echo $PS1
# Exemple de modification de PS1 dans le .bashrc
PS1="\w> "

La politesse

Le shell peut nous souhaiter le bonjour si on en a envie ... Il suffit de placer la ligne suivante en dernier dans le fichier :

echo "Bonjour Padawan"

Solutions

Voici la solution du find :

find . -name "*~" -size 0k -exec rm {} \;
find . -name "*" -empty -delete

On peut aussi trouver tous les fichiers d'un certain âge ou avec certaines permissions, pour les déplacer ou changer les permissions.

find . -mtime +365 -exec cp {} ../asauv \;

Web

Mise en place des pages perso

L'ISIMA vous permet de disposer de votre propre page ouaib. Les adresses pour y accéder sont de la forme :

https://perso.isima.fr/~votrelogin

(Pour ma page web, j'ai un privilège qui me permet de m'affranchir du tilde.)

Pour cela, rien de plus simple, il faut créer un répertoire public_html dans votre $HOME $HOME/shared et ajouter un fichier index.html dans celui-ci.

Pour que tout roule, il faut s'assurer que les répertoires $HOME, shared(pas le lien, ce qui se cache derrière) et public_html ainsi que tous les sous-répertoire de public_html que vous voulez partager sont accessibles pour le programme qu'est le serveur web (apache ou httpd de son petit nom) (le serveur web n'est ni vous, ni un programme de votre groupe) et tous les fichiers accessibles doivent être également accessibles en lecture...

et voilà le contenu minimal du fichier index.html

<!doctype html>
<html>
   <head>
       <title>Ma premiere page</title>
   </head>
   <body>
      <h1>Bienvenue chez moi</h1>
      <p>C'est mon premier essai</p>
   </body>
</html>

La première ligne est une information pour le navigateur : on lui dit que c'est une page web avec la norme HTML5

L'entête du document (<head>) n'est jamais affichée ou pas directement. La partie <body> représente le contenu de la page. Dans cette page toute simple, il y a un titre de niveau le plus haut <h1> (les titres moins importants vont de <h2> à <h6>et un paragraphe <p>

Si c'est votre premier essai, on va mettre premier en gras dans le paragraphe <p>: il suffit d'entourer premier avec les balises <b> et </b>

Si cela vous embête que le titre soit mal écrit (un mot sans accent), vous pouvez le préciser, cet accent, de deux manières "è" ou alors &egrave;. Cette dernière forme est la plus portable.

Si les accents usuels apparaissent bizarrement sur la page, il sera nécessaire de sauvegarder le fichier html au format utf-8 et il faudra préciser ce format dans l'entête de la page


<meta charset="utf-8">

Cette balise est une balise simple, elle ne se ferme pas.

Ajout d'un peu de contenu

Si vous voulez faire une liste, utiliser les balises <ul>(liste non ordonnée) ou <ol> (liste ordonnée). Chaque élément de liste sera donné par <li>


<ul>
  <li>apprendre quelques balises html</li>
  <li>mettre du style</li>
</ul>

Si vous voulez mettre une image, utilisez la balise simple <img> comme suit :


<img src="images/loic.png" title="tete du loic" alt="avatar">

L'attribut src est l'emplacement de l'image, on peut mettre un chemin ou une URL. Si vous mettez un chemin, cela doit être un chemin dans public_html. L'attribut title permet de donner une information contextuelle et l'attribut alt est affiché quand l'image ne l'est pas (image non trouvée ou navigateur non graphique). L'image est redimensionnable si nécessaire.

Il est temps de voir pourquoi le HTML s'appelle le HTML. Dupliquer la page index.html et lui donner le nom deux.html. Ajouter respectivement dans les pages un lien :

<a href="deux.html">Visiter la deuxième page</a>
<a href="index.html">Retourner à la page principale</a>

Ajouter du style

On va ajouter des informations de style aux pages web que l'on vient de créer. Les pages vont partager les mêmes informations. Pour cela, nous allons les placer dans un fichier texte nommé style.css. Il faut dire dans l'entête des fichiers que le fichier de style doit être utilisé :

<link rel="stylesheet" href="style.css" >

Si vous voulez que les liens aient un fond jaune :

a {
  background-color:yellow;
}

Pour que toute image soit centrée sur la page :

img {
  display : inline-block;
  margin  : auto;
}

On va maintenant changer la taille de police quand un lien est survolé par la souris (hover) :

a:hover {
  font-size : 120%;
}

Les informations de style peuvent aussi être placées dans une balise <style> dans l'entête ou spécifique à une balise avec un attribut style.