182 lines
7.3 KiB
TeX
182 lines
7.3 KiB
TeX
\documentclass[a4paper,french,12pt]{article}
|
|
|
|
\title{UNIX --- TP1}
|
|
\author{Tunui Franken}
|
|
|
|
\usepackage{styles}
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
\clearpage
|
|
|
|
\section{Niveau débutant}
|
|
|
|
\subsection{Quelles sont les informations dont vous avez besoin pour vous connecter à un système Unix ou Linux~?}
|
|
|
|
Le \texttt{getty} va nous demander un login (nom d'utilisateur présent dans \texttt{/etc/passwd}) et un mot de passe (présent dans \texttt{/etc/shadow}).
|
|
|
|
\subsection{Quand \texttt{.bashrc} est-il exécuté~?}
|
|
|
|
Ce fichier est lu à chaque démarrage d'un shell.
|
|
|
|
\subsection{Quelles sont les commandees intégrées (built-in)~?}
|
|
|
|
Les commandes built-in sont codées dans le shell.
|
|
Ce ne sont donc pas des exécutables indépendants.
|
|
|
|
\subsection{Quelle commande faut-il utiliser pour connaître la source d'une commande~?}
|
|
|
|
\begin{console}[gobble=12]
|
|
$ which `commande'
|
|
\end{console}
|
|
|
|
\subsection{Quelle syntaxe faut-il utiliser pour démarrer un programme en arrière-plan~?}
|
|
|
|
Il faut suffixer la commande d'un \texttt{\&}.
|
|
|
|
\begin{console}[gobble=12]
|
|
$ xeyes &
|
|
\end{console}
|
|
|
|
\subsection{Comment savez-vous si votre prompte est un prompte root dans un terminal bash~?}
|
|
|
|
Par convention, un prompt root se termine par un \#.
|
|
|
|
\subsection{Afficher le nom du shell utilisé à l'aide de sa variable d'environnement \texttt{\$SHELL}. Comment lister tous les shells du système~?}
|
|
|
|
\begin{console}[gobble=12]
|
|
$ echo $SHELL
|
|
/usr/bin/zsh
|
|
$
|
|
$ cat /etc/shells
|
|
# Pathnames of valid login shells.
|
|
# See shells(5) for details.
|
|
|
|
/bin/sh
|
|
/bin/bash
|
|
/usr/bin/git-shell
|
|
/bin/zsh
|
|
/usr/bin/zsh
|
|
$
|
|
\end{console}
|
|
|
|
\subsection{Quel est le répertoire courant~? Afficher la variable d'environnement correspondante.}
|
|
|
|
\begin{console}[gobble=12]
|
|
$ pwd
|
|
$ echo $PWD
|
|
\end{console}
|
|
|
|
\subsection{Comment ajouter le répertoire courant dans la variable \texttt{\$PATH} de façon à ce que ce soit valable pour toutes les sessions~?}
|
|
|
|
\begin{console}[gobble=12]
|
|
$ echo "$PATH:$PWD" >> ~/.bashrc
|
|
\end{console}
|
|
|
|
\subsection{Comment lancer une commande en tant que root~?}
|
|
|
|
On préfixe la commande par \texttt{sudo}.
|
|
|
|
\section{Niveau intermédiaire}
|
|
|
|
\subsection{Créer un nouvel utilisateur en utilisant la commande \texttt{useradd}.}
|
|
|
|
\begin{console}[gobble=12]
|
|
$ useradd -m jean
|
|
\end{console}
|
|
|
|
\subsection{Afficher le fichier \texttt{/etc/passwd} en utilisant la commande \texttt{cat}, faire une capture d'écran sur la nouvelle ligne ajoutée pour le nouvel utilisateur créé. A quoi correspond le chiffre indiqué dans le quatrième champ d'un compte utilisateur~?}
|
|
|
|
\begin{console}[gobble=12]
|
|
$ cat /etc/passwd
|
|
jean:x:1000:1001::/home/jean:/bin/bash
|
|
$
|
|
\end{console}
|
|
|
|
Le quatrième champ (ici 1001) est le \texttt{GID}.
|
|
Il s'agit de l'identifiant du groupe.
|
|
|
|
\subsection{Quelle option permet de bloquer un compte utilisateur~? Comment vérifiez-vous qu'un compte est bien bloqué (n'oubliez pas d'utiliser la commande \texttt{man})~?}
|
|
|
|
\begin{console}[gobble=12]
|
|
# passwd -l jean
|
|
\end{console}
|
|
|
|
Pour vérifier, on peut essayer d'ouvrir une session avec l'utilisateur en question.
|
|
|
|
\subsection{Dans quel fichier pouvez-vous redéfinir la longueur maximum du mot de passe~? Modifier le mot de passe de votre login en utilisant la commande \texttt{passwd}.}
|
|
|
|
Il s'agit du fichier \texttt{/etc/login.defs}.
|
|
|
|
\begin{console}[gobble=12]
|
|
$ passwd
|
|
\end{console}
|
|
|
|
\subsection{En utilisant la commande \texttt{man}, quelle est l'option à utiliser avec la commande \texttt{useradd} pour créer automatiquement l'accès au shell et le répertoire personnel~?}
|
|
|
|
Il s'agit des options \texttt{-m} et \texttt{-s}.
|
|
|
|
\subsection{En utilisant la commande \texttt{echo} et l'apostrophe inversée, afficher la date d'aujourd'hui.}
|
|
|
|
\begin{console}[gobble=12]
|
|
$ echo "Nous sommes le `date '+%d/%m/%Y'`"
|
|
Nous sommes le 09/09/2021
|
|
\end{console}
|
|
|
|
\subsection{Quel est l'effet de la commande suivante~: \texttt{echo c'est la commande '`date`'}~?}
|
|
|
|
L'apostrophe de \texttt{c'est} n'est pas échappé, le shell va donc demander la quote fermante.
|
|
En admettant qu'il s'agit d'une erreur, les single quotes autour de la commande \texttt{date} l'empêchent de s'exécuter.
|
|
|
|
\subsection{Donner une autre solution permettant d'annuler la substitution de la commande \texttt{date} dans la commande \texttt{echo}~?}
|
|
|
|
On peut échapper les backquotes par des backslashs.
|
|
|
|
\subsection{Quel est l'effet de la commande suivante~: \texttt{echo "c'est la commande `date`"}~?}
|
|
|
|
Cette fois la commande est dans des double quotes, donc le shell va interpréter la backticks, et exécuter la commande \texttt{date}.
|
|
|
|
\subsection{Comparer le résultat des deux commandes suivantes et faites une remarque. \texttt{echo D*} et \texttt{echo "D*"}}
|
|
|
|
\texttt{echo D*} écrit toute chaîne commençant par `D' dans le répertoire courant (le shell fait une expansion).
|
|
|
|
\texttt{echo "D*"} écrit la chaîne `D*', tout simplement.
|
|
|
|
\section{Niveau avancé}
|
|
|
|
\subsection{Commandes internes et externes}
|
|
|
|
\subsubsection{Rappeler le principe d'exécution de la commande \texttt{which}.}
|
|
|
|
La commande \texttt{which} prend une commande en paramètre.
|
|
Si la commande existe dans le \texttt{\$PATH}, elle est exécutable et \texttt{which} renverra alors le chemin absolu de la commande.
|
|
Si aucun chemin absolu n'existe, cela est dû au fait qu'il s'agit d'une commande interne~: son code fait partie du code du shell (généralement en C).
|
|
|
|
\subsubsection{Quel est l'intérêt des commandes internes~?}
|
|
|
|
C'est avant tout une question de performance~: une commande interne ne démarrera pas de processus séparé.
|
|
|
|
\subsubsection{Donner des exemples des deux types de commandes.}
|
|
|
|
Bien que les commandes internes varient d'un shell à l'autre, on peut citer \texttt{mkdir} et \texttt{cd} comme commandes internes, et \texttt{ls} ou \texttt{apt} comme commandes externes.
|
|
|
|
\subsection{Variables shell et Variables d'environnement}
|
|
|
|
\subsubsection{Essayer les exemples d'affectation des variables données ci-dessous et expliquer les résultats.}
|
|
|
|
\texttt{NOM=JEAN}, \texttt{X='\$PATH='\$PATH}, \texttt{liste=`ls`}~: ces commandes affectent des chaînes à une variable (chaîne directement, contenu d'une variable, ou sortie d'une commande).
|
|
|
|
\texttt{echo \$NOM} affiche le contenu de la variable \texttt{\$NOM}.
|
|
|
|
\texttt{export NOM} rend accessible la variable \texttt{\$NOM} en dehors d'un script.
|
|
|
|
\texttt{unset NOM} affecte une chaîne vide à la variable \texttt{\$NOM}.
|
|
|
|
\subsubsection{La variable \texttt{PS1} précise la valeur de l'invite de la ligne de commande. Changer l'invite pour qu'il devienne de la forme \texttt{login@nom-machine \$}}
|
|
|
|
\begin{console}[gobble=12]
|
|
$ echo "PS1='\u@\h $'" >> ~/.bashrc
|
|
\end{console}
|
|
|
|
\end{document}
|