Je suis un débutant en Linux Shell Script. Je veux changer l'adresse IP par Linux Shell Script et appelée par une application Web PHP.
J'ai terminé mon application Web PHP et le script shell. Avant qu'ils ne se combinent et fonctionnent, j'aimerais vérifier si le script shell peut fonctionner correctement.
Mon Linux Shell Script stockera 7 variables sans $ 0 (le nom du script) .:
- Le fichier d'interface réseau (
/etc/sysconfig/network-scripts/ifcfg-{XXX}
) - Ancienne adresse IP
- Nouvelle adresse IP
- Ancien masque de sous-réseau
- Nouveau masque de sous-réseau
- Ancienne passerelle
- Nouvelle passerelle
La plupart des vérifications ont déjà été effectuées par mon application PHP car je suis un novice en Linux Shell Script, je ne veux pas le faire sur mon script shell. Mon application PHP peut s’assurer que les données sont correctes et remplies de valeurs.
Donc, pour exécuter ce script shell, je tape ce qui suit pour voir les résultats:
sh ./ipchanger.sh /etc/sysconfig/network-scripts/ens32 192.168.1.18 192.168.1.201 32 24 192.168.1.1 192.168.1.1
Sens:
- Spécifiez le fichier de scripts réseau cible.
- Changer l'adresse IP de
192.168.1.18
à192.168.1.201
. - Changer le masque de sous-réseau de
255.255.255.255
à255.255.255.0
.
En fait, il lancera les commandes suivantes:
sudo sed -i -r "s/$currentIpAddress/$newIpAddress/g" $fileName
sudo sed -i -r "s/$currentSubnetMask/$newSubnetMask/g" $fileName
sudo sed -i -r "s/$currentGateway/$newGateway/g" $fileName
Il ne renvoie aucune erreur et son aspect est correct, car la date de la dernière modification du fichier de script réseau a été mise à jour. Mais quand j'ai ouvert le fichier, rien n'a changé.
Puis je echo
les commandes, il retourne la commande exacte que je voulais. Ensuite, je lance les trois lignes à l’invite de commande et vérifie le fichier à nouveau, toutes les informations ont changé!
echo $SHELL
oups -p $$
dans les deux interfaces pour confirmer qu’elles sont identiques.Réponses:
Le problème est probablement le
sudo
bit au début de chaque ligne.sudo
implique «exécuter en tant que root». Vous constaterez probablement que, dans les faits, le compte auquel vous êtes connecté en ligne de commande a été configuré/etc/sudoers
pour fonctionner à partir de la ligne de commande, mais pas via le script PHP - et vous devez en effet Considérez les implications de ceci lorsque vous l'exécutez via l'utilisateur Web - l'utilisateur Web ne sera probablement pas configuré dans/etc/sudoers
- et ne devrait pas l'être!Vous pouvez tester cette théorie en modifiant la propriété des fichiers et en exécutant le script sans
sudo
. Pour changer la propriété du fichier, simplementchown filename.ext
Je pense que vous seriez mieux lotis:
/var/www
(ou partout où vous êtes à l'aise et où l'internaute a accès)la source
sudo
au début de chaque ligne, cela fonctionne toujours!whoami
montre apache