# Questions générales sur UNIX



## trapo (27 Juin 2011)

Bonsoir à toutes et à tous !

Je suis confronté à certaines question auxquelles je bloque alors je préfère, vous les posez. (je précise que je n'ai pas de  Mac pour le moment).

1. Comment lancer un programme en tâche de fond ?
Je sais avec vi (je taperai:     vi &)
Mais si je veux lancer Safari, cela ne fonctionne pas. Pourquoi (je peux que l'ouvrir directement avec  "open")

2. A quoi correspond les directory : [., .. et /] ?
Je ne sais pas du tout et en plus, je n'arrive pas à trouver d'information car ces caractères ne sont pris en compte par les moteurs de recherches. Ou se trouve ils ? Quelle est leur fonction ? Comment passer l'un à l'autre ?

3. Différence entre :
a) cd tmp
b) cd /tmp
c) cd ./tmp

Je sais que b--> chemin absolu,  c--> chemin relatif 
Je doute pour a) relatif ?

Tant que j'y pense sur les chemins, quel est le chemin associée à :

./test 1 2  3  (avec 1,2,3 des paramètres)
C'est bien du relatif, n'est ce pas ?

4. A quoi est utile la fonction "od" ?
Je sais que "od" permet d'obtenir une représentation en Ascii d'un fichier. Mais l'utile de savoir ça, je ne sais pas. Par rapport au poids occupées ?

5. Un thread est bien un tâche par rapport à un processus ? (plus le nombre de threads est important, plus le CPU sera solicité)

6. Quel est le lien entre Gid, UID, user, historique, tyoe de terminal, path et home ?
Je pense que c'est les caractéristiques données pas l'administrateurs à l'utilisateur lors de la création de son compte.

7. Imaginons que je crée un script, si je chercher à l'exécuter par la fonction: ./script. Théoriquement, cela ne fonctionne pas, non ? Il n'y a pas une histoire de chemin ? Est ce en direction vers la racine et plus particulièrement vers le bin ?

8. Je ne comprends pas le script suivant:

/bin/ls -al.

A l'exécution du fichier, j'obtiens la liste des dossiers et fichiers qui se situent au même endroit que mon script. Pourquoi ? J'aurais penser qu'il aurait fait un ls -al dans le dossier bin.


9. Je dois créer un script qui vérifie le contenu d'un dossier et qui dit si c'est un répertoire ou un fichier.  N'ayant pas le terminal, pouvez vérifier pour moi et dans une moindre mesure me corriger.

for fichier in  \Users\lenomdelogin\*
do
if [ -d $fichier ]
then 
echo $fichier "c'est un repertoire"
else $ficher "c'est un fichier" 
fi
done

10. Dernières questions. A partir de la technique du case (vous savez, case $1, un peu comme un while) écrire une procédure qui permet de changer le suffixe de l'extension. Par exemple ( .txt en .new_txt). On m'indique que je dois afficher afficher 3 paramètres (ancien suffixe, le nouveau et le nom du fichier créer).
Dans ma tête, je pensais à utiliser un mv pour changer de nom et la fonction pour extraire l'extension (existe elle ?)
Je n'arrive pas à m'imaginer les conditions que je pourrais utiliser sur ce genre de problème.


Cela fait beaucoup de questions alors un grand merci à vous.
-Toper


----------



## bompi (27 Juin 2011)

trapo a dit:


> Bonsoir à toutes et à tous !
> 
> Je suis confronté à certaines question auxquelles je bloque alors je préfère, vous les posez. (je précise que je n'ai pas de  Mac pour le moment).
> 
> ...


Pour lancer une application depuis le Terminal, deux méthodes :


lancer l'exécutable de l'application directement ; par exemple pour Safari, c'est _/Applications/Safari.app/Contents/MacOS/Safari_ avec une éperluette [&]
utiliser la commance _open_ par exemple _open -a Safari_



			
				trapo a dit:
			
		

> 2. A quoi correspond les directory : [., .. et /] ?
> Je ne sais pas du tout et en plus, je n'arrive pas à trouver d'information car ces caractères ne sont pris en compte par les moteurs de recherches. Ou se trouve ils ? Quelle est leur fonction ? Comment passer l'un à l'autre ?


'.' c'est le répertoire en cours, '..' c'est celui du dessus. Et '/' est la racine du système.


			
				trapo a dit:
			
		

> 3. Différence entre :
> a) cd tmp
> b) cd /tmp
> c) cd ./tmp
> ...


