Linux
De TARENTINO
Aller à la navigationAller à la rechercheArray
15/05/2024
Sommaire
Pour les débutants
Introduction
Linux
Serveurs
Ansible
- >>> Etude <<<
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
- echo "TESTIDF.DPT075" | awk ’{print substr($0,length($0)-2)}’
- 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
- echo "coucou" | awk '{printf "%-190s\n",$0}' | awk ’print length()’
- Pour vérifier
- 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)
- echo "coucou" | awk ’{printf "%190s\n",$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’
- Exemple : insére 49 espaces après la colonne 6 de chaque ligne en entrèe.
- 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
- Afficher du champs 6 au dernier champs une ligne (l'espace est la séparation par défaut)
Scripts
- Une partie Opensource des scripts est ici, le reste est à venir....
- Bash Bonnes écritures
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.