Linux : Différence entre versions

De TARENTINO
Aller à la navigationAller à la recherche
Ligne 618 : Ligne 618 :
 
<div style="width:75%; height:600px; overflow:auto; border:solid 1px black;">
 
<div style="width:75%; height:600px; overflow:auto; border:solid 1px black;">
 
<syntaxhighlight lang="shell" line='line'>
 
<syntaxhighlight lang="shell" line='line'>
#!/bin/bash
+
#!/usr/bin/env bash
if [ ! -d "/root/.config" ]; then
+
set -euo pipefail
  mkdir /root/.config
 
fi
 
if [ ! -d "/root/.config/nautilus" ]; then
 
mkdir /root/.config/nautilus
 
fi
 
if [ ! -f "/root/.Xauthority" ]; then
 
touch /root/.Xauthority
 
fi
 
DATE_NOW=`date +"%Y%m%d_%H%M%S"`
 
logs="/root/Logs_Install.txt"
 
rm -f $logs
 
touch "$logs"
 
  
# Repository
+
readonly STORE_DIR="$HOME/.wmcpt"
echo "Installation Repository" | tee -a "$logs"
 
add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe" -y | tee -a "$logs"
 
apt-add-repository 'deb http://liveusb.info/multisystem/depot all main' -y | tee -a "$logs"
 
z="unit193/encryption yannubuntu/boot-repair gwendal-lebihan-dev/cinnamon-stable simonschneegans/testing twodopeshaggy/jarun pmcenery/ppa gezakovacs/ppa"
 
IFS=" "
 
for i in $(echo "$z")
 
do
 
echo "--------------------------> $i" | tee -a "$logs"
 
ii=$(echo "$i" | cut -d "/" -f1)
 
