#1 Le 21/06/2015, à 19:35
- LePetitApprenti
[RESOLU] Executer un script
Bonjour,
Je fait mes début dans la programmation Shell, et ce n est pas du tout évident.
Si j'ai bien compris la variable PATH contient toutes les commandes que l interpréteur Shell sait reconnaître.
Et lorsque l on lance une commande dans un terminal alors l’interpréteur va chercher successivement dans les repertoires du PATH jusque ce qu'il trouve la dite commande.
Donc lorsque je fait un script, un fichier texte que j appelle MonPremierScript, qui contient une série de commande ( ls, cd .....)
MonPremierScript est considéré comme une commande dans le terminal, l’interpréteur va donc chercher dans les répertoires successifs du PATH cette commande.
L’interpréteur trouve le fichier MonPremierScript et tombe sur la première commande qui est par exemple ls.
L'interpreteur va de nouveau cherché dans PATH si il trouve cette commande et l’exécute.
Ensuite il retourne au fichier, MonPremierScript et recommence ainsi jusque ce que toutes les commandes soient bien exécutées.
L’exécution de cette série de commande nous donne lexécution de MonPremierScript.
Es ce que cela se passe bien comme ça ?
Maintenant ce que je ne comprends pas, pour rendre une commande permanent on nous dit,
"Cette procédure est pour une modification temporaire du PATH et qui sera donc effacée à la fin de la session. Pour rendre la modification permanente, ajouter la commande dans le fichier texte caché .bashrc se trouvant dans votre dossier personnel ainsi que dans le dossier /root. "
On nous parle de deux fichier .bashrc et /root c est a dire des trucs qui n'ont a priori rien a voir avec la variable PATH, la je n'y comprends plus rien, es ce que quelqu un a une explication ?
Ces fichier font exactement la même chose que PATH mais sont sauvegardés ?
J'ai un peu regarde le fichier .bashrc et ce qui est sur c est qu il y a pas toutes les commandes que comprends le shell, le fichier est bien trop cour.
Le fichiers .bashrc ne fait donc pas la même chose que le repertoire PATH ou alors le repertoire .bashrc est juste un repertoire qui permet d'ajouter des commandes sans que les commandes de bases ne soient déjà pressentent.
Les commandes de bases que peux comprendre le Shell sont donc dans un autre repertoire es ce que c'est le repertoire bin ?
En regardant dans celui ci on peut effectivement voir des commandes en shell.
Je ne vais pas les commpter pour savoir si elles sont toutes la :P mais je pense que c'est le cas.
Dans le fichier .bashrc j'ai simplement rajouter le nom de la commande, c'est a dire le nom de mon fichier, MonPremierScript comme ci dessous,
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
...............................
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
MonPremierScript
Es ce que c'est bien comme cela qu il faut faire ?
Je ne sais pas comment on fait pour modifier le fichier /root, lorsque j'essaye de rentrer dedans, j ai le message suivant,
pierro@Cocotte:/$ cd root
bash: cd: root: Permission non accordée
Je précise que j'ai modifier le fichier .bashrc de manière graphique n’étant pas encore familiarise avec les éditeurs de textes et la modification d’un fichier directement dans le terminal.
Pouvez vous m'aider ?
Dernière modification par LePetitApprenti (Le 04/07/2015, à 22:45)
Hors ligne
#2 Le 21/06/2015, à 19:44
- f.x0
Re : [RESOLU] Executer un script
Bonjour LePetitApprenti,
pour modifier le fichier .bashrc dans le répertoire /root
essaies plutôt ceci :
sudo -i
cd /root
ls -la
et ensuite, une fois tes modifs effectuées,
SURTOUT N'OUBLIE PAS DE QUITTER LE MODE ADMINISTRATEUR
exit
Edit : modifié
Dernière modification par f.x0 (Le 21/06/2015, à 19:57)
SOPI
Hors ligne
#3 Le 21/06/2015, à 19:50
- Watael
Re : [RESOLU] Executer un script
non ! pas sudo su !
à la rigueur sudo -su root, mais plutôt sudo -i.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#4 Le 21/06/2015, à 20:02
- f.x0
Re : [RESOLU] Executer un script
J'ai modifié,
mai pourquoi pas sudo su ???
j'utilise toujours cette commande et je n'ai pas rencontré de souci.
Bon c'est vrai que c'est une déformation de Debian (su)
que j(utilise depuis le début...
SOPI
Hors ligne
#5 Le 21/06/2015, à 20:18
- Watael
Re : [RESOLU] Executer un script
d'abord, c'est une "perversion" de la première commande que j'ai donnée : on dit sudo su en oubliant de préciser que s u sont des options de sudo, et avec le temps c'est devenu sudo su; mais,
et puis, c'est redondant : ce sont deux commandes qui permettent de passer root, quand une seule suffit.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#6 Le 21/06/2015, à 21:58
- melixgaro
Re : [RESOLU] Executer un script
salut,
à LePetitApprenti
Je te déconseille d'aller modifier ce qui se trouve sous le répertoire /root, du moins durant ta phase de découverte. D'autant que ça n'est probablement pas nécessaire pour ce que tu cherches à faire.
Le fichier .bashrc est exécuté lorsque tu ouvres un shell bash (par exemple, quand tu ouvres une console). Si tu écris
echo "hello apprenti !"
dans ton .bashrc, alors à chaque ouverture de la console, tu verras le message « hello apprenti ! »
Tu comprends ainsi qu'en écrivant
MonPremierScript
dans .bashrc, tu demandes l'exécution de ton programme. Si bash le trouve dans ton PATH, il l'exécute ; sinon, il renverra une erreur.
Si tu veux que ton programme « soit connu » du shell, il faut rajouter le chemin du dossier où se trouve ton programme dans la variable PATH. En supposant que ton programme se trouve dans /home/ton_nom/dossier, tu peux ajouter ceci dans ton .bashrc
export PATH=${PATH}:/home/ton_nom/dossier
Avec la ligne ci-dessus, tu assignes à la variable PATH son ancienne valeur ${PATH}, à la quelle tu concatènes le chemin vers ton programme.
[ce qui suit est faux, c'est à visée pédagogique]
Si tu fais simplement ceci
export PATH=/home/ton_nom/dossier
alors le shell ne trouvera plus aucun programme, à part ceux dans /home/ton_nom/dossier.
[fin du mauvais exemple]
Par curiosité, ouvre une console et tape
echo ${PATH}
tu verras quelque chose de ce genre
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Ce sont tous les chemins dans lesquels le shell cherche un exécutable.
Dernière précision, pour que ce que je t'ai expliqué marche, il faut évidemment que MonPremierScript soit rendu exécutable. Ce que tu obtiens avec cette commande
chmod u+x MonPremierScript
Après avoir modifié le fichier .bashrc, pour que les modifications deviennent effectives, soit tu fermes la console et en ouvre une autre, soit tu tapes
. ~/.bahsrc
(oui, ça commence par un « point » suivi d'un espace suivi du chemin vers .bashrc). Ça sert à recharger le .bashrc
Dernière modification par melixgaro (Le 21/06/2015, à 22:01)
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#7 Le 21/06/2015, à 22:21
- f.x0
Re : [RESOLU] Executer un script
Pour les explications sur sudo et ses options
j'ai regardé ceci
SOPI
Hors ligne
#8 Le 21/06/2015, à 22:23
- LePetitApprenti
Re : [RESOLU] Executer un script
Es ce que c est bon ce que j'ai fait, c'est a dire, rajouter simplement la commande MonPremierScript dans le fichier .bashrc de mon repertoire personnel ?
Il me suffit de refaire la mm chose dans le repertoire root et le tour est joué ?
J'ai modifié le contenu de mon repertoire personnel via l'interface graphique.
Je ne sais pas comment modifier le repertoire root sans passer par l'interface graphique.
Via la ligne de commande lorsque je deviens root via la commande,
sudo -i
Il mets pourtant toujours impossible de modifier le fichier .bashrc dans le repertoire root via la méthode graphique, j ai le message d'erreur, "Impossible d'afficher le contenu de cet emplacement".
Je crois que je vais devoir modifier le fichier via LCI, pas le choix cette ci.
Hors ligne
#9 Le 21/06/2015, à 22:32
- f.x0
Hors ligne
#10 Le 21/06/2015, à 22:43
- melixgaro
Re : [RESOLU] Executer un script
à LePetitApprenti
dans le doute, as-tu vu mon message #6 ?
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#11 Le 22/06/2015, à 19:59
- LePetitApprenti
Re : [RESOLU] Executer un script
Bonsoir melixgaro,
Oui j'ai vu ton message #6 et je te remercie pour toutes ces explications y compris le mauvais exemple, c'est top !!!
La j'y comprends enfin quelque chose dans les petites veines de ce système.
Pour rendre le script j'ai simplement fait la commande suivante,
chmod +x nom_du_script
Et non la commande
chmod u+x MonPremierScript
La différence, u comme user, peut être ce qui veux dire que il n y a que moi qui pourrai l’exécuter à tout hasard ?
J'arrive à exécuter le script donner dans la documentation sans problème.
Seul problème obliger d’être dans le répertoire courant.
pierro@Cocotte:~/Bureau$ bash MonPremierScriptBash
Mon premier script
Liste des fichiers :
total 40
drwxr-xr-x 2 pierro pierro 4096 juin 21 18:34 .
drwx------ 22 pierro pierro 4096 juin 22 20:32 ..
-rw-rw-r-- 1 pierro pierro 10374 juin 21 13:33 Frais de transport 2014-2015.xlsx
-rwxrwxr-x 1 pierro pierro 269 juin 21 18:34 MonPremierScriptBash
Je sais j'ai tellement d'imagination que j'ai repris le script donne en exemple, c'est du tres haut niveau
Bon il ne me reste plus que à comprendre comment fonctionne Nano pour modifier le fichier bash.rc du dossier root et le tour est joué.
Pour l’éditeur de texte je commence par Nano puis ensuite tâte Vin ou bien je peux commencer à attaquer Vin direct à votre avis ?
Hors ligne
#12 Le 22/06/2015, à 20:52
- Maestitia
Re : [RESOLU] Executer un script
vi n'a pas de menus, pas d'interface graphique et n'est pas intuitif. Cela nécessite de connaître par cœur un certains nombre de raccourcis-claviers pour pouvoir l'utiliser.
Si l’apprentissage est un peu difficile, une fois maîtrisé vi se révèle rapide et pratique, au point qu'on va plus vite qu'avec des éditeurs de texte graphiques.Le débat opposants les partisans de emacs (ou d'autre éditeurs) et ceux de vi n'a pas lieu d'être. Tout système Linux (et Unix) dispose quoiqu'il arrive de l'éditeur vi, le rendant incontournable.
L'éditeur vi sous Linux se nomme vim. Pour ma part, étant débutant, je roule principalement avec nano et gedit.
Apprenti linuxien
Hors ligne
#13 Le 22/06/2015, à 22:42
- Rufus T. Firefly
Re : [RESOLU] Executer un script
Salut,
Je ne comprends pas très bien le but du jeu. Il n'y a pas besoin de bashrc pour exécuter un script.
Exemple :
#!/bin/bash
# superu: Suis-je root ou non ?
ROOT_UID=0 # Root a l'identifiant $UID 0.
if [ "$UID" -eq "$ROOT_UID" ] # Le vrai "root" peut-il se lever, s'il-vous-plaît ?
then
echo "Vous êtes root."
else
echo "Vous n'êtes qu'un utilisateur ordinaire (mais maman vous aime quand même)."
fi
exit 0
Tu copies ça dans un fichier texte que tu enregistres par exemple sous le nom de superu
Tu lui donnes le droit d'exécution :
chmod +x superu
Puis tu le lances par :
./superu
Je ne vois ce que la variable PATH vient faire ici. Tant que tu utilises des commandes standards dans ton script, c'est-à-dire toutes celles qui traînent à gauche et à droite sur ce forum, le système sait parfaitement où les trouver, précisément dans un des endroits déjà contenus dans PATH et où elles sont toutes rangées, sans exception.
D'autre part, si le problème est d'exécuter le script comme une nouvelle commande, c'est-à-dire de pouvoir l'appeler de n'importe où, on peut bien sûr modifier PATH pour que le système aille aussi chercher là où le script est enregistré, mais il vaut infiniment mieux déplacer le script dans un endroit que le système connaît (qui est déjà dans PATH) et qui est fait pour ça, en l'occurrence /usr/local/bin.
sudo mv ~/superu /usr/local/bin/
Et à partir de là tu disposes d'une nouvelle commande, superu, que tu peux appeler comme n'importe quelle autre commande.
superu
ou, pour avoir l'autre réponse :
sudo superu
Source du bout de code (superu) : la bible de bash
Dernière modification par Rufus T. Firefly (Le 22/06/2015, à 23:11)
La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme
Hors ligne
#14 Le 22/06/2015, à 23:57
- Elder
Re : [RESOLU] Executer un script
+1
Tant que le script a :
- un shebang (la première ligne du script de Rufus qui commence par #!) qui indique l'interpreteur
- Que le script n'est pas lancé via une tache planifiée cron (là il faudra définir une variable PATH
@+
Elder
Hors ligne
#15 Le 29/06/2015, à 21:29
- LePetitApprenti
Re : [RESOLU] Executer un script
Pour répondre à ta question Rufus oui je voulais juste créer un nouvelle commande et que cette commande sois reconnu par l’interpréteur Shell peux importe le repertoire ou je me trouve.
Si je place cette commande dans le repertoire indiquer,c'est a dire
/usr/local/bin/
détail ci dessous,
pierro@Cocotte:/bin$ ls
bash fgconsole nc setfacl
bunzip2 fgrep nc.openbsd setfont
busybox findmnt netcat setupcon
bzcat fuser netstat sh
bzcmp fusermount nisdomainname sh.distrib
bzdiff getfacl ntfs-3g sleep
bzegrep grep ntfs-3g.probe ss
bzexe gunzip ntfs-3g.secaudit static-sh
bzfgrep gzexe ntfs-3g.usermap stty
bzgrep gzip ntfscat su
bzip2 hostname ntfsck sync
bzip2recover ip ntfscluster tailf
bzless kbd_mode ntfscmp tar
bzmore keyctl ntfsdump_logfile tempfile
cat kill ntfsfix touch
chacl kmod ntfsinfo true
chgrp less ntfsls udevadm
chmod lessecho ntfsmftalloc ulockmgr_server
chown lessfile ntfsmove umount
chvt lesskey ntfstruncate uname
cp lesspipe ntfswipe uncompress
cpio ln open unicode_start
dash loadkeys openvt vdir
date login pidof vmmouse_detect
dbus-cleanup-sockets loginctl ping which
dbus-daemon lowntfs-3g ping6 whiptail
dbus-uuidgen ls plymouth ypdomainname
dd lsblk plymouth-upstart-bridge zcat
df lsmod ps zcmp
dir mkdir pwd zdiff
dmesg mknod rbash zegrep
dnsdomainname mktemp readlink zfgrep
domainname more red zforce
dumpkeys mount rm zgrep
echo mountpoint rmdir zless
ed mt rnano zmore
efibootmgr mt-gnu running-in-container znew
egrep mv run-parts
false nano sed
Alors dans ce cas "tout le monde" pourra exécuter la commande sauf si je place une condition sur le UID ou GUID dans le script lui même comme tu nous a montré dans l exemple.
Mais si je souhaite que cette commande sois propre à un utilisateur sans mettre de condition dans le script lui mm, alors je dois bien l'ajouter au repertoire bash.rc ?
Au final c est deux manières différentes de faire mais qui arrive au même résultat.
f .x0 je me suis mis à l éditeur Vim et j'apprends tranquillement via VimTutor dans un premier temps.
Merci de m'apporter vos précisions et l'exemple.
Hors ligne
#16 Le 29/06/2015, à 21:56
- Rufus T. Firefly
Re : [RESOLU] Executer un script
Ce n'est pas dans /bin qu'il faut le mettre, - pour éviter le souk dans ton système -, mais dans /usr/local/bin qui est destiné à ça.
Quant à .bashrc, c'est le fichier de configuration du terminal (et ce n'est pas un répertoire). Donc tout ce qu'il y a dedans est exécuté lors du démarrage du terminal. Un script qui n'a rien à voir avec la configuration du terminal n'a rien à y faire...
Les scripts bash ne sont que des fichiers texte, qui ont cette gueule-là :
#!/bin/bash
... les opérations que fait le script
exit 0
Quand c'est enregistré, tu le rends exécutable et tu le lances, dans le terminal, par :
./script
Dernière modification par Rufus T. Firefly (Le 29/06/2015, à 21:56)
La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme
Hors ligne
#17 Le 04/07/2015, à 22:42
- LePetitApprenti
Re : [RESOLU] Executer un script
Bonsoir,
Dsl de répondre si tard mais comme dit le dicton,
veux mieux tard que jamais.
Je me suis mis à l'éditeur de Vim et mes débuts sont relativement difficile mais bonne nouvelle ça ne peux que s'améliorer
Rufus ca marche impec ce que tu m'as dis.
J'ai ma première nouvelle commande, du nom MonPremierScript, et d'autres suivront sûrement.
Juste une précision pour le lancer dans le terminal je n'ai mm pas besoins de faire ./NomNouvelleCommande mais juste dans le terminal le nom de la commande, comme ci dessous:
pierro@Cocotte:/$ MonPremierScript
Mon premier script
Liste des fichiers :
total 116
drwxr-xr-x 24 root root 4096 juil. 1 22:29 .
drwxr-xr-x 24 root root 4096 juil. 1 22:29 ..
drwxr-xr-x 2 root root 4096 juin 16 22:32 bin
drwxr-xr-x 4 root root 4096 juin 21 13:42 boot
drwxrwxr-x 2 root root 4096 mai 21 00:04 cdrom
drwxr-xr-x 16 root root 4320 juil. 4 12:36 dev
drwxr-xr-x 136 root root 12288 juil. 4 12:37 etc
drwxr-xr-x 5 root root 4096 mai 21 00:08 home
lrwxrwxrwx 1 root root 33 juin 16 22:32 initrd.img -> boot/initrd.img-3.13.0-55-generic
lrwxrwxrwx 1 root root 33 juin 10 22:28 initrd.img.old -> boot/initrd.img-3.13.0-54-generic
drwxr-xr-x 26 root root 4096 mai 28 23:39 lib
drwxr-xr-x 2 root root 4096 mai 25 02:33 lib32
drwxr-xr-x 2 root root 4096 mai 21 01:28 lib64
drwx------ 2 root root 16384 mai 21 00:00 lost+found
drwxr-xr-x 3 root root 4096 mai 24 14:26 media
drwxr-xr-x 2 root root 4096 avril 11 2014 mnt
drwxr-xr-x 2 root root 4096 juil. 22 2014 opt
dr-xr-xr-x 239 root root 0 juil. 4 12:36 proc
drwx------ 7 root root 4096 juin 21 23:02 root
drwxr-xr-x 23 root root 760 juil. 4 12:43 run
drwxr-xr-x 2 root root 12288 juin 25 20:47 sbin
drwxr-xr-x 2 root root 4096 juil. 22 2014 srv
dr-xr-xr-x 13 root root 0 juil. 4 12:36 sys
drwxrwxrwt 4 root root 12288 juil. 4 23:17 tmp
drwxr-xr-x 11 root root 4096 mai 25 02:33 usr
drwxr-xr-x 13 root root 4096 juil. 23 2014 var
lrwxrwxrwx 1 root root 30 juin 16 22:32 vmlinuz -> boot/vmlinuz-3.13.0-55-generic
lrwxrwxrwx 1 root root 30 juin 10 22:28 vmlinuz.old -> boot/vmlinuz-3.13.0-54-generic
Et en plus lorsque je rentre la commande l'auto-complétion fonctionne, elle est pas belle la vie
Merci pour votre aide !!!!
Hors ligne
#18 Le 04/07/2015, à 22:49
- Rufus T. Firefly
Re : [RESOLU] Executer un script
Attention ! Ça ne devrait pas fonctionner. Tu as peut-être encore un truc comme ça, qui traîne dans .bashrc
export PATH=${PATH}:/home/ton_nom/dossier
Pour vérifier :
cd /tmp
MonPremierScript
Comme je l'ai déjà expliqué plus haut, modifier le PATH est une mauvaise idée... Il vaut mieux virer ça et déplacer ton script dans /usr/local/bin
Dernière modification par Rufus T. Firefly (Le 04/07/2015, à 22:52)
La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme
Hors ligne