Modification_du_shell_Bash__english_

Modification of the Bash shell

To improve productivity, it may be useful to extend the bash. There are two main ways to do this:

  • creating aliases,
  • creating functions.

Creating an alias

There are two files in this directory:

  • a normal file myfile.txt,
  • a hidden file myhiddenfile.txt.

To define an alias of command, use the alias command. For example, let’s define an alias myls for the command ls -ah.

Let’s make sure we only see the uncached file with the `ls’ command:

ls
myfile.txt
]0;vagrant@centos71:/vagrant/test

Let’s check that the command myls doesn’t exist:

myls
bash: myls : commande introuvable

Let’s create the alias:

echo 'alias myls="ls -ah"' >> ~/.bashrc

Let’s tell Bash that we want to use this alias in the current session:

. ~/.bashrc
]0;vagrant@centos71:/vagrant/test

Let’s check that the Bash environment now recognizes this alias:

myls
.  ..  myfile.txt  .myhiddenfile
]0;vagrant@centos71:/vagrant/test

So the alias myls does exist.

We could also have created an alias for the command them itself:

echo 'alias ls="ls -ah"' >> ~/.bashrc
]0;vagrant@centos71:/vagrant/test

Reload the alias:

. ~/.bashrc
]0;vagrant@centos71:/vagrant/test

Check that the command ls now has the default arguments -ah:

ls
.  ..  myfile.txt  .myhiddenfile
]0;vagrant@centos71:/vagrant/test

To display the list of aliases, you can use the command alias:

alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls -ah'
alias myls='ls -ah'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
]0;vagrant@centos71:/vagrant/test

Creating a fonction

It is also possible to create a function that accepts the command arguments as parameters. This function must be defined in the ~/.bashrc file. For example, you can define a dpull function to run the docker pull command:

cat <<EOF>> ~/.bashrc
function dpull()
{
    docker pull \$1;
}
EOF

Let’s source the file .bashrc:

. ~/.bashrc
]0;vagrant@centos71:/vagrant/notebooks/linux

Let’s check that the dpull alpine command has the same effect as the docker pull alpine command:

dpull alpine
Using default tag: latest
latest: Pulling from library/alpine

Digest: sha256:c0e9560cda118f9ec63ddefb4a173a2b2a0347082d7dff7dc14272e7841a5b5a
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
]0;vagrant@centos71:/vagrant/notebooks/linux

So we’ve seen two ways to extend Bash to improve our productivity.

Modification_du_shell_Bash__french_

Modification du shell Bash

Pour améliorer la productivité, il peut être utile d’étendre le bash. Pour cela, il y a deux moyens principaux :

  • création d’alias,
  • création de fonctions.

Création d’un alias

Il y a deux fichiers dans ce répertoire :

  • un fichier normal myfile.txt,
  • un fichier caché myhiddenfile.txt.

Pour définir un alias de commande, utiliser la commande alias. Par exemple, définissons un alias myls pour la commande ls -ah.

Vérifions que nous ne voyons que le fichier non caché avec la commande ls :

ls
myfile.txt
]0;vagrant@centos71:/vagrant/test

Vérifions que la commande myls n’existe pas :

myls
bash: myls : commande introuvable

Créons l’alias :

echo 'alias myls="ls -ah"' >> ~/.bashrc

Indiquons à Bash que nous voulons utiliser cet alias dans la session courant :

. ~/.bashrc
]0;vagrant@centos71:/vagrant/test

Vérifions que l’environnement Bash reconnaît maintenant cet alias :

myls
.  ..  myfile.txt  .myhiddenfile
]0;vagrant@centos71:/vagrant/test

L’alias myls existe donc bien.

Nous aurions aussi pu créer un alias de la commande ls elle même :

echo 'alias ls="ls -ah"' >> ~/.bashrc
]0;vagrant@centos71:/vagrant/test

Recharger l’alias :

. ~/.bashrc
]0;vagrant@centos71:/vagrant/test

Vérifier que la commande ls a maintenant les arguments -ah par défaut :

ls
.  ..  myfile.txt  .myhiddenfile
]0;vagrant@centos71:/vagrant/test

Pour afficher la liste des alias, on peut utiliser la commande alias :

alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls -ah'
alias myls='ls -ah'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
]0;vagrant@centos71:/vagrant/test

Création d’une fonction

Il est également possible de créer une fonction acceptant comme paramètres les arguments de la commande. Cette fonction doit être définie dans le fichier ~/.bashrc. Par exemple, on peut définir une fonction dpull pour lancer la commande docker pull :

cat <<EOF>> ~/.bashrc
function dpull()
{
    docker pull \$1;
}
EOF

Sourçons le fichier .bashrc :

. ~/.bashrc
]0;vagrant@centos71:/vagrant/notebooks/linux

Vérifions que la commande dpull alpine a bien le même effet que la commande docker pull alpine :

dpull alpine
Using default tag: latest
latest: Pulling from library/alpine

Digest: sha256:c0e9560cda118f9ec63ddefb4a173a2b2a0347082d7dff7dc14272e7841a5b5a
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
]0;vagrant@centos71:/vagrant/notebooks/linux

Nous avons donc vu deux méthodes pour étendre Bash, afin d’améliorer notre productivité.

Exécution_périodique_d_un_script_avec_cronjob__centos___english_

Periodic execution of a script with cronjob

Often it is useful to be able to schedule the execution of processes in a scheduled way, for example to launch backups or to send emails. cronjob allows you to do this.

Ensure that crond.service is active and enabled:

systemctl status crond.service
● crond.service - Command Scheduler
   Loaded: loaded (]8;;file://centos/usr/lib/systemd/system/crond.service/usr/lib/systemd/system/crond.service]8;;; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-10-22 18:44:38 UTC; 52min ago
 Main PID: 795 (crond)
    Tasks: 1 (limit: 12523)
   Memory: 1.9M
   CGroup: /system.slice/crond.service
           └─795 /usr/sbin/crond -n

The service must be in an active (running) state.

Create a script /usr/local/bin/loadavg.sh which will simply generate a log:

sudo bash -c 'cat <<EOF> /usr/local/bin/my-job.sh
#!/bin/bash
echo "Helloworld" >> /var/log/my-job.log
EOF'

Make it executable:

sudo chmod a+x /usr/local/bin/my-job.sh

Run the script:

sudo /usr/local/bin/my-job.sh

Check that the script has written data to the /var/log/my-job.log file:

sudo cat /var/log/my-job.log
Helloworld

Now, let’s delete this log:

sudo rm /var/log/my-job.log

Create a cronjob`` that executes/usr/local/bin/my-job.sh` once per minute between 8AM and 5PM and between monday and friday:

