forked from Open-CT/openct-tasks
262 lines
13 KiB
HTML
262 lines
13 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>2014-FR-20</title>
|
|
<script>
|
|
window.stringsLanguage = 'fr';
|
|
</script>
|
|
<script class="remove" type="text/javascript" src="../../../_common/modules/pemFioi/importModules-1.1_M.js" id="import-modules"></script>
|
|
<script class="remove" type="text/javascript">
|
|
var modulesPath = '../../modules';
|
|
importModules([
|
|
'jquery-1.7.1', 'jquery-ui.touch-punch', 'raphael-2.2.1', 'JSON-js',
|
|
'beav-1.0', 'beaver-task-2.0', 'simulation-2.0', 'raphaelFactory-1.0',
|
|
'delayFactory-1.0', 'simulationFactory-1.0', 'raphaelButton-1.0',
|
|
'platform-pr', 'buttonsAndMessages', 'installationAPI.01',
|
|
'miniPlatform', 'taskStyles-0.1','graph-1.0', 'visual-graph-1.0', 'grid-1.0']);
|
|
</script>
|
|
<script class="remove" type="text/javascript">
|
|
var json = {
|
|
"id": "http://castor-informatique.fr/tasks/2014/2014-FR-20-shell/",
|
|
"language": "fr",
|
|
"version": "fr.01",
|
|
"authors": "Arthur Chargueraud, France-ioi",
|
|
"translators": [],
|
|
"license": "CC BY-SA 3.0",
|
|
"taskPathPrefix": "",
|
|
"modulesPathPrefix": "",
|
|
"browserSupport": [],
|
|
"fullFeedback": true
|
|
};
|
|
</script>
|
|
<script>
|
|
var stringsLanguage = 'en';
|
|
var taskStrings = {
|
|
lsNotFollowedByText: "The ls command should not be followed by text.\n",
|
|
noFilePresent: "No files present.",
|
|
kBUnit: "kB",
|
|
rmFollowedByFileName: "The rm command must be followed by a filename.",
|
|
invalidFileName: "The specified file name is invalid.",
|
|
nonexistentFileName: "The specified file does not exist. Unable to delete it.",
|
|
fileDeleted: "The file has been deleted.",
|
|
commandFollowedByTwoFileNames: function(command) {
|
|
return "The " + command + " command must be followed by two file names..";
|
|
},
|
|
invalidFirstFileName: "The first specified file name is invalid.",
|
|
invalidSecondFileName: "The second specified file name is invalid.",
|
|
twoFileNamesMustBeDifferent: "The two names provided must be different\n(Uppercase and lowercase are considered equivalent).",
|
|
nonexistentFirstFileName: "The first file does not exist.",
|
|
fileAlreadyExists: "There is already a file with this name.",
|
|
cantCopyIt: "Can not copy it.",
|
|
cantCopy: "Unable to copy.",
|
|
fileCopied: "The file has been copied.",
|
|
cantRenameIt: "Can not rename it.",
|
|
cantRename: "Unable to Rename.",
|
|
fileRenamed: "The file has been renamed.",
|
|
unrecognizedCommand: "Command is not recognized",
|
|
unrecognized1s: "Note that 'ls' begins with the letter 'L' and not with the digit '1'.",
|
|
success: "Congratulations, you have succeeded!",
|
|
failure: "You did not get the required goal. <br />Try again."
|
|
};
|
|
</script>
|
|
<script type="text/javascript" src="task.js"></script>
|
|
<style>
|
|
body * {
|
|
box-sizing: content-box;
|
|
}
|
|
.shell, .inline_shell, #shell_input {
|
|
font-size: 1.2em; /* line-height: 120%; */
|
|
font-family: monospace;
|
|
line-height: 140%;
|
|
}
|
|
.shell,.inline_shell {
|
|
color: white;
|
|
background: black;
|
|
}
|
|
.shell {
|
|
padding: 5px;
|
|
margin-left: 1em;
|
|
margin-right: 1em;
|
|
}
|
|
.inline_shell {
|
|
padding: 3px;
|
|
}
|
|
.commands {
|
|
margin-top: 0.5em;
|
|
margin-bottom: 0.5em;
|
|
}
|
|
.commands li {
|
|
padding-bottom: 0.4em;
|
|
line-height: 150%;
|
|
}
|
|
.objective {
|
|
width: 100%;
|
|
margin-top: 1em;
|
|
}
|
|
.objective .shell {
|
|
display: block;
|
|
max-width: 300px;
|
|
margin: auto;
|
|
}
|
|
.objective .file_name {
|
|
margin: 0 2em;
|
|
}
|
|
.easy, .hard {
|
|
display: none;
|
|
}
|
|
#shell_output {
|
|
width: 740px;
|
|
margin: 15px;
|
|
}
|
|
#input_line {
|
|
margin-left: 15px;
|
|
}
|
|
#shell_input {
|
|
width: 60%;
|
|
}
|
|
#execute {
|
|
width: 9em;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="task">
|
|
<h1>Terminal</h1>
|
|
<div id="tabsContainer"></div> <!-- will contain the versions tabs -->
|
|
<div id="taskContent"> <!-- will contain the content of the task -->
|
|
<div id="zone_1">
|
|
<div class="consigne">
|
|
<p>
|
|
You have an application to edit files with the following commands :
|
|
</p>
|
|
<div class="easy medium">
|
|
<ul class="commands">
|
|
<li><span class="inline_shell">ls</span> Display the name and size of all files. For example,
|
|
display <span class="inline_shell">zora 50 ko</span> indicates that there is a named file « zora » of size 50 kB. </li>
|
|
<li class="medium"><span class="inline_shell">rm</span> Delete a file. For example,
|
|
<span class="inline_shell">rm titi</span> deletes the named file « titi ».</li>
|
|
<li class="easy"><span class="inline_shell">cp</span> Copy a file. for example,
|
|
<span class="inline_shell">cp titi toto</span> creates a copy of the file « titi » with name « toto ».</li>
|
|
</ul>
|
|
<p class="easy">Your goal is to create a copy of a file with the name « baba ».</p>
|
|
<p class="medium">Your goal is to find the two files with the largest sizes and <b> delete </b> these two files and only those.</p>
|
|
</div>
|
|
<div class="hard">
|
|
<ul class="commands">
|
|
<li><span class="inline_shell">ls</span> Display the name and size (in KB) of all the files present.</li>
|
|
<li><span class="inline_shell">rm</span> Delete a file. For example,
|
|
<span class="inline_shell">rm titi</span> deletes the file named « titi ».</li>
|
|
<li><span class="inline_shell">mv</span> Rename a file. For example,
|
|
<span class="inline_shell">mv titi toto</span> rename the file « titi » to be « toto ».</li>
|
|
<li><span class="inline_shell">cp</span> Copy a file. for example,
|
|
<span class="inline_shell">cp titi toto</span> creates a copy of the file « titi » with name « toto ».</li>
|
|
</ul>
|
|
<div class="objective">
|
|
<p>You have two files :</p>
|
|
<p class="shell">
|
|
<span class="file_name">momo</span> 50 ko<br/>
|
|
<span class="file_name">zora</span> 90 ko
|
|
</p>
|
|
<p>Your goal is to <b> exchange names </b> of both files, to get :</p>
|
|
<p class="shell">
|
|
<span class="file_name">momo</span> 90 ko<br/>
|
|
<span class="file_name">zora</span> 50 ko
|
|
</p>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="zone_2">
|
|
<textarea class="shell" disabled id="shell_output" rows="8" style="overflow-y: scroll"></textarea>
|
|
<div id="input_line"><span>Command : </span>
|
|
<input type="text" id="shell_input" maxlength="50">
|
|
<input type="button" value="Exécuter" id="execute"></div>
|
|
<div><span id="infos"></span></div>
|
|
</div>
|
|
</div>
|
|
<img src="icon.png" style="display:none">
|
|
</div><!-- task -->
|
|
<div id="solution">
|
|
|
|
<h2>Solution</h2>
|
|
|
|
<!-- <div class="medium">
|
|
<p>Il faut tout d'abord découvrir combien de fichiers existent et quels sont leurs tailles. La commande <span class="inline_shell">ls</span> le permet.</p>
|
|
<pre class="shell">
|
|
$ ls
|
|
bibi 90 ko
|
|
momo 30 ko
|
|
toto 70 ko
|
|
zora 50 ko
|
|
</pre>
|
|
<p>On observe alors que les deux fichiers les plus gros sont : « bibi » et « toto ». Commençons par supprimer
|
|
le premier, à l'aide de la commande <span class="inline_shell">rm</span>.</p>
|
|
<pre class="shell">
|
|
$ rm bibi
|
|
Le fichier a été supprimé.
|
|
</pre>
|
|
<p>On peut ensuite supprimer le second, en utilisant à nouveau la commande <span class="inline_shell">rm</span>.</p>
|
|
<pre class="shell">
|
|
$ rm toto
|
|
Le fichier a été supprimé.
|
|
</pre>
|
|
<p>On peut alors exécuter <span class="inline_shell">ls</span> afin de vérifier qu'il reste bien les deux plus petits fichiers.</p>
|
|
<pre class="shell">
|
|
$ ls
|
|
momo 30 ko
|
|
zora 50 ko
|
|
</pre>
|
|
</div>
|
|
<div class="hard">
|
|
<p>Une approche qui ne fonctionne pas serait de d'abord essayer de renommer le fichier « momo » en « zora » puis de renommer « zora » en « momo ». En effet, à la suite de la première étape on aurait deux fichiers différents portant le même nom « zora », ce que le système n'autorise pas.</p>
|
|
<p>Pour pouvoir échanger les noms des deux fichiers, il faut utiliser un troisième nom, utilisé de manière temporaire. Ce nom peut être choisi comme on veut, prenons par exemple « temp ». On va donc procéder en trois étapes :</p>
|
|
<ol>
|
|
<li>on renomme « momo » en « temp »,</li>
|
|
<li>on renomme « zora » en « momo »,</li>
|
|
<li>on renomme « temp » en « zora ».</li>
|
|
</ol>
|
|
<p>Pour effectuer chacun des trois renommages, on utilise la commande <span class="inline_shell">mv</span>.</p>
|
|
<pre class="shell">
|
|
$ mv momo temp
|
|
Le fichier a été renommé.
|
|
</pre>
|
|
|
|
<pre class="shell">
|
|
$ mv zora momo
|
|
Le fichier a été renommé.
|
|
</pre>
|
|
|
|
<pre class="shell">
|
|
$ mv temp zora
|
|
Le fichier a été renommé.
|
|
</pre>
|
|
|
|
<p>On peut alors exécuter <span class="inline_shell">ls</span> afin de vérifier qu'on a bien obtenu le résultat souhaité.</p>
|
|
<pre class="shell">
|
|
$ ls
|
|
momo 90 ko
|
|
zora 50 ko
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<h2>C'est de l'informatique !</h2>
|
|
|
|
<p>Tous les ordinateurs se basent sur des « systèmes de fichiers ». Même si l'on ne le voit pas toujours, tous les appareils photos numériques, les tablettes, et les téléphones de type « smartphone » s'appuient également sur des fichiers.
|
|
</p>
|
|
<p>
|
|
Un fichier contient des données (par exemple du texte, une image, etc…) ou bien les instructions d'un programme. Chaque fichier porte un nom. Ce nom est parfois choisi automatiquement, comme lorsqu'on prend une photo avec un appareil photo numérique, mais il peut également être spécifié par l'utilisateur, comme lorsqu'on enregistre un document créé avec un traitement de texte.
|
|
</p>
|
|
<p>La plupart des systèmes modernes permettent de « renommer » un fichier (changer son nom) à travers ce que l'on appelle une « interface graphique », dans laquelle on peut voir le nom du fichier, cliquer dessus, modifier le nom, puis valider. Cependant, aux débuts de l'informatique, les interfaces graphiques n'existaient pas. La seule manière de renommer, déplacer, copier, ou supprimer des fichiers consistait à utiliser des interfaces en « ligne de commande », comme il fallait le faire dans ce sujet.
|
|
</p>
|
|
<p>
|
|
Les interfaces en « ligne de commande » existent toujours dans les systèmes actuels, même si elles sont souvent cachées<!-- et réservées aux utilisateurs avancés-->. Dans certains cas, l'interface en ligne de commande permet d'effectuer des opérations complexes plus rapidement qu'avec une interface graphique. Surtout, les actions effectuées en ligne de commande peuvent être facilement effectuées de nouveau de manière automatique, ce qui permet de « programmer » des manipulations de fichiers.
|
|
</p>
|
|
|
|
</div> --> <!-- task-solution -->
|
|
</body>
|
|
</html>
|
|
|