a) et c) sont quasi équivalents. C'est juste une question de paramétrage du _shell_. Par exemple, dans _bash_ on peut définir que, si dans le répertoire en cours, il n'y a pas de répertoire 'tmp', alors 'cd tmp' est l'équivalent de 'cd ~/tmp' (aller dans le sous-répertoire 'tmp' du répertoire "maison" de l'utilsateur (_home directory_).


			
				trapo a dit:
			
		

> 4. A quoi est utile la fonction "od" ?
> Je sais que "od" permet d'obtenir une représentation en Ascii d'un fichier. Mais l'utile de savoir ça, je ne sais pas. Par rapport au poids occupées ?


Drôle de question. C'est une commande utile pour connaître la valeur des caractères d'un fichier lorsque celui-ci est binaire. C'est aussi assez pratique pour vérifier s'il y a, ou non, des caractères de contrôle indésirables dans un fichier texte.


			
				trapo a dit:
			
		

> 5. Un thread est bien un tâche par rapport à un processus ? (plus le nombre de threads est important, plus le CPU sera solicité)


Un processus peut être découpé en plusieurs _threads_ qui travaillent en parallèle. Je n'appellerais cependant pas ça une tâche parce qu'une tâche est généralement considérée comme un processus. Restons précis.


			
				trapo a dit:
			
		

> 6. Quel est le lien entre Gid, UID, user, historique, tyoe de terminal, path et home ?
> Je pense que c'est les caractéristiques données pas l'administrateurs à l'utilisateur lors de la création de son compte.


UID = identifiant numérique de l'utilisateur
GID = identifiant numérique du groupe principal de l'utilisateur
PATH = variable d'environnement qui donne les chemins où chercher les exécutables
HOME = chez-soi.
Type de terminal ? dans quel contexte ?


			
				trapo a dit:
			
		

> 7. Imaginons que je crée un script, si je chercher à l'exécuter par la fonction: ./script. Théoriquement, cela ne fonctionne pas, non ? Il n'y a pas une histoire de chemin ? Est ce en direction vers la racine et plus particulièrement vers le bin ?


C'est surtout qu'il faut attribuer les droits d'exécution au fichier.


			
				trapo a dit:
			
		

> 8. Je ne comprends pas le script suivant:
> 
> /bin/ls -al.
> 
> A l'exécution du fichier, j'obtiens la liste des dossiers et fichiers qui se situent au même endroit que mon script. Pourquoi ? J'aurais penser qu'il aurait fait un ls -al dans le dossier bin.


"/bin" est l'endroit où se trouve l'exécutable, pas l'endroit que va inspecter l'application.


			
				trapo a dit:
			
		

> 9. Je dois créer un script qui vérifie le contenu d'un dossier et qui dit si c'est un répertoire ou un fichier.  N'ayant pas le terminal, pouvez vérifier pour moi et dans une moindre mesure me corriger.
> 
> for fichier in  \Users\lenomdelogin\*
> do
> ...


Si tu es sur Mac OS X, tu as le Terminal.
Si tu es sous Linux et n'importe quel UNIX, c'est aussi le cas.
Si tu es sous Ouinedoze, il suffit d'installer les outils idoines, ceux de MicroMou ou Cygwin, entre autres.


			
				trapo a dit:
			
		

> 10. Dernières questions. A partir de la technique du case (vous savez, case $1, un peu comme un while) écrire une procédure qui permet de changer le suffixe de l'extension. Par exemple ( .txt en .new_txt). On m'indique que je dois afficher afficher 3 paramètres (ancien suffixe, le nouveau et le nom du fichier créer).
> Dans ma tête, je pensais à utiliser un mv pour changer de nom et la fonction pour extraire l'extension (existe elle ?)
> Je n'arrive pas à m'imaginer les conditions que je pourrais utiliser sur ce genre de problème.