sudo crontab -e

Add:

# Min  Hour  DoM  Month  DoW  Command
*      *     *    *      *    /usr/local/bin/my-job.sh

Save then check that the addition has been taken into account:

sudo crontab -l
# Min  Hour  DoM  Month  DoW  Command
*      *     *    *      *    /usr/local/bin/my-job.sh

Check that the crond.service is running :

systemctl status crond.service
● crond.service - Command Scheduler
   Loaded: loaded (]8;;file://centos/usr/lib/systemd/system/crond.service/usr/lib/systemd/system/crond.service]8;;; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-10-22 18:44:38 UTC; 59min ago
 Main PID: 795 (crond)
    Tasks: 1 (limit: 12523)
   Memory: 1.9M
   CGroup: /system.slice/crond.service
           └─795 /usr/sbin/crond -n

After a few minutes, check that the job has gone well. One line should indicate that the script /usr/local/bin/my-job.sh has run:

sudo tail /var/log/cron
Oct 22 19:45:39 centos crontab[3964]: (root) REPLACE (root)
Oct 22 19:45:39 centos crontab[3964]: (root) END EDIT (root)
Oct 22 19:45:41 centos crontab[3968]: (root) BEGIN EDIT (root)
Oct 22 19:45:45 centos crontab[3968]: (root) END EDIT (root)
Oct 22 19:45:52 centos crontab[3972]: (root) LIST (root)
Oct 22 19:46:01 centos crond[795]: (root) RELOAD (/var/spool/cron/root)
Oct 22 19:46:01 centos CROND[3990]: (root) CMD (/usr/local/bin/my-job.sh)
Oct 22 19:46:48 centos crontab[4012]: (root) LIST (root)
Oct 22 19:47:01 centos CROND[4028]: (root) CMD (/usr/local/bin/my-job.sh)
Oct 22 19:48:01 centos CROND[4053]: (root) CMD (/usr/local/bin/my-job.sh)

