Certaines des commandes qui suivent servent aux transferts réseaux, aux analyses de données, ainsi qu'à la chasse aux indésirables.
Recherche de l'information à propos d'un hôte suivant son nom ou son adresse IP en utilisant DNS.
bash$ host surfacemail.com surfacemail.com. has address 202.92.42.236
Affiche des informations IP sur un hôte. Avec l'option -h, ipcalc fait une recherche DNS inversée, trouvant le nom de l'hôte (serveur) à partir de l'adresse IP.
bash$ ipcalc -h 202.92.42.236 HOSTNAME=surfacemail.com
Lance une « recherche sur un serveur de noms » par l'adresse IP d'un hôte. Ceci est l'équivalent de ipcalc -h ou dig -x. La commande peut être lancée interactivement ou pas, donc elle est utilisable dans un script.
La commande nslookup est « obsolète » mais elle a toujours son utilité.
bash$ nslookup -sil 66.97.104.180 nslookup kuhleersparnis.ch Server: 135.116.137.2 Address: 135.116.137.2#53 Non-authoritative answer: Name: kuhleersparnis.ch
Domain Information Groper. Comme nslookup, dig appelle un serveur de noms Internet. Elle peut être lancée en mode interactif ou depuis un script.
Voici quelques options intéressantes de dig : +time=N pour configurer un délai de réponse de N, +nofail pour continuer à demander aux serveurs jusqu'à la réception d'une réponse et -x pour une recherche inverse.
Comparez la sortie de dig -x avec ipcalc -h et nslookup.
bash$ dig -x 81.9.6.2 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 11649 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;2.6.9.81.in-addr.arpa. IN PTR ;; AUTHORITY SECTION: 6.9.81.in-addr.arpa. 3600 IN SOA ns.eltel.net. noc.eltel.net. 2002031705 900 600 86400 3600 ;; Query time: 537 msec ;; SERVER: 135.116.137.2#53(135.116.137.2) ;; WHEN: Wed Jun 26 08:35:24 2002 ;; MSG SIZE rcvd: 91
Exemple 16.40. Trouver où dénoncer un spammeur
#!/bin/bash # spam-lookup.sh: Look up abuse contact to report a spammer. # Thanks, Michael Zick. # Check for command-line arg. ARGCOUNT=1 E_WRONGARGS=65 if [ $# -ne "$ARGCOUNT" ] then echo "Usage: `basename $0` domain-name" exit $E_WRONGARGS fi dig +short $1.contacts.abuse.net -c in -t txt # Also try: # dig +nssearch $1 # Tries to find "authoritative name servers" and display SOA records. # The following also works: # whois -h whois.abuse.net $1 # ^^ ^^^^^^^^^^^^^^^ Specify host. # Can even lookup multiple spammers with this, i.e." # whois -h whois.abuse.net $spamdomain1 $spamdomain2 . . . # Exercise: # -------- # Expand the functionality of this script #+ so that it automatically e-mails a notification #+ to the responsible ISP's contact address(es). # Hint: use the "mail" command. exit $? # spam-lookup.sh chinatietong.com # A known spam domain. # "crnet_mgr@chinatietong.com" # "crnet_tec@chinatietong.com" # "postmaster@chinatietong.com" # For a more elaborate version of this script, #+ see the SpamViz home page, http://www.spamviz.net/index.html.
Exemple 16.41. Analyser le domaine d'un courrier indésirable
#! /bin/bash # is-spammer.sh: Identifying spam domains # $Id: is-spammer, v 1.4 2004/09/01 19:37:52 mszick Exp $ # Above line is RCS ID info. # # This is a simplified version of the "is_spammer.bash #+ script in the Contributed Scripts appendix. # is-spammer <domain.name> # Uses an external program: 'dig' # Tested with version: 9.2.4rc5 # Uses functions. # Uses IFS to parse strings by assignment into arrays. # And even does something useful: checks e-mail blacklists. # Use the domain.name(s) from the text body: # http://www.good_stuff.spammer.biz/just_ignore_everything_else # ^^^^^^^^^^^ # Or the domain.name(s) from any e-mail address: # Really_Good_Offer@spammer.biz # # as the only argument to this script. #(PS: have your Inet connection running) # # So, to invoke this script in the above two instances: # is-spammer.sh spammer.biz # Whitespace == :Space:Tab:Line Feed:Carriage Return: WSP_IFS=$'\x20'$'\x09'$'\x0A'$'\x0D' # No Whitespace == Line Feed:Carriage Return No_WSP=$'\x0A'$'\x0D' # Field separator for dotted decimal ip addresses ADR_IFS=${No_WSP}'.' # Get the dns text resource record. # get_txt <error_code> <list_query> get_txt() { # Parse $1 by assignment at the dots. local -a dns IFS=$ADR_IFS dns=( $1 ) IFS=$WSP_IFS if [ "${dns[0]}" == '127' ] then # See if there is a reason. echo $(dig +short $2 -t txt) fi } # Get the dns address resource record. # chk_adr <rev_dns> <list_server> chk_adr() { local reply local server local reason server=${1}${2} reply=$( dig +short ${server} ) # If reply might be an error code . . . if [ ${#reply} -gt 6 ] then reason=$(get_txt ${reply} ${server} ) reason=${reason:-${reply}} fi echo ${reason:-' not blacklisted.'} } # Need to get the IP address from the name. echo 'Get address of: '$1 ip_adr=$(dig +short $1) dns_reply=${ip_adr:-' no answer '} echo ' Found address: '${dns_reply} # A valid reply is at least 4 digits plus 3 dots. if [ ${#ip_adr} -gt 6 ] then echo declare query # Parse by assignment at the dots. declare -a dns IFS=$ADR_IFS dns=( ${ip_adr} ) IFS=$WSP_IFS # Reorder octets into dns query order. rev_dns="${dns[3]}"'.'"${dns[2]}"'.'"${dns[1]}"'.'"${dns[0]}"'.' # See: http://www.spamhaus.org (Conservative, well maintained) echo -n 'spamhaus.org says: ' echo $(chk_adr ${rev_dns} 'sbl-xbl.spamhaus.org') # See: http://ordb.org (Open mail relays) echo -n ' ordb.org says: ' echo $(chk_adr ${rev_dns} 'relays.ordb.org') # See: http://www.spamcop.net/ (You can report spammers here) echo -n ' spamcop.net says: ' echo $(chk_adr ${rev_dns} 'bl.spamcop.net') # # # other blacklist operations # # # # See: http://cbl.abuseat.org. echo -n ' abuseat.org says: ' echo $(chk_adr ${rev_dns} 'cbl.abuseat.org') # See: http://dsbl.org/usage (Various mail relays) echo echo 'Distributed Server Listings' echo -n ' list.dsbl.org says: ' echo $(chk_adr ${rev_dns} 'list.dsbl.org') echo -n ' multihop.dsbl.org says: ' echo $(chk_adr ${rev_dns} 'multihop.dsbl.org') echo -n 'unconfirmed.dsbl.org says: ' echo $(chk_adr ${rev_dns} 'unconfirmed.dsbl.org') else echo echo 'Could not use that address.' fi exit 0 # Exercises: # -------- # 1) Check arguments to script, # and exit with appropriate error message if necessary. # 2) Check if on-line at invocation of script, # and exit with appropriate error message if necessary. # 3) Substitute generic variables for "hard-coded" BHL domains. # 4) Set a time-out for the script using the "+time=" option to the 'dig' command.
Pour une version bien plus élaborée de ce script, voir l'Exemple A.28, « Identification d'un spammer ».
Trace la route prise par les paquets envoyés à un hôte distant. Cette commande fonctionne à l'intérieur d'un LAN, WAN ou sur Internet. L'hôte distant peut être indiqué par son adresse IP. La sortie de cette commande peut être filtrée par grep ou sed via un tube.
bash$ traceroute 81.9.6.2 traceroute to 81.9.6.2 (81.9.6.2), 30 hops max, 38 byte packets 1 tc43.xjbnnbrb.com (136.30.178.8) 191.303 ms 179.400 ms 179.767 ms 2 or0.xjbnnbrb.com (136.30.178.1) 179.536 ms 179.534 ms 169.685 ms 3 192.168.11.101 (192.168.11.101) 189.471 ms 189.556 ms * ...
Envoie un paquet ICMP ECHO_REQUEST à une autre machine, soit sur un réseau local soit sur un réseau distant. C'est un outil de diagnostic pour tester des connections réseaux, qui doit être utilisé avec précautions.
bash$ ping localhost PING localhost.localdomain (127.0.0.1) from 127.0.0.1 : 56(84) bytes of data. 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=0 ttl=255 time=709 usec 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=255 time=286 usec --- localhost.localdomain ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max/mdev = 0.286/0.497/0.709/0.212 ms
Un ping réussi renvoie un code de sortie de 0. Ceci peut être testé dans un script.
HNAME=mechantspammer.com # HNAME=$HOST # Débogage : test pour localhost. nombre=2 # Envoie seulement deux ping. if [[ `ping -c $nombre "$HNAME"` ]] then echo ""$HNAME" toujours présent et envoyant du SPAM chez vous." else echo ""$HNAME" semble arrêté. Dommage." fi
Réalise une recherche DNS (Domain Name System, système de nom de domaine). L'option -h permet de spécifier sur quel serveur whois particulier envoyer la requête. Voir l'Exemple 4.6, « wh, recherche d'un nom de domaine avec whois » et l'Exemple 16.40, « Trouver où dénoncer un spammeur ».
Retrouve de l'information sur les utilisateurs d'un réseau. Optionnellement, cette commande peut afficher les fichiers ~/.plan, ~/.project et ~/.forward d'un utilisateur si un des fichiers est présent.
bash$ finger Login Name Tty Idle Login Time Office Office Phone bozo Bozo Bozeman tty1 8 Jun 25 16:59 (:0) bozo Bozo Bozeman ttyp0 Jun 25 16:59 (:0,0) bozo Bozo Bozeman ttyp1 Jun 25 17:07 (:0,0) bash$ finger bozo Login: bozo Name: Bozo Bozeman Directory: /home/bozo Shell: /bin/bash Office: 2355 Clown St., 543-1234 On since Fri Aug 31 20:13 (MST) on tty1 1 hour 38 minutes idle On since Fri Aug 31 20:13 (MST) on pts/0 12 seconds idle On since Fri Aug 31 20:13 (MST) on pts/1 On since Fri Aug 31 20:31 (MST) on pts/2 1 hour 16 minutes idle Mail last read Tue Jul 3 10:08 2007 (MST) No Plan.
En plus de raisons de sécurité, un grand nombre de réseaux désactive finger et son démon associé. [78]
Modifie l'information découverte par la commande finger.
Vérifie une adresse Internet de courrier électronique.
Cette commande semble absente sur les dernières distributions Linux.
L'ensemble de commandes sx et rx sert à transférer des fichiers de et vers un hôte distant en utilisant le protocole xmodem. Ils font généralement partie d'un paquetage de communications, tel que minicom.
L'ensemble de commandes sz et rz sert à transférer des fichiers de et vers un hôte distant en utilisant le protocole zmodem. Zmodem a certains avantages sur xmodem, tels qu'un meilleur taux de transmission et une reprise des transferts interrompus. Comme sx et rx, ils font généralement partie d'un paquetage de communications.
Utilitaire et protocole pour envoyer ou recevoir des fichiers vers ou à partir d'un hôte distant. Une session ftp peut être automatisée par un script (voir l'Exemple 19.6, « Télécharger un ensemble de fichiers dans le répertoire de récupération Sunsite » et l'Exemple A.4, « encryptedpw : Charger un fichier sur un site ftp, en utilisant un mot de passe chiffré en local »).
uucp : Copie UNIX vers UNIX (UNIX to UNIX copy). C'est un paquetage de communication pour transférer des fichiers entre des serveurs UNIX. Un script shell est un moyen efficace de gérer une séquence de commandes uucp.
Depuis le développement d'Internet et du courrier électronique, uucp semble avoir disparu, mais il existe toujours et reste parfaitement utilisable dans des situations où des connexions Internet ne sont pas disponibles ou appropriées. L'avantage d'uucp est qu'il est tolérant aux pannes, donc même s'il y a une interruption de service, l'opération de copie continuera là où elle s'est arrêtée quand la connexion sera restaurée.
---
uux : exécution d'UNIX à UNIX. Exécute une commande sur un système distant. Cette commande fait partie du paquetage uucp.
---
cu : appelle (Call Up) un système distant et se connecte comme un simple terminal. C'est une version diminuée de telnet. Cette commande fait partie du paquetage uucp.
Utilitaire et protocole pour se connecter à un hôte distant.
Le protocole telnet contient des failles de sécurité et devrait donc être évité. Son utilisation dans un script shell n'est pas recommandée.
L'utilitaire wget recupère de façon non-interactive ou télécharge des fichiers à partir d'un site Web ou d'un site ftp. Il fonctionne bien dans un script.
wget -p http://www.xyz23.com/file01.html # L'option -p ou --page-requisite fait que wget récupère tous les fichiers #+ requis pour afficher la page spécifiée. wget -r ftp://ftp.xyz24.net/~bozo/project_files/ -O $SAVEFILE # L'option -r suit récursivement et récupère tous les liens du site #+ spécifié. wget -c ftp://ftp.xyz25.net/bozofiles/filename.tar.bz2 # L'option -c autorise wget à continuer un téléchargement interrompu. # Ceci fonctionne avec les serveurs FTP et beaucoup de sites HTTP.
Exemple 16.42. Obtenir la cote d'une valeur de bourse
#!/bin/bash # quote-fetch.sh: Download a stock quote. E_NOPARAMS=86 if [ -z "$1" ] # Must specify a stock (symbol) to fetch. then echo "Usage: `basename $0` stock-symbol" exit $E_NOPARAMS fi stock_symbol=$1 file_suffix=.html # Fetches an HTML file, so name it appropriately. URL='http://finance.yahoo.com/q?s=' # Yahoo finance board, with stock query suffix. # ----------------------------------------------------------- wget -O ${stock_symbol}${file_suffix} "${URL}${stock_symbol}" # ----------------------------------------------------------- # To look up stuff on http://search.yahoo.com: # ----------------------------------------------------------- # URL="http://search.yahoo.com/search?fr=ush-news&p=${query}" # wget -O "$savefilename" "${URL}" # ----------------------------------------------------------- # Saves a list of relevant URLs. exit $? # Exercises: # --------- # # 1) Add a test to ensure the user running the script is on-line. # (Hint: parse the output of 'ps -ax' for "ppp" or "connect." # # 2) Modify this script to fetch the local weather report, #+ taking the user's zip code as an argument.
Voir aussi l'Exemple A.30, « Rendre wget plus facile à utiliser » et l'Exemple A.31, « Un script de podcasting ».
Le navigateur web lynx peut être utilisé dans un script (avec l'option -dump) pour récupérer un fichier d'un site web ou ftp de façon non interactive.
lynx -dump http://www.xyz23.com/file01.html >$FICHIER
Avec l'option -traversal, lynx commence avec l'URL HTTP spécifiée comme argument, puis « navigue » jusqu'aux liens situés sur ce serveur particulier. Utilisée avec l'option -crawl, affiche le texte des pages dans un fichier de traces.
Connexion distante, initie une session sur un hôte distant. Cette commande a des failles de sécurité, donc utilisez à la place ssh.
Shell distant, exécute des commande(s) sur un hôte distant. Il a aussi des failles de sécurité, donc utilisez à la place ssh.
Copie distante, copie des fichiers entre deux machines différentes.
Remote synchronize (NdT : synchronisation à distance), met à jour (synchronise) des fichiers entre deux machines différentes sur le réseau.
bash$ rsync -a ~/sourcedir/*txt /node1/subdirectory/
Exemple 16.43. Mettre à jour FC4
#!/bin/bash # fc4upd.sh # Script author: Frank Wang. # Slight stylistic modifications by ABS Guide author. # Used in ABS Guide with permission. # Download Fedora Core 4 update from mirror site using rsync. # Should also work for newer Fedora Cores -- 5, 6, . . . # Only download latest package if multiple versions exist, #+ to save space. URL=rsync://distro.ibiblio.org/fedora-linux-core/updates/ # URL=rsync://ftp.kddilabs.jp/fedora/core/updates/ # URL=rsync://rsync.planetmirror.com/fedora-linux-core/updates/ DEST=${1:-/var/www/html/fedora/updates/} LOG=/tmp/repo-update-$(/bin/date +%Y-%m-%d).txt PID_FILE=/var/run/${0##*/}.pid E_RETURN=85 # Something unexpected happened. # General rsync options # -r: recursive download # -t: reserve time # -v: verbose OPTS="-rtv --delete-excluded --delete-after --partial" # rsync include pattern # Leading slash causes absolute path name match. INCLUDE=( "/4/i386/kde-i18n-Chinese*" # ^ ^ # Quoting is necessary to prevent globbing. ) # rsync exclude pattern # Temporarily comment out unwanted pkgs using "#" . . . EXCLUDE=( /1 /2 /3 /testing /4/SRPMS /4/ppc /4/x86_64 /4/i386/debug "/4/i386/kde-i18n-*" "/4/i386/openoffice.org-langpack-*" "/4/i386/*i586.rpm" "/4/i386/GFS-*" "/4/i386/cman-*" "/4/i386/dlm-*" "/4/i386/gnbd-*" "/4/i386/kernel-smp*" # "/4/i386/kernel-xen*" # "/4/i386/xen-*" ) init () { # Let pipe command return possible rsync error, e.g., stalled network. set -o pipefail # Newly introduced in Bash, version 3. TMP=${TMPDIR:-/tmp}/${0##*/}.$$ # Store refined download list. trap "{ rm -f $TMP 2>/dev/null }" EXIT # Clear temporary file on exit. } check_pid () { # Check if process exists. if [ -s "$PID_FILE" ]; then echo "PID file exists. Checking ..." PID=$(/bin/egrep -o "^[[:digit:]]+" $PID_FILE) if /bin/ps --pid $PID &>/dev/null; then echo "Process $PID found. ${0##*/} seems to be running!" /usr/bin/logger -t ${0##*/} \ "Process $PID found. ${0##*/} seems to be running!" exit $E_RETURN fi echo "Process $PID not found. Start new process . . ." fi } # Set overall file update range starting from root or $URL, #+ according to above patterns. set_range () { include= exclude= for p in "${INCLUDE[@]}"; do include="$include --include \"$p\"" done for p in "${EXCLUDE[@]}"; do exclude="$exclude --exclude \"$p\"" done } # Retrieve and refine rsync update list. get_list () { echo $$ > $PID_FILE || { echo "Can't write to pid file $PID_FILE" exit $E_RETURN } echo -n "Retrieving and refining update list . . ." # Retrieve list -- 'eval' is needed to run rsync as a single command. # $3 and $4 is the date and time of file creation. # $5 is the full package name. previous= pre_file= pre_date=0 eval /bin/nice /usr/bin/rsync \ -r $include $exclude $URL | \ egrep '^dr.x|^-r' | \ awk '{print $3, $4, $5}' | \ sort -k3 | \ { while read line; do # Get seconds since epoch, to filter out obsolete pkgs. cur_date=$(date -d "$(echo $line | awk '{print $1, $2}')" +%s) # echo $cur_date # Get file name. cur_file=$(echo $line | awk '{print $3}') # echo $cur_file # Get rpm pkg name from file name, if possible. if [[ $cur_file == *rpm ]]; then pkg_name=$(echo $cur_file | sed -r -e \ 's/(^([^_-]+[_-])+)[[:digit:]]+\..*[_-].*$/\1/') else pkg_name= fi # echo $pkg_name if [ -z "$pkg_name" ]; then # If not a rpm file, echo $cur_file >> $TMP #+ then append to download list. elif [ "$pkg_name" != "$previous" ]; then # A new pkg found. echo $pre_file >> $TMP # Output latest file. previous=$pkg_name # Save current. pre_date=$cur_date pre_file=$cur_file elif [ "$cur_date" -gt "$pre_date" ]; then # If same pkg, but newer, pre_date=$cur_date #+ then update latest pointer. pre_file=$cur_file fi done echo $pre_file >> $TMP # TMP contains ALL #+ of refined list now. # echo "subshell=$BASH_SUBSHELL" } # Bracket required here to let final "echo $pre_file >> $TMP" # Remained in the same subshell ( 1 ) with the entire loop. RET=$? # Get return code of the pipe command. [ "$RET" -ne 0 ] && { echo "List retrieving failed with code $RET" exit $E_RETURN } echo "done"; echo } # Real rsync download part. get_file () { echo "Downloading..." /bin/nice /usr/bin/rsync \ $OPTS \ --filter "merge,+/ $TMP" \ --exclude '*' \ $URL $DEST \ | /usr/bin/tee $LOG RET=$? # --filter merge,+/ is crucial for the intention. # + modifier means include and / means absolute path. # Then sorted list in $TMP will contain ascending dir name and #+ prevent the following --exclude '*' from "shortcutting the circuit." echo "Done" rm -f $PID_FILE 2>/dev/null return $RET } # ------- # Main init check_pid set_range get_list get_file RET=$? # ------- if [ "$RET" -eq 0 ]; then /usr/bin/logger -t ${0##*/} "Fedora update mirrored successfully." else /usr/bin/logger -t ${0##*/} \ "Fedora update mirrored with failure code: $RET" fi exit $RET
Voir aussi Exemple A.32, « Sauvegarde de nuit pour un disque firewire ».
Shell sécurisé, pour se connecter sur un hôte distant et y exécuter des commandes. Cette alternative sécurisée pour telnet, rlogin, rcp et rsh utilise authentification et cryptage. Voir sa page man pour plus de détails.
Exemple 16.44. Utilisation de ssh
#!/bin/bash # remote.bash: Utiliser ssh. # Exemple de Michael Zick. # Utilisé avec sa permission. # Présomptions: # ------------ # fd-2 n'est pas capturé ( '2>/dev/null' ). # ssh/sshd présume que stderr ('2') sera affiché à l'utilisateur. # # sshd est lancé sur votre machine. # Pour tout distribution 'standard', c'est probablement vrai, #+ et sans qu'un ssh-keygen n'ait été effectué. # Essayez ssh sur votre machine à partir de la ligne de commande : # # $ ssh $NOM_HOTE # Sans configuration supplémentaire, un mot de passe vous sera demandé. # enter password # une fois fait, $ exit # # Cela a-t'il fonctionné ? Si c'est la cas, vous êtes prêt pour plus d'action. # Essayez ssh sur votre machine en tant que 'root' : # # $ ssh -l root $NOM_HOTE # Lorsqu'un mot de passe vous est demandé, saisissez celui de root et surtout # pas le votre. # Last login: Tue Aug 10 20:25:49 2004 from localhost.localdomain # Saisissez 'exit' une fois terminé. # Les commandes ci-dessus vous donne un shell interactif. # Il est possible pour sshd d'être configuré dans le mode 'commande seule', #+ mais cela dépasse le cadre de notre exemple. # La seule chose à noter est que ce qui suit fonctionnera dans le mode #+ 'commande seule'. # Une commande simple d'écriture sur stdout (local). ls -l # Maintenant la même commande basique sur une machine distante. # Passez un nom d'utilisateur et d'hôte différents si vous le souhaitez : USER=${NOM_UTILISATEUR:-$(whoami)} HOST=${NOM_HOTE:-$(hostname)} # Maintenant, exécutez la commande ci-dessus sur l'hôte distant #+ avec des communications cryptées. ssh -l ${NOM_UTILISATEUR} ${NOM_HOTE} " ls -l " # Le résultat attendu est une liste du contenu du répertoire personnel de # l'utilisateur sur la machine distante. # Pour voir les différences, lancez ce script à partir d'un autre endroit que #+ votre répertoire personnel. # En d'autres termes, la commande Bash est passée comme une ligne entre guillemets #+ au shell distant, qui l'exécute sur la machine distante. # Dans ce cas, sshd fait ' bash -c "ls -l" ' à votre place. # Pour des informations sur des thèmes comme ne pas avoir à saisir un mot de # passe pour chaque ligne de commande, voir #+ man ssh #+ man ssh-keygen #+ man sshd_config. exit 0
À l'intérieur d'une boucle, ssh pourrait avoir un comportement inattendu. D'après un message Usenet de l'archive comp.unix shell, ssh hérite de l'entrée standard (stdin) de la boucle. Pour remédier à ceci, passez à ssh l'option -n ou l'option -f.
Merci à Jason Bechtel pour cette indication.
Secure copy, similaire en fonction à rcp, copie des fichiers entre deux machines différentes sur le réseau mais le fait en utilisant une authentification et avec un niveau de sécurité similaire à ssh.
Utilitaire pour la communication terminal à terminal. Il permet d'envoyer des lignes à partir de votre terminal (console ou xterm) à un autre utilisateur. La commande mesg pourrait, bien sûr, être utilisée pour désactiver l'accès en écriture au terminal.
Comme write est interactif, il a peu de chances de prouver son utilité dans un script.
Un outil en ligne de commande pour configurer un adaptateur réseau (en utilisant DHCP). Cette commande est native pour les distributions Linux basées sur la Red Hat.
Envoie ou lit des courriers électroniques.
Ce client mail en ligne de commande est très simpliste et fonctionne bien comme commande embarquée dans un script.
Exemple 16.45. Un script qui envoie son fichier source
#!/bin/sh # self-mailer.sh: Script vous envoyant un mail. adr=${1:-`whoami`} # Par défaut, l'utilisateur courant, si non spécifié. # Tapez 'self-mailer.sh wiseguy@superdupergenius.com' #+ envoie ce script à cette adresse. # Tapez juste 'self-mailer.sh' (sans argument) envoie le script à la personne #+ l'ayant appelé, par exemple bozo@localhost.localdomain. # # Pour plus d'informations sur la construction ${parameter:-default}, #+ voir la section "Substitution de paramètres" du chapitre "Variables #+ Revisitées." # ============================================================================ cat $0 | mail -s "Le script \"`basename $0`\" s'est envoyé lui-même à vous." "$adr" # ============================================================================ # -------------------------------------------- # Bonjour du script qui s'envoie par mail. # Une personne mal intentionnée a lancé ce script, ce qui a fait que ce mail #+ vous a été envoyé. # Apparemment, certaines personnes n'ont rien de mieux à faire de leur temps. # -------------------------------------------- echo "Le `date`, le script \"`basename $0`\" vous a été envoyé par mail sur "$adr"." exit 0 # Notez que la commande "mailx" (en mode "send") pourrait être substituée #+ par "mail"... mais avec des options un peu différentes.
Similaire à la commande mail, mailto envoie des mails à partir de la ligne de commande ou dans un script. Néanmoins, mailto permet aussi d'envoyer des messages MIME (multimedia).
Affiche des statistiques de mail. Cette commande ne peut être invoquée que par root.
root# mailstats Statistiques de mardi 1er janvier 2008, 20:32:08 M msgsfr bytes_from msgsto bytes_to msgsrej msgsdis msgsqur Mailer 4 1682 24118K 0 0K 0 0 0 esmtp 9 212 640K 1894 25131K 0 0 0 local ===================================================================== T 1894 24758K 1894 25131K 0 0 0 C 414 0
Cet utilitaire répond automatiquement aux courriers électroniques que le destinataire est en vacances et temporairement indisponible. Ceci tourne sur le réseau, en conjonction avec sendmail, et n'est pas applicable à un compte POP.
[78]
Un démon est un processus en tâche de fond non attaché à une session terminal. Les démons réalisent des services désignés soit à des moments précis soit en étant enclenchés par certains événements.
Le mot « démon » signifie fantôme en grec, et il y a certainement quelque chose de mystérieux, pratiquement surnaturel, sur la façon dont les démons UNIX travaillent silencieusement derrière la scène, réalisant leurs différentes tâches.