J'ai un script.sh le fichier et le type de ce fichier sont shellscript file. Je veux faire de ce fichier un fichier exécutable application/x. Comment puis-je le faire?
Vous pouvez marquer le fichier comme exécutable:
chmod +x filename.shVous pouvez ensuite l'exécuter comme ceci:
./filename.shSi vous souhaitez utiliser une commande différente pour la démarrer, vous pouvez ajouter un alias:
gedit ~/.bashrcAjoutez ceci à la fin du fichier:
alias <new name>='/home/<full path to script>/filename.sh'Ouvrir une nouvelle session ou un nouveau type de terminal source ~/.bashrc dans votre terminal pour postuler.Ensuite, utilisez simplement le nouveau nom pour démarrer le script.
Il y a deux façons de rendre un fichier exécutable:
Méthode GUI:
Cliquez avec le bouton droit sur le fichier et sélectionnez Propriétés.Accédez à l'onglet Autorisations, puis cochez la case Execute: [ ] Allow executing file as program ou dans Nautilus Program: [ ] Allow this file to run as a program à Thunar.
Méthode Terminal / Commande:
Vous pouvez soit utiliser:
cd /to/my/required/directory
Puis courez
chmod +x filename.extension
Ou tout simplement courir:
chmod +x /path/to/your/filename.extension
chmod a également des options plus avancées:
Les espaces doivent montrer qu'il est divisé: - rwx --- ---
La première série de --- est Utilisateur. Le second est le Groupe et le dernier est Autre (n'importe qui d'autre)
r pour Read, w pour Write et x pour eXecute.
Donc, permettre à tout le monde de le lire, mais seulement au Groupe de l'exécuter et à l'utilisateur de le lire et de l'écrire (mais pour une raison quelconque, de ne pas l'exécuter) serait:
-rw- rx- r-- Mais cela serait ajouté à la commande comme:
chmod +rw-rx-r-- /path/to/file.extension
chmod vous pouvez également le faire en chiffres. Il est basé sur le binaire (je pense, comme c'est 1,2 et 4)
Il y a donc ces chiffres:
Exécuter par l'utilisateur est 100.Exécuter par groupe est 010.Exécuter par d'autres is 001.
Ecrire par l'utilisateur est 200.Ecrire par groupe est 020.Ecrire par d'autres is 002.
Lu par l'utilisateur est 400.Lu par groupe est 040.Lu par d'autres is 004.
Ensuite, vous les additionnez pour obtenir la combinaison souhaitée.
Donc, permettre à tout le monde de le lire, mais seulement au Groupe de l'exécuter et à l'utilisateur de l'écrire (mais pour une raison quelconque, de ne pas l'exécuter) serait:
400 + 040 + 004 et 010 et 200
Cela s'ajoute à 600 + 050 + 004 = 654.
Vous pouvez ensuite exécuter la commande.
chmod +654 /path/to/file.extension pour le régler.
Et pour définir toutes les autorisations, vous pouvez taper:
chmod +rwxrwxrwx /path/to/file.extension
Ou (c'est un peu plus facile à écrire, mais plus difficile de se souvenir de chacun):
chmod +777 /path/to/file.extension
Enfin, vous pouvez faire:
chmod -777 /path/to/file.extension
Pour retirer toutes les autorisations à tout le monde.
Et:
chmod +300 /path/to/file.extension
Pour ajouter de la lecture et de l'écriture pour l'utilisateur, sans affecter les autres autorisations (par exemple, les autorisations d'exécution).
Ce site web a une petite case à cocher de grille très utile, dans laquelle vous pouvez cocher les options que vous voulez et cela vous donne la commande:
Cependant, toutes les combinaisons possibles ne sont pas judicieuses à utiliser; les principales qui sont utilisées sont les suivantes:
755 - Owner a tout, et Group et Other peut lire et exécuter
700 - Owner a tout
644 - Owner peut lire et écrire, et Group et Other peut lire
600 - Owner peut lire et écrire
Et, si vous utilisez des groupes d'utilisateurs non triviaux:
775 - Owner peut lire et écrire, et Group et Other peut lire
770 - Owner et Group avoir tout, et Other peut lire et exécuter
750 - Owner a tout, et Group peut lire et exécuter
664 - Owner et Group peut lire et écrire, et Other peut juste lire
660 - Owner et Group peut lire et écrire
640 - Owner peut lire et écrire, et Group peut lire
777 et 666 sont rarement utilisés, sauf dans /tmp.
Grâce Ilmari Karonen pour signaler ceux d'usage courant!
Exécuter:
chmod +x /path/to/file.shPour le rendre non exécutable, exécutez:
chmod -x /path/to/file.shPar exemple, j'ai créé .sh fichier:
vi tester12.shAprès avoir écrit du code sur l'éditeur vi, je quitterai l'éditeur vi:
:wq!chmod +x tester12.sh./tester12.sh
Laissez tous les utilisateurs exécuter votre script
Comme indiqué, vous pouvez définir le bit d'exécution du fichier pour le rendre exécutable avec chmod +x. Mais vous pouvez également utiliser chmod a+x:
$ ll file_command.txt-rw-rw-r-- 1 rick rick 17 Sep 19 08:55 file_command.txt$ chmod a+x file_command.txt$ ll file_command.txt-rwxrwxr-x 1 rick rick 17 Sep 19 08:55 file_command.txt*NOTE:
- Un script ne doit pas nécessairement se terminer par
.shcela peut se terminer en.txtcomme indiqué ici, ou n'ont aucune extension que ce soit. - Au lieu de simplement
+x(vous seul pouvez exécuter le script), utiliseza+xainsi, tous les utilisateurs peuvent exécuter le script. - Le nom du fichier a un
*ajouté à celui-ci pour indiquer qu'il est exécutable. De plus, le nom du fichier change de couleur en vert sur la plupart des systèmes.
Exécuter un script sans le rendre exécutable
Vous pouvez toujours exécuter un script bash sans le rendre exécutable. Exemple:
$ echo "echo Hello World" > file_command.txt$ cat file_command.txtecho Hello World$ bash file_command.txtHello WorldNOTE:
- Nous créons d'abord un script contenant
echo Hello World. - Ensuite, nous confirmons le script appelé
file_command.txtc'est correct. - Enfin, nous exécutons le script en appelant
bashet en lui passant le nom du script. Lebashla commande est en fait stockée sous la forme/bin/bashet c'est un exécutable sur tous les systèmes Ubuntu. - La création d'un fichier de commandes vous évite d'ajouter le shebang
#!/bin/bashcomme la première ligne d'un script. - La création d'un fichier de commandes vous évite de le rendre exécutable avec
chmod +xouchmod a+x.
Duplication possible de Comment exécuter les fichiers .sh?
Ce n’est pas un doublon, car j’ai demandé spécifiquement de le rendre application/x-executable. L’autre question demande simplement d’ouvrir le fichier sh dans le terminal.