ok=$(ls /etc/apt/sources.list.d/*$ii2>/dev/null)
 
if [ "$ok" == "" ]; then
 
echo "On installe $i dans les sources" | tee -a "$logs"
 
add-apt-repository ppa:$i -y | tee -a "$logs"
 
else
 
echo "$result déjà dans les sources" | tee -a "$logs"
 
fi
 
done
 
if [ "$(which aptitude)" == "" ]; then
 
apt-get install aptitude -y | tee -a "$logs"
 
fi
 
if [ "$(which snapd)" == "" ]; then
 
aptitude install snapd -y | tee -a "$logs"
 
fi
 
if [ "$(which snapd-xdg-open)" == "" ]; then
 
aptitude install snapd -y | tee -a "$logs"
 
fi
 
sudo apt update | tee -a "$logs"
 
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"
 
IFS=" "
 
for i in $(echo "$z")
 
do
 
echo "--------------------------> $i" | tee -a "$logs"
 
if [ "$(which ${i})" == "" ]; then
 
echo "On installe $i" | tee -a "$logs"
 
aptitude install "$i" -y | tee -a "$logs"
 
else
 
echo "$result déjà installé" | tee -a "$logs"
 
fi
 
done
 
sudo apt -f install -y
 
sudo apt-get update -y
 
sudo service zram-config start
 
# APTURL
 
logs="/root/Logs_Install.txt"
 
z="nautilus-emblems flashplugin-installer xmacro pcmanfm dconf-editor bleachbit gwenview pcmanfm synfig synfigstudio"
 
IFS=" "
 
for i in $(echo "$z")
 
do
 
echo "--------------------------> $i" | tee -a "$logs"
 
if [ -z $(which $i) ];then
 
retour=$(dpkg -l | grep "$i" )
 
if [ "$retour" == '' ]; then
 
echo 'KO, On installe' | tee -a "$logs"
 
i='apt://'$i
 
apturl "$i" &
 
sleep 2
 
xdotool keydown key Tab
 
sleep 2
 
xdotool key Return
 
sleep 7
 
else
 
echo 'OK, Installe' | tee -a "$logs"
 
fi
 
else
 
echo 'OK, Installe' | tee -a "$logs"
 
fi
 
done
 
  
# SNAP
+
usage() {
echo "********" | tee -a "$logs"
+
  cat <<'EOF'
echo "* SNAP *" | tee -a "$logs"
+
Usage:
echo "********" | tee -a "$logs"
+
  cryptmot 0 <nom_cryptage> [cle]
sudo snap install notepad-plus-plus | tee -a "$logs"
+
  cryptmot 1 <nom_cryptage> [mot] [cle]
sudo snap connect notepad-plus-plus:process-control | tee -a "$logs"
+
  cryptmot 2
sudo snap connect notepad-plus-plus:removable-media | tee -a "$logs"
 
sudo snap connect notepad-plus-plus:hardware-observe | tee -a "$logs"
 
sudo snap connect notepad-plus-plus:cups-control | tee -a "$logs"
 
echo "--" | tee -a "$logs"
 
  
# WGET
+
Modes:
echo "********" | tee -a "$logs"
+
  0  Décrypte et affiche le contenu dans la variable CRYPT
echo "WGET *" | tee -a "$logs"
+
  1 Crypte le mot saisi
echo "********" | tee -a "$logs"
+
  2  Liste les noms des cryptages
wget -P /tmp -q http://liveusb.info/multisystem/depot/multisystem.asc -O- | sudo apt-key add -
+
EOF
cd /tmp; apt-get --assume-yes install multisystem -y; cd -
+
}
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"
 
reps="/root"
 
IFS=" "
 
for i in $(echo "$z")
 
do
 
echo "--------------------------> $i" | tee -a "$logs"
 
occ=$(occurences "$i" "/" d | cut -d" " -f2-)
 
occ=$(echo $occ | cut -d" " -f2-)
 
occ2=$occ
 
occ=$(echo "$(echo "$occ" | cut -d" " -f3)" | sed 's/....$//' | cut -d"_" -f1)
 
echo "--------------- ($occ2)" | tee -a "$logs"
 
if [ -z $(which "$occ") ];then
 
retour=$(dpkg -l | grep "$occ")
 
if [ "$retour" == '' ]; then
 
echo 'KO, On installe' | tee -a "$logs"
 
#wget -P /tmp "$i" | tee -a "$logs"
 
wget -P "$reps" "$i" | tee -a "$logs"
 
encoursdpkg=$(ps -edf | grep dpkg | grep -v grep)
 
while [[ $(ps -edf | grep dpkg | grep -v grep) != "" ]]
 
do
 
echo "dpkg en cours...."
 
done
 
dpkg -i "$reps/${occ2}" | tee -a "$logs"
 
ls -l "$reps/${occ2}"
 
else
 
echo 'OK, Installe' | tee -a "$logs"
 
fi
 
else
 
echo 'OK, Installe' | tee -a "$logs"
 
fi
 
done
 
rm -f "$reps/${occ2}"
 
rm -f "$reps/${occ2}.?"
 
apt -f install
 
apt-get update
 
  
# Divers
+
need_bin() {
echo "**********" | tee -a "$logs"
+
  command -v "$1" >/dev/null 2>&1 || {
echo "Divers *" | tee -a "$logs"
+
    echo "Erreur: commande introuvable: $1" >&2
echo "**********" | tee -a "$logs"
+
    exit 1
cp -v /usr/share/applications/cairo-dock.desktop /home/a/.config/autostart/cairo-dock.desktop | tee -a "$logs"
+
  }
sed -i 's/PRELINKING=unknown/PRELINKING=yes/' /etc/default/prelink
+
}
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
 
xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search
 
sed -i "/^# deb .*partner/ s/^# //" /etc/apt/sources.list
 
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
 
chmod a-w /etc/ssh/sshd_config.original
 
echo >> /home/$user/.bashrc
 
echo export LS_OPTIONS='--color=auto' >> /home/$user/.bashrc
 
#echo eval "`dircolors`" >> /home/$user/.bashrc
 
echo alias ls='ls $LS_OPTIONs' >> /home/$user/.bashrc
 
  
# EXTENSIONS FIREFOX
+
read_secret() {
firefox "https://addons.mozilla.org/fr/firefox/addon/video-downloadhelper/" &
+
  local prompt="$1"
firefox "http://get.adobe.com/fr/flashplayer/about/" &
+
  local var
firefox "https://www.mozilla.org/fr/firefox/new/?scene=2" &
+
  printf '%s' "$prompt" >&2
firefox "https://nautilus-image-converter.fr.uptodown.com/ubuntu/telecharger" &
+
  read -r -s var
firefox "http://blog.roozeec.fr/2007/09/05/tagphoto-script-nautilus-pour-mettre-date-et-heure-sur-vos-photos/" &
+
  printf '\n' >&2
firefox "https://addons.mozilla.org/fr/firefox/addon/bookmark-dupes/" &
+
  printf '%s' "$var"
echo "**********************" | tee -a "$logs"
+
}
echo "EXTENSIONS FIREFOX *" | tee -a "$logs"
+
 
echo "**********************" | tee -a "$logs"
+
ensure_env() {
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"
+
  need_bin mcrypt
reps="/root"
+
  need_bin mdecrypt
cd $reps
+
 
IFS=" "
+
  mkdir -p "$STORE_DIR"
for i in $(echo "$z")
+
}
do
+
 
wget "$i"
+
decrypt_mode() {
/usr/bin/firefox -install-global-extension "$i"
+
  local name="$1"
done
+
  local key="${2:-}"
cd -
+
  local file="$STORE_DIR/$name"
 +
 
 +
  [[ -f "$file" ]] || {
 +
    echo "Erreur: cryptage introuvable: $name" >&2
 +
    exit 1
 +
  }
 +
 
 +
  if [[ -z "$key" ]]; then
 +
    key="$(read_secret "Entrer la clé de décryptage (masquée) : ")"
 +
  fi
 +
 
 +
  CRYPT="$(mdecrypt -q -k "$key" < "$file")"
 +
  export CRYPT
 +
  printf '%s\n' "$CRYPT"
 +
}
 +
 
 +
crypt_mode() {
 +
  local name="$1"
 +
  local mot="${2:-}"
 +
  local key="${3:-}"
 +
  local tmpfile
 +
 
 +
  if [[ -z "$mot" ]]; then
 +
    mot="$(read_secret "Entrer le mot à crypter (masqué) : ")"
 +
  fi
 +
 
 +
  if [[ -z "$key" ]]; then
 +
    key="$(read_secret "Entrer la clé de cryptage (masquée) : ")"
 +
  fi
 +
 
 +
  tmpfile="$(mktemp)"
 +
  trap 'rm -f "$tmpfile"' EXIT
 +
 
 +
  printf '%s' "$mot" > "$tmpfile"
 +
  mcrypt -q -k "$key" < "$tmpfile" > "$STORE_DIR/$name"
 +
}
 +
 
 +
list_mode() {
 +
  ls -1 "$STORE_DIR"
 +
}
 +
 
 +
main() {
 +
  local mode="${1:-}"
 +
  local name="${2:-}"
 +
 
 +
  ensure_env
 +
 
 +
  case "$mode" in
 +
    0)
 +
      [[ -n "$name" ]] || { usage; exit 1; }
 +
      decrypt_mode "$name" "${3:-}"
 +
      ;;
 +
    1)
 +
      [[ -n "$name" ]] || { usage; exit 1; }
 +
      crypt_mode "$name" "${3:-}" "${4:-}"
 +
      ;;
 +
    2)
 +
      list_mode
 +
      ;;
 +
    *)
 +
      usage
 +
      exit 1
 +
      ;;
 +
  esac
 +
}
 +
 
 +
main "$@"
 
exit 0
 
exit 0
 
#
 
#

Version du 30 juin 2026 à 11:35

Array

6/08/2026

Pour les débutants


>> Cours Linux débutant <<

Pour les experts

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 #!/usr/bin/env bash
  2 set -euo pipefail
  3 
  4 readonly STORE_DIR="$HOME/.wmcpt"
  5 
  6 usage() {
  7   cat <<'EOF'
  8 Usage:
  9   cryptmot 0 <nom_cryptage> [cle]
 10   cryptmot 1 <nom_cryptage> [mot] [cle]
 11   cryptmot 2
 12 
 13 Modes:
 14   0  Décrypte et affiche le contenu dans la variable CRYPT
 15   1  Crypte le mot saisi
 16   2  Liste les noms des cryptages
 17 EOF
 18 }
 19 
 20 need_bin() {
 21   command -v "$1" >/dev/null 2>&1 || {
 22     echo "Erreur: commande introuvable: $1" >&2
 23     exit 1
 24   }
 25 }
 26 
 27 read_secret() {
 28   local prompt="$1"
 29   local var
 30   printf '%s' "$prompt" >&2
 31   read -r -s var
 32   printf '\n' >&2
 33   printf '%s' "$var"
 34 }
 35 
 36 ensure_env() {
 37   need_bin mcrypt
 38   need_bin mdecrypt
 39 
 40   mkdir -p "$STORE_DIR"
 41 }
 42 
 43 decrypt_mode() {
 44   local name="$1"
 45   local key="${2:-}"
 46   local file="$STORE_DIR/$name"
 47 
 48   [[ -f "$file" ]] || {
 49     echo "Erreur: cryptage introuvable: $name" >&2
 50     exit 1
 51   }
 52 
 53   if [[ -z "$key" ]]; then
 54     key="$(read_secret "Entrer la clé de décryptage (masquée) : ")"
 55   fi
 56 
 57   CRYPT="$(mdecrypt -q -k "$key" < "$file")"
 58   export CRYPT
 59   printf '%s\n' "$CRYPT"
 60 }
 61 
 62 crypt_mode() {
 63   local name="$1"
 64   local mot="${2:-}"
 65   local key="${3:-}"
 66   local tmpfile
 67 
 68   if [[ -z "$mot" ]]; then
 69     mot="$(read_secret "Entrer le mot à crypter (masqué) : ")"
 70   fi
 71 
 72   if [[ -z "$key" ]]; then
 73     key="$(read_secret "Entrer la clé de cryptage (masquée) : ")"
 74   fi
 75 
 76   tmpfile="$(mktemp)"
 77   trap 'rm -f "$tmpfile"' EXIT
 78 
 79   printf '%s' "$mot" > "$tmpfile"
 80   mcrypt -q -k "$key" < "$tmpfile" > "$STORE_DIR/$name"
 81 }
 82 
 83 list_mode() {
 84   ls -1 "$STORE_DIR"
 85 }
 86 
 87 main() {
 88   local mode="${1:-}"
 89   local name="${2:-}"
 90 
 91   ensure_env
 92 
 93   case "$mode" in
 94     0)
 95       [[ -n "$name" ]] || { usage; exit 1; }
 96       decrypt_mode "$name" "${3:-}"
 97       ;;
 98     1)
 99       [[ -n "$name" ]] || { usage; exit 1; }
100       crypt_mode "$name" "${3:-}" "${4:-}"
101       ;;
102     2)
103       list_mode
104       ;;
105     *)
106       usage
107       exit 1
108       ;;
109   esac
110 }
111 
112 main "$@"
113 exit 0
114 #
115 #FLASH
116 #    URLs 
117 #
118 #    SAUVEGARDES 
119 #
120 #
121 #
122 #    UTILISATEUR 
123 #
124 #
125 #
126 #    DESINSTALLATIONS 
127 #
128 # Dans le cas où le Pc n est pas un portable, désactivation de la gestion des touches bleus.
129 #
130 #sudo update-rc.d -f hotkey-setup remove 
131 #
132 #Batterie
133 #
134 #sudo update-rc.d -f laptop-mode remove 
135 #
136 #Gestion du Raid
137 #
138 #sudo update-rc.d -f mdadm remove 
139 #sudo update-rc.d -f mdadm-raid remove 
140 #
141 #Modem
142 #
143 #sudo update-rc.d -f dns-clean remove 
144 #
145 #    Redémarrage des services 
146 #
147 #sudo systemctl restart sshd.service
148 #
149 #    COMPLEMENTS 
150 #
151 #Avec une clé SSH, effectuer en plus...
152 #
153 #Générer une clé
154 # ssh-keygen -t rsa
155 #Copier le fichier id_rsa.pub sur l'hôte distant et l'ajouter à ~/.ssh/authorized_keys
156 # ssh-copy-id identifiant@hôte
157 #
158 #sed -i 's/geteuid/getppid/' /usr/bin/vlc
159 #
160 #sudo apt-get update
161 #sudo apt-get upgrade
162 #sudo apt-get install libimobiledevice-utils
163 #idevicepair unpair
164 #idevicepair pair
165 #idevicepair validate
166 #
167 # Fond d'ecran en terminal:
168 #http://www.billyboylindien.com/ubuntu/ubuntu-devilspie.html
169 #https://www.torproject.org/fr/download/
170 #
171 # APT 
172 #

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

Système d'exploitation

Linux

Distribution

  • Qu'est ce qu'une distribution ?

Presentation

Cours-6.png

ISO

  • Tu connais les fichiers ISO ?
  • C’est le format magique qui permet de créer une copie numérique parfaite d’un CD ou DVD.
  • Que ce soit pour installer Windows, tester une distribution Linux, sauvegarder un jeu ou protéger un film, l’ISO garde non seulement les fichiers, mais aussi la structure du disque. 🔥
👉 Résultat : tu peux le graver sur un CD, un DVD ou même une clé USB, et ton PC pourra démarrer directement dessus comme si c’était l’original.
  • En gros, c’est l’outil ultime pour éviter les erreurs de copie et garder une sauvegarde nickel.
  • Un fichier ISO est aussi un fichier qui contient les données d'un système à installer.
  • On doit le graver sur un support comme une clef ou un CD ou DVD avant de le faire démarrer sur un ordinateur pour installer ce système.

Distributions

Centos

  • CentOS est la plus stable des distributions présentées. Cette stabilité s'explique par un développement particulièrement long de chaque version. Ce cycle permet entre autres une meilleure correction des bugs et des failles de sécurité.

Alma

  • AlmaLinux est une distribution Linux d'entreprise Open Source, détenue et gouvernée par la communauté, libre à tout jamais, axée sur la stabilité à long terme et fournissant une plateforme de production robuste. AlmaLinux OS est compatible avec RHEL®.

Debian

  • C'est une distribution Linux, composée presque exclusivement de logiciels libres (en effet, la plupart des microcodes — notamment ceux des fondeurs — et des firmwares, ainsi que la partie non-free des dépôts, ne sont pas libres).

Autre

ISO

  • Tu connais les fichiers ISO ?
  • C’est le format magique qui permet de créer une copie numérique parfaite d’un CD ou DVD.
  • Que ce soit pour installer Windows, tester une distribution Linux, sauvegarder un jeu ou protéger un film, l’ISO garde non seulement les fichiers, mais aussi la structure du disque. 🔥
👉 Résultat : tu peux le graver sur un CD, un DVD ou même une clé USB, et ton PC pourra démarrer directement dessus comme si c’était l’original.
  • En gros, c’est l’outil ultime pour éviter les erreurs de copie et garder une sauvegarde nickel.
  • Un fichier ISO est aussi un fichier qui contient les données d'un système à installer.
  • On doit le graver sur un support comme une clef ou un CD ou DVD avant de le faire démarrer sur un ordinateur pour installer ce système.

Cours

load PDF