Linux

De TARENTINO
Aller à la navigationAller à la recherche
Array

15/05/2024

Pour les débutants

Introduction

Linux

Serveurs

Ansible

Dev

AWK

  • AWK - Exemples pratiques
    • Afficher du champs 6 au dernier champs une ligne (l'espace est la séparation par défaut)
      • awk '{ for(i=6 ; i <= NF ; i++) { printf "%s ",$i } printf "\n"}' liste.txt
    • Découper un fichier contenant des entêtes commençant par DDF en autant de fichiers fic"x".txt
      • awk 'BEGIN{c=0} /^DDF/{c++} {print > "fic"c".txt"}' fichierddf
    • Crée un fichier fic_final.txt en commençant au troisième DDF
      • awk 'BEGIN{c=0} /^DDF/{ddf++} {if (ddf>=3) print > "fic_final.txt"}' fichierddf
    • Idem mais Découper un fichier à partir de ligne vide en autant de fichiers fic"x".txt
      • awk 'BEGIN{c=0} NF{print > "config"c".txt"} !NF{c++}' fichierblanc
    • Comment banaliser le caractère ’ (simple quote) dans la phrase : Aller à l’école
      • awk ’BEGINprint "Aller à L’"’"’école"’ Aller à L’école
      • awk ’BEGINprint "Aller à L’\’’école"’ Aller à L’école
      • awk "BEGINprint \"Aller à L’école\"" Aller à L’école
      • awk ’BEGINprint "Aller à L\047école"’ Aller à L’école
    • Récupérer les trois derniers caractères d’une variable
      • echo "TESTIDF.DPT075" | awk ’{print substr($0,length($0)-2)}’
        • => 075
    • Rajoute des espaces à droite de coucou pour une longueur totale de 190 caractères
      • echo "coucou" | awk '{printf "%-190s\n",$0}'
    • Rajoute des espaces à gauche de coucou pour une longueur totale de 190 caractères
      • echo "coucou" | awk ’{printf "%190s\n",$0}’
        • Pour vérifier
          • echo "coucou" | awk '{printf "%-190s\n",$0}' | awk ’print length()’
            • ==> 190
      • awk -F " :" ’ $2 = "" ; print $0 ’ /etc/passwd imprime chaque ligne du fichier /etc/passwd après avoir effacé le deuxième champ
      • awk ’END print NR’ fichier imprime le nombre total de lignes du fichiers
      • awk ’print $NF’ fichier imprime le dernier champs de chaque ligne
      • who | awk ’print $1,$5’ imprime le login et le temps de connexion.
      • awk ’length($0)>75 print’ fichier imprime les lignes de plus de 75 caractères. (print équivaur à print $0)
    • precede chaque ligne par son numéro pour ce fichier (alignement à gauche).
      • awk ’print FNR "\t" $0’ files*
    • precede chaque ligne par son numéro Pour l’ensemble des fichiers, avec une tabulation.
      • awk ’print NR "\t" $0’ files*
    • énumère chaque ligne d’un fichier (le nombre est à gauche, aligné à droite)
      • awk ’printf("%5d : %s\n", NR,$0)’
    • énumère chaque ligne du fichier, mais ecrit seulement les nombres si la ligne n’est pas vide
      • awk ’NF$0=++a " :" $0 ;1’
      • awk ’print (NF ? ++a " :" :"") $0’
    • compte les lignes (comme "wc -l")
      • awk ’ENDprint NR’
    • écrit la somme des champs de chaque ligne
      • awk ’s=0 ; for (i=1 ; i<=NF ; i++) s=s+$i ; print s’
    • ajoute tous les champs de toutes les lignes et affiche la somme
      • awk ’for (i=1 ; i<=NF ; i++) s=s+$i ; ENDprint s’
    • affiche chaque ligne après avoir remplacé chaque champ par sa valeur absolue
      • awk ’for (i=1 ; i<=NF ; i++) if ($i < 0) $i = -$i ; print ’
      • awk ’for (i=1 ; i<=NF ; i++) $i = ($i < 0) ? -$i : $i ; print ’
    • affiche le nombre total de champs ("mots") de toutes les lignes
      • awk ’ total = total + NF ; END print total’ fichier
    • affiche le nombre total de lignes qui contiennent "Beth"
      • awk ’/Beth/n++ ; END print n+0’ fichier
    • affiche le premier champ le plus grand et la ligne qui le contient
      • awk ’$1 > max max=$1 ; maxline=$0 ; END print max, maxline’
    • affiche le nombre de champs de chaque ligne, suivi par la ligne
      • awk ’ print NF " :" $0 ’
    • affiche le dernier champ de chaque ligne
      • awk ’ print $NF ’
    • affiche le dernier champ de la dernière ligne
      • awk ’ field = $NF ; END print field ’
    • affiche toutes les lignes de plus de quatre champs
      • awk ’NF > 4’
    • affiche toutes les lignes dans lesquelles la valeur du dernier champ est supèrieure à 4
      • awk ’$NF > 4’
    • crée une chaine d’une certaine longueur (c’est-à-dire avec 513 espaces)
      • awk ’BEGINwhile (a++<513) s=s " " ; print s’
      • insére une chaine d’une certaine longueur à une certaine position de caractère
        • Exemple : insére 49 espaces après la colonne 6 de chaque ligne en entrèe.
          • gawk —re-interval ’BEGINwhile(a++<49)s=s " " ;sub(/^.6/,"&" s) ;1’
    • crée un tableau nommé month, indexé par des numéros afin que month[1]
    • soit ’Jan’, month[2] ’Feb’, month[3] ’Mar’ et ainsi de suite.
      • split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec", month, " ")
    • crée un tableau appelé "mdigit", indexé par des chaines, afin que
    • mdigit["Jan"] soit 1, mdigit["Feb"] 2, etc. Necessite un tableau "month"
      • for (i=1 ; i<=12 ; i++) mdigit[month[i]] = i
    • Dans un environnement UNIX, convertit des lignes DOS (CR/LF) en format Unix
      • awk ’sub(/\r$/,"") ;1’ # suppose que chaque ligne finit par Ctrl-M
    • Dans un environnement UNIX convertit des lignes Unix (LF) en format DOS
      • awk ’sub(/$/,"\r") ;1’
    • Dans un environnement DOS convertit des lignes Unix (LF) en format DOS
      • awk 1
    • Dans un environnement DOS convertit des lignes DOS (CR/LF) en format Unix
    • Ne peut être fait avec les versions DOS de awk, autres que gawk :
      • gawk -v BINMODE="w" ’1’ infile >outfile
    • supprimer les espaces principaux (espaces, tabulations) au début de chaque ligne
      • awk ’sub(/^[ \t]+/, "") ;1’
    • supprime les espaces finaux (espaces, tabulations) de la fin de chaque ligne
      • awk ’sub(/[ \t]+$/, "") ;1’
    • supprime les espaces au début et à la fin de chaque lignes
      • awk ’gsub(/^[ \t]+|[ \t]+$/,"") ;1’
      • awk ’$1=$1 ;1’ # supprime également des espaces supplémentaires entre les champs
    • insére cinq espaces vides au début de chaque ligne (fait une page de décalage)
      • awk ’sub(/^/, " ") ;1’
    • aligne le texte à droite avec une largeur de 79-colonnes
      • awk ’printf "%79s\n", $0’ fichier*
    • centre le texte avec une largeur de 79-caractères
      • awk ’l=length() ;s=int((79-l)/2) ; printf "%"(s+l)"s\n",$0’ fichier*
    • remplace (trouve et remplace) "foo" par "bar" dans chaque ligne
      • awk ’sub(/foo/,"bar") ; 1’ # remplace seulement la première occurence
      • gawk ’$0=gensub(/foo/,"bar",4) ; 1’ # remplace seulement la quatrième occurence
      • awk ’gsub(/foo/,"bar") ; 1’ # remplace toutes les occurences de la ligne
    • remplace "foo" par "bar" seulement pour les lignes qui contiennent "baz"
      • awk ’/baz/gsub(/foo/, "bar") ; 1’
    • remplace "foo" par "bar" sauf pour les lignes qui contiennent "baz"
      • awk ’ !/baz/gsub(/foo/, "bar") ; 1’
    • modifie "scarlet" ou "ruby" ou "puce" en "red"
      • awk ’gsub(/scarlet|ruby|puce/, "red") ; 1’
    • inverser l’ordre des lignes (comme avec "tac")
      • awk ’a[i++]=$0 END for (j=i-1 ; j>=0 ;) print a[j—] ’ fichier*
    • si une ligne se finit par un backslash, ajoutez la ligne suivante à celui-ci (cela échoue si il y a plusieurs lignes
    • finissant par un backslash…)
      • awk ’/\\$/ sub(/\\$/,"") ; getline t ; print $0 t ; next ; 1’ fichier*
    • affiche et trie les noms de login de tous les utilisateurs
      • awk -F " :" ’print $1 | "sort" ’ /etc/passwd
    • affiche les deux premiers champs, en ordre inverse de chaque ligne
      • awk ’print $2, $1’ file
    • échange les deux premiers champs de chaque ligne
      • awk ’temp = $1 ; $1 = $2 ; $2 = temp’ fichier
    • affiche chaque ligne, en supprimant le second champ de cette ligne
      • awk ’ $2 = "" ; print ’
    • affiche dans l’ordre inverse les champs de chaque ligne
      • awk ’for (i=NF ; i>0 ; i—) printf("%s ",$i) ;print ""’ file
    • concatene toutes les 5 lignes en entrée, en employant un séparateur virgule
    • entre les champs
      • awk ’ORS=NR%5 ?"," :"\n"’ file
    • affiche les 10 premières lignes du fichier (émule le comportement de la commande "head")
      • awk ’NR < 11’
    • affiche la première ligne du fichier (émule "head -1")
      • awk ’NR>1exit ;1’
    • affiche les deux dernières lignes d’un fichier (émule "tail -2")
      • awk ’y=x "\n" $0 ; x=$0 ;ENDprint y’
    • affiche la dernière ligne d’un fichier (émule "tail -1")
      • awk ’ENDprint’
    • affiche seulement les lignes qui correspondent à une expression régulière (émule "grep")
      • awk ’/regex/’
    • affiche seulement les lignes qui ne correspondent pas à une expression régulière (émule "grep -v")
      • awk ’ !/regex/’
    • affiche toutes les lignes où le champ #5 est égal à "abc123"
      • awk ’$5 == "abc123"’
    • affiche seulement les lignes où le champ #5 n’est pas égal à "abc123"
    • cela affichera aussi les lignes qui ont moins de 5 champs.
      • awk ’$5 != "abc123"’
      • awk ’ !($5 == "abc123")’
    • correspondance avec un champ à l’aide d’une expression régulière
      • awk ’$7 /^[a-f]/’ # affiche la ligne si le champ #7 correspond à l’expression régulière
      • awk ’$7 ! /^[a-f]/’ # affiche la ligne si le champ #7 ne correspond pas à l’expression régulière
    • affiche la ligne immédiatement avant une expression, mais pas la ligne contenant l’expression
      • awk ’/regex/print x ;x=$0’
      • awk ’/regex/print (NR==1 ? "match on line 1" : x) ;x=$0’
    • affiche la ligne immédiatement après l’expression, mais pas la ligne contenant l’expression
      • awk ’/regex/getline ;print’
    • fait une recherche avec grep pour AAA et BBB et CCC (dans n’importe quel ordre sur la même ligne)
      • awk ’/AAA/ && /BBB/ && /CCC/’
    • fait une recherche avecc grep pour AAA et BBB et CCC (dans cet ordre)
      • awk ’/AAA.*BBB.*CCC/’
    • affiche seulement des lignes de 65 caractères ou plus
      • awk ’length > 64’
    • affiche seulement des lignes de moins de 65 caractères
      • awk ’length < 64’
    • affiche la partie du fichier depuis l’expression régulière jusqu’à la fin du fichier
      • awk ’/regex/,0’
      • awk ’/regex/,EOF’
    • affiche la partie du fichier basée sur les numéros de ligne (lignes 8-12, inclus)
      • awk ’NR==8,NR==12’
    • affiche la ligne numéro 52
      • awk ’NR==52’
      • awk ’NR==52 print ;exit’ # plus efficace avec de gros fichiers
    • affiche une partie d’un fichier entre deux expressions régulières (inclus)
      • awk ’/Iowa/,/Montana/’ # sensible à la casse
    • supprimer toutes les lignes vides d’un fichier (même chose que "grep ’.’ ")
      • awk NF
      • awk ’/./’
    • supprime des doublons et des lignes consécutives (émule "uniq")
      • awk ’a ! $0 ; a=$0’
    • supprime les doublons et les lignes non-consécutives
      • awk ’ !a[$0]++’ # script plus concis
      • awk ’ !($0 in a)a[$0] ;print’ # script plus efficace

Scripts

Installation

  1 #!/bin/bash
  2 if [ ! -d "/root/.config" ]; then
  3   mkdir /root/.config
  4 fi
  5 if [ ! -d "/root/.config/nautilus" ]; then
  6 	mkdir /root/.config/nautilus
  7 fi
  8 if [ ! -f "/root/.Xauthority" ]; then
  9 	touch /root/.Xauthority
 10 fi
 11 DATE_NOW=`date +"%Y%m%d_%H%M%S"`
 12 logs="/root/Logs_Install.txt"
 13 rm -f $logs
 14 touch "$logs"
 15 
 16 # Repository
 17 echo "Installation Repository" | tee -a "$logs"
 18 add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe" -y | tee -a "$logs"
 19 apt-add-repository 'deb http://liveusb.info/multisystem/depot all main' -y | tee -a "$logs"
 20 z="unit193/encryption yannubuntu/boot-repair gwendal-lebihan-dev/cinnamon-stable simonschneegans/testing twodopeshaggy/jarun pmcenery/ppa gezakovacs/ppa"
 21 IFS=" "
 22 for i in $(echo "$z")
 23 	do
 24 		echo "--------------------------> $i" | tee -a "$logs" 
 25 		ii=$(echo "$i" | cut -d "/" -f1)
 26 		ok=$(ls /etc/apt/sources.list.d/*$ii2>/dev/null)
 27 		if [ "$ok" == "" ]; then
 28 			echo "On installe $i dans les sources" | tee -a "$logs"
 29 			add-apt-repository ppa:$i -y | tee -a "$logs"
 30 		else
 31 			echo "$result déjà dans les sources" | tee -a "$logs"
 32 		fi
 33 	done
 34 if [ "$(which aptitude)" == "" ]; then
 35 	apt-get install aptitude -y | tee -a "$logs"
 36 fi
 37 if [ "$(which snapd)" == "" ]; then
 38 	aptitude install snapd -y | tee -a "$logs"
 39 fi
 40 if [ "$(which snapd-xdg-open)" == "" ]; then
 41 	aptitude install snapd -y | tee -a "$logs"
 42 fi
 43 sudo apt update | tee -a "$logs"
 44 z="unetbootin libcanberra-gtk-module libcanberra-gtk3-module synaptic cairo-dock gparted apturl fonts-symbola boot-repair chrome-gnome-shell brasero gpaint lmms vim veracrypt zram-config whois filezilla fslint openssh-client openssh-server multisystem testdisk rawtherapee darktable nmon iftop iptraf-ng glances fdupes rmlint gimp net-tools preload prelink localepurge xdotool phototonic nemo nemo-fileroller clamav imagemagick gnome-pie graphviz ffdiaporama findimagedupes wine chrome-gnome-shell rox-filer cifs-utils mount.cifs xclip lynx adobe-flashplugin ubuntu-restricted-extras adobe-flash-properties-gtk dos2unix googler python-flask numlockx xbindkeys xvkbd screen"
 45 IFS=" "
 46 for i in $(echo "$z")
 47 	do
 48 		echo "--------------------------> $i" | tee -a "$logs" 
 49 		if [ "$(which ${i})" == "" ]; then
 50 			echo "On installe $i" | tee -a "$logs"
 51 			aptitude install "$i" -y | tee -a "$logs"
 52 		else
 53 			echo "$result déjà installé" | tee -a "$logs"
 54 		fi
 55 	done
 56 sudo apt -f install -y
 57 sudo apt-get update -y
 58 sudo service zram-config start
 59 # APTURL
 60 logs="/root/Logs_Install.txt"
 61 z="nautilus-emblems flashplugin-installer xmacro pcmanfm dconf-editor bleachbit gwenview pcmanfm synfig synfigstudio"
 62 IFS=" "
 63 for i in $(echo "$z")
 64 	do
 65 		echo "--------------------------> $i" | tee -a "$logs"
 66 		if [ -z $(which $i) ];then 
 67 			retour=$(dpkg -l | grep "$i" )
 68 			if [ "$retour" == '' ]; then
 69 				echo 'KO, On installe' | tee -a "$logs"
 70 				i='apt://'$i
 71 				apturl "$i" &
 72 				sleep 2
 73 				xdotool keydown key Tab
 74 				sleep 2
 75 				xdotool key Return
 76 				sleep 7
 77 			else
 78 				echo 'OK, Installe' | tee -a "$logs"
 79 			fi
 80 		else
 81 			echo 'OK, Installe' | tee -a "$logs"
 82 		fi
 83 	done
 84 
 85 # SNAP
 86 echo "********" | tee -a "$logs"
 87 echo "* SNAP *" | tee -a "$logs"
 88 echo "********" | tee -a "$logs"
 89 sudo snap install notepad-plus-plus | tee -a "$logs"
 90 sudo snap connect notepad-plus-plus:process-control | tee -a "$logs"
 91 sudo snap connect notepad-plus-plus:removable-media | tee -a "$logs"
 92 sudo snap connect notepad-plus-plus:hardware-observe | tee -a "$logs"
 93 sudo snap connect notepad-plus-plus:cups-control | tee -a "$logs"
 94 echo "--" | tee -a "$logs"
 95 
 96 # WGET
 97 echo "********" | tee -a "$logs"
 98 echo "WGET *" | tee -a "$logs"
 99 echo "********" | tee -a "$logs"
100 wget -P /tmp -q http://liveusb.info/multisystem/depot/multisystem.asc -O- | sudo apt-key add -
101 cd /tmp; apt-get --assume-yes install multisystem -y; cd -
102 z="https://download.teamviewer.com/download/linux/teamviewer_amd64.deb http://launchpadlibrarian.net/109052632/python-support_1.0.15_all.deb http://launchpadlibrarian.net/206807840/python-glade2_2.24.0-4ubuntu1_amd64.deb https://launchpad.net/disk-manager/1.1/1.1.1/+download/disk-manager_1.1.1-1_all.deb"
103 reps="/root"
104 IFS=" "
105 for i in $(echo "$z")
106 	do
107 		echo "--------------------------> $i" | tee -a "$logs"
108 		occ=$(occurences "$i" "/" d | cut -d" " -f2-)
109 		occ=$(echo $occ | cut -d" " -f2-)
110 		occ2=$occ
111 		occ=$(echo "$(echo "$occ" | cut -d" " -f3)" | sed 's/....$//' | cut -d"_" -f1)
112 		echo "--------------- ($occ2)" | tee -a "$logs"
113 		if [ -z $(which "$occ") ];then 
114 			retour=$(dpkg -l | grep "$occ")
115 			if [ "$retour" == '' ]; then
116 				echo 'KO, On installe' | tee -a "$logs"
117 				#wget -P /tmp "$i" | tee -a "$logs"
118 				wget -P "$reps" "$i" | tee -a "$logs"
119 				encoursdpkg=$(ps -edf | grep dpkg | grep -v grep)
120 				while [[ $(ps -edf | grep dpkg | grep -v grep) != "" ]]
121 					do
122 						echo "dpkg en cours...."
123 					done
124 				dpkg -i "$reps/${occ2}" | tee -a "$logs"
125 				ls -l "$reps/${occ2}"
126 			else
127 				echo 'OK, Installe' | tee -a "$logs"
128 			fi
129 		else
130 			echo 'OK, Installe' | tee -a "$logs"
131 		fi
132 	done
133 rm -f "$reps/${occ2}"
134 rm -f "$reps/${occ2}.?"
135 apt -f install
136 apt-get update
137 
138 # Divers
139 echo "**********" | tee -a "$logs"
140 echo "Divers *" | tee -a "$logs"
141 echo "**********" | tee -a "$logs"
142 cp -v /usr/share/applications/cairo-dock.desktop /home/a/.config/autostart/cairo-dock.desktop | tee -a "$logs"
143 sed -i 's/PRELINKING=unknown/PRELINKING=yes/' /etc/default/prelink
144 echo 'DPkg::Post-Invoke {"echo Pré-raccordement des bibliothèques en cours, veuillez patienter...;/etc/cron.daily/prelink";}'|tee -a /etc/apt/apt.conf.d/98prelink
145 xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search
146 sed -i "/^# deb .*partner/ s/^# //" /etc/apt/sources.list
147 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
148 chmod a-w /etc/ssh/sshd_config.original
149 echo >> /home/$user/.bashrc
150 echo export LS_OPTIONS='--color=auto' >> /home/$user/.bashrc
151 #echo eval "`dircolors`" >> /home/$user/.bashrc
152 echo alias ls='ls $LS_OPTIONs' >> /home/$user/.bashrc
153 
154 # EXTENSIONS FIREFOX
155 firefox "https://addons.mozilla.org/fr/firefox/addon/video-downloadhelper/" &
156 firefox "http://get.adobe.com/fr/flashplayer/about/" &
157 firefox "https://www.mozilla.org/fr/firefox/new/?scene=2" &
158 firefox "https://nautilus-image-converter.fr.uptodown.com/ubuntu/telecharger" &
159 firefox "http://blog.roozeec.fr/2007/09/05/tagphoto-script-nautilus-pour-mettre-date-et-heure-sur-vos-photos/" &
160 firefox "https://addons.mozilla.org/fr/firefox/addon/bookmark-dupes/" &
161 echo "**********************" | tee -a "$logs"
162 echo "EXTENSIONS FIREFOX *" | tee -a "$logs"
163 echo "**********************" | tee -a "$logs"
164 z="https://addons.mozilla.org/firefox/downloads/file/744266/video_downloadhelper-6.3.3-fx.xpi https://addons.mozilla.org/fr/firefox/addon/adblock-plus"
165 reps="/root"
166 cd $reps
167 IFS=" "
168 for i in $(echo "$z")
169 	do
170 		wget "$i"
171 		/usr/bin/firefox -install-global-extension "$i"
172 	done
173 cd -
174 exit 0
175 #
176 #FLASH
177 #    URLs 
178 #
179 #    SAUVEGARDES 
180 #
181 #
182 #
183 #    UTILISATEUR 
184 #
185 #
186 #
187 #    DESINSTALLATIONS 
188 #
189 # Dans le cas où le Pc n est pas un portable, désactivation de la gestion des touches bleus.
190 #
191 #sudo update-rc.d -f hotkey-setup remove 
192 #
193 #Batterie
194 #
195 #sudo update-rc.d -f laptop-mode remove 
196 #
197 #Gestion du Raid
198 #
199 #sudo update-rc.d -f mdadm remove 
200 #sudo update-rc.d -f mdadm-raid remove 
201 #
202 #Modem
203 #
204 #sudo update-rc.d -f dns-clean remove 
205 #
206 #    Redémarrage des services 
207 #
208 #sudo systemctl restart sshd.service
209 #
210 #    COMPLEMENTS 
211 #
212 #Avec une clé SSH, effectuer en plus...
213 #
214 #Générer une clé
215 # ssh-keygen -t rsa
216 #Copier le fichier id_rsa.pub sur l'hôte distant et l'ajouter à ~/.ssh/authorized_keys
217 # ssh-copy-id identifiant@hôte
218 #
219 #sed -i 's/geteuid/getppid/' /usr/bin/vlc
220 #
221 #sudo apt-get update
222 #sudo apt-get upgrade
223 #sudo apt-get install libimobiledevice-utils
224 #idevicepair unpair
225 #idevicepair pair
226 #idevicepair validate
227 #
228 # Fond d'ecran en terminal:
229 #http://www.billyboylindien.com/ubuntu/ubuntu-devilspie.html
230 #https://www.torproject.org/fr/download/
231 #
232 # APT 
233 #

Modification de sources.list en fonction de la version de ubuntu

  • Comme ça me gavait de chercher à corriger mon fichier sources.list à cause des erreurs occasionnées lors de la modification de celui ci et après un apt-get update, j'ai voulu génerer un script qui allait mettre le bon fichier à la bonne version.
  • apt_fix (Il faut avoir installé le package lynx au préalable)
 1 #!/bin/bash
 2 #
 3 # Variables
 4 #
 5 DATE_NOW=`date +"%Y%m%d_%H%M%S"`
 6 ref="https://fr.wikipedia.org/wiki/Liste_des_versions_d%27Ubuntu"
 7 r="/cmd/tmp/versions_ubuntu.txt"
 8 #
 9 # Téléchargement de la liste des versions
10 #
11 cd /tmp
12 lynx -dump https://fr.wikipedia.org/wiki/Liste_des_versions_d%27Ubuntu | grep -v "png\|jpg\|wikipedia.org\|\[\|\!\|Meta\|software\|2004" | grep "(" | grep Ubuntu > "$r"
13 #
14 # Enregistrement du nouveau fichier en fonction de la version actuelle installée
15 #
16 v=$(cat /etc/issue | cut -d' ' -f2 | cut -d'.' -f1,2)
17 nv=$(cat "$r" | grep "$v" | cut -d'(' -f2 | cut -d' ' -f1)
18 nv=$(echo "${nv}" | tr '[:upper:]' '[:lower:]')
19 cp /etc/apt/sources.list /etc/apt/sources.list.${DATE_NOW}
20 sudo tee /etc/apt/sources.list <<EOF
21 #------------------------------------------------------------------------------#
22 #                            OFFICIAL UBUNTU REPOS                             #
23 #------------------------------------------------------------------------------#
24 
25 ###### Ubuntu Main Repos
26 deb http://fr.archive.ubuntu.com/ubuntu/ xxxxxxxx main restricted universe multiverse
27 
28 ###### Ubuntu Update Repos
29 deb http://fr.archive.ubuntu.com/ubuntu/ xxxxxxxx-security main restricted universe multiverse
30 deb http://fr.archive.ubuntu.com/ubuntu/ xxxxxxxx-updates main restricted universe multiverse
31 deb http://fr.archive.ubuntu.com/ubuntu/ xxxxxxxx-backports main restricted universe multiverse
32 
33 ###### Ubuntu Partner Repo
34 deb http://archive.canonical.com/ubuntu xxxxxxxx partner
35 EOF
36 echo "-------------------------> ("$nv")"
37 cat /etc/apt/sources.list | sed -re 's/xxxxxxxx/'${nv}'/g' > /tmp/sources.list
38 mv /tmp/sources.list /etc/apt
39 cat /etc/apt/sources.list
  • Fait dans l'urgence puisque j'en ai besoin pour ansible, il y a sûrement des trucs à corriger, modifier, améliorer, mais ce script est une base qui fonctionne.
  • Il fait une sauvegarde systématique de l'ancien sources.list en le renommant à la date du jour dans /etc/apt .

Mémoriser et utiliser les mots de passe de connexion ssh

  • Il est quelques fois ennuyeux de chercher les mots de passe et d'avoir à les entrer à chaque connexion.
  • Ce script permet pour chaque user de les mémoriser dans un fichier de façon cryptée afin de pouvoir les exploiter en ligne de commande via la variable $crypt
  • Les mots de passe ainsi mémorisés n’apparaîtront pas dans le "history"
  • Même si un pirate prend possession d'un compte en local, il ne pourra jamais voir ces mots de passe
  • La sécurité est sur plusieurs niveaux:
    • machine utilisée
    • user
    • session utilisée
    • clé
    • nom du mot de passe
  • Pour qu'un pirate exploite le mot de passe, il lui faudra pour cela avoir le même ordinateur avec le même compte que celui qui a enregistré le mot de passe, connaître la clé et le nom du mot codé et le faire sur la même session que celle utilisée pour le mot de passe.....

Prérequis (non obligatoire mais conseillé)

  • Installer le package sshpass

Code

  1 #!/bin/bash
  2 # **** 0 Decrypt ****
  3 # cryptmot 0 nom_de_cryptage <clé de decryptage>
  4 # => va demander une clé si pas de clé entrée
  5 # => donne variable crypt
  6 # **** 1 Crypt ****
  7 # cryptmot 1 nom_de_cryptage <mot a crypter>
  8 # => va demander une clé
  9 # => voir pour mettre en cache
 10 # **** 2 List ****
 11 # cryptmot 2
 12 # => va afficher la liste de tous les cryptages effectués
 13 # => affichage simplement des noms de cryptage
 14 # 
 15 # La clé est simplement le mot de passe de l'utilisateur
 16 # Lors de la saisie du mot de passe, l'affichage ne se fait pas
 17 #
 18 p=$1
 19 DATE_NOW=`date +"%Y%m%d_%H%M%S"`
 20 export crypt=''
 21 ############################################
 22 # On regarde si les paquets sont installés #
 23 ############################################
 24 p="mcrypt"
 25 if [[ -z $(which "$p") ]]; then
 26 	retour=$(apt-cache policy "$p" | grep -s "Installé\|Installed")
 27 	if [[ "$retour" == '' ]]; then
 28 		echo "On installe...."
 29 		sudo aptitude install "$p" -y
 30 	fi
 31 fi
 32 ##################################################
 33 # On vérifie si le répertoire de cryptage est là #
 34 ##################################################
 35 r="$HOME/.wmcpt"
 36 if [[ ! -d "$r" ]]; then
 37 	echo "On créé le répertoire...."
 38 	mkdir "$r"
 39 fi
 40 #########
 41 # START #
 42 #########
 43 if [[ "$1" != '2' ]]; then
 44 	if [[ "$1" == '' ]]; then
 45 		exit 1
 46 	fi
 47 	if [[ "$1" != '0' ]] && [[ "$1" != '1' ]]; then
 48 		exit 1
 49 	fi
 50 	if [[ "$1" == '1' ]] && [[ "$2" == '' ]]; then
 51 		exit 1
 52 	fi
 53 	if [[ "$1" == '0' ]] && [[ "$2" == '' ]]; then
 54 		exit 1
 55 	fi
 56 else
 57 	####################################
 58 	# 2 Affichage des noms de cryptage #
 59 	####################################
 60 	ls ~/.wmcpt
 61 	exit 0
 62 fi
 63 #############
 64 # 0 Decrypt #
 65 #############
 66 # cryptmot 0 nom_du_cryptage <clé de decryptage>
 67 if [[ "$1" == '0' ]]; then
 68 	if [[ "$3" == '' ]]; then # on demande la clé de décryptage
 69 		echo "Entrer la clé de decryptage (ne s'affichera pas)"
 70 		stty -echo
 71 		read cle
 72 		stty echo
 73 	else
 74 		cle=$3
 75 	fi	
 76 	export crypt=$(cat ${r}/"$2" | mdecrypt -q -k ${cle})
 77 fi
 78 ###########
 79 # 1 Crypt #
 80 ###########
 81 # cryptmot 1 nom_du_cryptage <mot_a_crypter> <clé de decryptage>
 82 if [[ "$1" == '1' ]]; then
 83 	FC="/tmp/${DATE_NOW}.tmp"
 84 	if [[ "$3" == '' ]]; then # on demande le mot à crypter
 85 		echo "Entrer le mot à crypter (ne s'affichera pas)"
 86 		stty -echo
 87 		read mot
 88 		stty echo
 89 	else
 90 		mot=$3
 91 	fi
 92 	echo $mot > $FC
 93 	if [[ "$4" == '' ]]; then # on demande la clé de décryptage
 94 		echo "Entrer la clé de cryptage (ne s'affichera pas)"
 95 		stty -echo
 96 		read cle
 97 		stty echo
 98 	else
 99 		cle=$3
100 	fi
101 	cat "$FC" | mcrypt -q -k ${cle} > ${r}/"$2"
102 	rm -f "$FC"
103 fi

Fonctionnement

  • Dans un premier temps, il faut mémoriser les mots de passe à utiliser dans un fichier, tout sera crypté.
  • Chaque mot de passe sera enregistré avec un nom et une clé qui diffère selon les utilisateurs.

Synoptique

Cryptmot utilisation.jpg