Pour renommer, c'est bien la commande _mv_
Pour identifier l'extension, une petite expression rationnelle ira très bien, directement dans le _shell_, ou avec _sed_. Sinon, on peut parfaitement y arriver avec la commande _basename_ par exemple.


			
				trapo a dit:
			
		

> Cela fait beaucoup de questions alors un grand merci à vous.
> -Toper


----------



## trapo (27 Juin 2011)

Bonjour, 
merci d'avor répondu malgré le nombre de questions. J'apprécie beaucoup.
J'ai quelques questions cependant.



> des caractères de contrôle indésirables dans un fichier texte.


Qu'entendez vous par caractère de contrôle ?


En fait, je n'ai pas de Mac pour le moment et je dois aller dans mon école pour tester ces script (c'est pour cela que je préfère préparer quelque chose avant de m'y rendre)
J'ai réussi le 1er script  mais je bloque sur le deuxième

Qu'est ce qu'une expression rationnelle ?
Concernant le Basename, par exemple:
basename /Users/login/rep1/rep11/fichier.txt retourne fichier.txt
Donc, on ne peut pas vraiment extraire le .txt.

En fait, même pas besoin d'extraire l'extension, je pense, voici ce que je pensais en utilisant le système case.
On considére le fichier: fichier.txt


#! \bin\bash
case $1 in
*.txt) extension=".new_txt";;
*.avi) extension=".new_avi";;
*.dot) extension=".new_avi";;
*) echo "Ceci n'est pas reconnu"
esac

echo "ancien fichier" $1
echo "nouveau fichier " $1-.txt+$extension

Pouvez essayer de tester si le code est correcte ? Merci.

D'autres questions me sont venus,
l'utilisation de la fonction multi-session. Pouvez me parler du principe. 
Si j'ai bien compris, plusieurs personnes peuvent se connecter simultanement à un ordinateur.
Question stupide: Je ne vois pas trop l'intérêt car devant l'écran, il y aura une seule personne.

Si je fais la commande su (super utilisateur) et que j'utilise un autre compte. Je me retrouve dans le Bash. Puis je créer un dossier ou un fichier alors que je suis sur la session d'un autre ?

Merci d'avance


----------



## bompi (27 Juin 2011)

a) par caractère de contrôle, j'entends les caractères comme la tabulation et ses copains, en-deçà de 0x20 : 
	

	
	
		
		

		
			





b) À défaut d'avoir un Mac, il est tout à fait possible d'utiliser les commandes d'UNIX, dans leur version GNU, avec une machine virtuelle Linux ou FreeBSD par exemple. À mon avis, c'est ce qu'il y a de mieux.

Sinon, installer Cygwin est d'une grande simplicité et on a tous les outils sous la main aussi.

c) En attendant d'avoir un Mac, il est aussi possible de consulter les pages de manuel sur le site d'Apple (ici).
Voir la description de la commande _basename_ pourra t'aider [je ne dis pas tout, par souci pédagogique ]

d) Sinon, le script ne fonctionne pas très bien (la dernière ligne n'a pas le résultat escompté) et il faut changer "#! \bin\bash" en "#!/bin/bash".

e) il faut séparer multi-session de multi-utilisateur. Et, dans les sessions, les sessions texte et les sessions graphiques.
Il est bien pratique de pouvoir se connecter à plusieurs sur une machine, notamment quand c'est un serveur. Il y a bien sûr les sessions de type FTP, mais aussi les sessions de type _shell_, chacun (humain ou automate) pouvant avoir quelque chose à faire.
Sur un ordinateur personnel, cela reste utile (quand quelqu'un utilise une de mes machines je peux vouloir y récupérer des éléments sans le gêner, ce que je fais _via_ _ssh_).
Par ailleurs, on a évidemment rarement des sessions graphiques simultanément actives. Mais des sessions graphiques simultanées c'est très fréquent : si X travaille sur son poste et s'absente, Y pourra utiliser ce poste sans refermer la session de X. Donc deux sessions simultanées, même si une seule est active.

f) avec _su_ on change d'identité (à des degrés divers) donc on prend les droits de la nouvelle identité : on peut alors agir selon ces nouveaux droits.

g) expression rationnelle : c'est une des traductions (chacune imparfaite) de l'expression anglaise _regular expression_. Définition ici. En français, ici.


----------