Then check that the log file has been created:

sudo cat /var/log/my-job.log
Helloworld

The Helloworld message must be displayed.

You can now schedule jobs to run at a specific time or periodically.

Exécution_périodique_d_un_script_avec_cronjob__centos___french_

Exécution périodique d’un script avec cronjob

Souvent, il est utile de pouvoir programmer l’exécution de processus de manière planifiée, par exemple pour lancer des sauvegardes ou pour envoyer des emails. cronjob permet de faire cela.

Assurez-vous que le service crond.service est actif et activé :

systemctl status crond.service
● crond.service - Command Scheduler
   Loaded: loaded (]8;;file://centos/usr/lib/systemd/system/crond.service/usr/lib/systemd/system/crond.service]8;;; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-10-22 18:44:38 UTC; 52min ago
 Main PID: 795 (crond)
    Tasks: 1 (limit: 12523)
   Memory: 1.9M
   CGroup: /system.slice/crond.service
           └─795 /usr/sbin/crond -n

Le service doit être en état active (running).

Créer un script /usr/local/bin/loadavg.sh qui va simplement générer une log :

sudo bash -c 'cat <<EOF> /usr/local/bin/my-job.sh
#!/bin/bash
echo "Helloworld" >> /var/log/my-job.log
EOF'

Rendez-le exécutable:

sudo chmod a+x /usr/local/bin/my-job.sh

Lancez le script:

sudo /usr/local/bin/my-job.sh

Vérifier que le script a bien écrit des données dans le fichier /var/log/loadavg.log :

sudo cat /var/log/my-job.log
Helloworld

Maintenant, supprimons cette log:

sudo rm /var/log/my-job.log

Créez un cronjob qui exécute /usr/local/bin/myjob.sh une fois par minute entre 8h et 17h et entre lundi et vendredi :

sudo crontab -e

Ajouter :

# Min  Hour  DoM  Month  DoW  Command
*      *     *    *      *    /usr/local/bin/my-job.sh

Sauvegarder puis vérifier que l’ajout a bien été pris en compte:

sudo crontab -l
# Min  Hour  DoM  Month  DoW  Command
*      *     *    *      *    /usr/local/bin/my-job.sh

Vérifier que le service crond.service tourne :

systemctl status crond.service
● crond.service - Command Scheduler
   Loaded: loaded (]8;;file://centos/usr/lib/systemd/system/crond.service/usr/lib/systemd/system/crond.service]8;;; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-10-22 18:44:38 UTC; 59min ago
 Main PID: 795 (crond)
    Tasks: 1 (limit: 12523)
   Memory: 1.9M
   CGroup: /system.slice/crond.service
           └─795 /usr/sbin/crond -n

Au bout de quelques minutes, vérifier que le job a bien tourné. Une ligne doit indiquer que le script /usr/local/bin/my-job.sh a tourné :

sudo tail /var/log/cron
Oct 22 19:45:39 centos crontab[3964]: (root) REPLACE (root)
Oct 22 19:45:39 centos crontab[3964]: (root) END EDIT (root)
Oct 22 19:45:41 centos crontab[3968]: (root) BEGIN EDIT (root)
Oct 22 19:45:45 centos crontab[3968]: (root) END EDIT (root)
Oct 22 19:45:52 centos crontab[3972]: (root) LIST (root)
Oct 22 19:46:01 centos crond[795]: (root) RELOAD (/var/spool/cron/root)
Oct 22 19:46:01 centos CROND[3990]: (root) CMD (/usr/local/bin/my-job.sh)
Oct 22 19:46:48 centos crontab[4012]: (root) LIST (root)
Oct 22 19:47:01 centos CROND[4028]: (root) CMD (/usr/local/bin/my-job.sh)
Oct 22 19:48:01 centos CROND[4053]: (root) CMD (/usr/local/bin/my-job.sh)

Puis vérifier que le fichier de log a été créé :

sudo cat /var/log/my-job.log
Helloworld

Le message Helloworld doit être affiché.

Vous savez maintenant planifier l’exécution de jobs à une heure précise ou périodiquement.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×