====== GNU/Linux, base ====== Source : arch wiki ; arch linux Respecter la vie privée des autres Réfléchir avant d'utiliser le clavier De grands pouvoirs confèrent de grandes responsabilités. ===== Locale ===== [[https://docs.fedoraproject.org/fr/fedora/f29/system-administrators-guide/basic-system-configuration/System_Locale_and_Keyboard_Configuration/]] locale -a # affiche toutes les localisations disponibles localectl status # affiche la localisation en cours locale -k LC_TIME # détails sur un paramètre de la localisation en cours sudo localectl set-locale LANG=fr_FR.UTF-8 # installer la locale fr avec utf8 localectl list-locales # celles qui peuvent être installées dnf search langpack localectl list-keymaps ; localctl set-keymap fr # Installer un clavier type français standard la locale est configurée dans : '/etc/default/locale' – sur Ubuntu/Debian '/etc/locale.conf' – sur CentOS/RHEL et fedora Ou pour un utilisateur donné dans le '[[~/.bash_profile]]' Les différentes valeurs et variables qui peuvent être définies dans locale.conf sont données dans man locale(7) { LANG="en_IN.utf8" export LANG } Pour le cas où la locale voulue n'est pas présente dans une fedora ou centos : {{{code: lang="sh" linenumbers="False" sudo dnf install glibc-langpack-fr sudo localectl set-keymap fr }}} ===== Bash ===== Démarer le script avec #!/bin/bash Shell par défaut : chsh ou sinon en éditant le [[/etc/psswd]] (/usr/bin/nologin - éditer nologin.txt - ou /bin/false empêchera l'utilisation du shell); dans udduser.conf on peut écrire ceci ''DSHELL=/bin/bash ;'' ==== Environnement ==== ''printenv'' liste les variables d'environnement, et ''printenv HOME spécifiquement le contenu de $HOME.'' Ouvrir un sous-shell se fait avec '''bash'''. En sortir avec CTRL+d ''.''[[bashrc|''bashrc'']] sert à définir les variables spécifiques au bash. ''.profile'' fait la même chose mais n'est pas spécifique à bash. Après modif de ces fichiers faire ''source fichier'' PS1= définition du prompt = environnmenet visible. On peut la fixer, e.g : PS1="\u dans \w >" affichera le prompt comme suit : id_utilisateur dans rep_courant >. Actuellement ''PS1=[\u@\h \W]\$'' éfinir un environnement, e.g. japonais : ''alias ja="TZ=Asia/Tokyo LC_ALL=ja_JP.UTF-8 LANG=ja_JP.UTF-8"'' ==== Paramètres ==== # Lire des paramètres et les restituer echo $0 ou echo $1 bref ''echo $n'' ou encore ''echo $*'' $x : paramètre x ; $# nbre d'argument ; $@ : liste des arguments Valeur par défaut : ${nom_var:-valeur} Contrôler la présence d'un argument : ${nom_var:?message} {{{code: lang="sh" linenumbers="True" #!/bin/bash echo "Il y a $# argument(s)" PREM=${1:-vide} ARG1=${1:?"Le premier argument ne peut pas être vide !"} echo "Le premier est : $PREM" }}} La ligne 4 utilise la syntaxe qui permet de contrôler l'existence du premier argument. Très bon article sur les variables : https://abs.traduc.org/abs-fr/ch04s04.html Pour tester une option : ''if [[ -o login ]]; then; print yes; else; print no; fi'' Cette commande teste sir l'option login est active pour le shell en cours. Avec zsh il faut un double crochet au lieu d'une simple paire de crochets. Ça permet l'utilisation de && ou || comme opérateurs logiques. ==== Demander une saisie ==== ''read -p 'Entrez le code de désamorçage de la bombe (vous avez 5 secondes) : ' -t 5 -n 5 nom -s'' p pour le prompt ; t pour limiter le temps de saisie ; n pour limiter le nombre de caractères ; s pour ne pas afficher ce qui est saisi ==== calcul ==== let "a = 2" ; let "b = 5" ; let "c = a + b" l'addition : + ; la soustraction : - ; la multiplication : * ; la division : / ; la puissance : ** ; le modulo (renvoie le reste de la division entière) : %. Comme en c on peut contracter la commande : let "a *= 3" est équivalent a let "a = a * 3" ==== Tableau ==== Tableau=('valeur0' 'valeur1' 'valeur2') ==== Identification ==== Être par exemple apache sans entrer le mdp d'apache : sudo su --shell /bin/bash --login apache ==== Tests ==== [ expr ] ou test expr ; 0 si «expr» est vrai , et 1 si faux. [ e1 -a e2 ] vrai si e1 ET e2 sont vraies ; e1 && e2 [ e1 -o e2 ] vrai si e1 OU e2 sont vraies ; e2 [ ! e1 ] vrai si e1 fausse {{{code: lang="sh" linenumbers="True" [ -e f1 -a ! -r f1 ] # vraie si f1 est un fichier et qu'il n'est pas accessible en lecture }}} [ -n chaine ] vraie si chaine est une chaîne de caractères non vide ( -z pour savoir si elle est vide) [ e1 \> e2 ] vraie si e1 est supérieure à e2 (échaper le ">" ou "<" vu qu'ils ont une autre signification pour shell ; pas nécessaire avec le test étandu : . Par contre [ 32 \> 200 ] est vraie car compare les deux chaînes de caractère «32» et «200», et non pas les nombre [ 32 -gt 200 ] {{{code: lang="sh" linenumbers="True" #!/bin/bash # Y a t-il au moins deux arguments [ $# -gt 1 ]; echo $? }}} ==== Boucle for ==== f''or fichier in $( ls /repertoire/*.sql ) ; do psql -d bdd < "${fichier}" ; done'' ===== Définir des variables du système ===== ==== Globally ==== Most Linux distributions tell you to change or add environment variable definitions in /etc/profile or other locations. Keep in mind that there are also package-specific configuration files containing variable settings such as /etc/locale.conf. Be sure to maintain and manage the environment variables and pay attention to the numerous files that can contain environment variables. In principle, any shell script can be used for initializing environmental variables, but following traditional UNIX conventions, these statements should be only be present in some particular files. The following files should be used for defining global environment variables on your system: ''/etc/environment,'' ''/etc/profile'' and shell specific configuration files. Each of these files has different limitations, so you should carefully select the appropriate one for your purposes. * ''/etc/environment'' is used by the pam_env module and is shell agnostic so scripting or glob expansion cannot be used. The file only accepts variable=value pairs. See pam_env(8) and pam_env.conf(5) for details. Global configuration files of your shell, initializes variables and runs scripts. For example Bash#Configuration files or Zsh#Startup/Shutdown files. * ''/etc/profile'' initializes variables for login shells only. It does, however, run scripts and can be used by all Bourne shell compatible shells. In this example, we add ~/bin directory to the PATH for respective user. To do this, just put this in your preferred global environment variable config file (/etc/profile or /etc/bash.bashrc): {{{code: lang="sh" linenumbers="True" # If user ID is greater than or equal to 1000 & if ~/bin exists and is a directory & if ~/bin is not already in your $PATH # then export ~/bin to your $PATH. if grep -o $HOME/bin) then export PATH="${PATH}:$HOME/bin" fi }}} ==== Per user ==== ''$(Id -u) ou pour connaître son groupe $(id -g'' ) Note: The dbus daemon and the user instance of systemd do not inherit any of the environment variables set in places like ~/.bashrc etc. This means that, for example, dbus activated programs like Gnome Files will not use them by default. See Systemd/User#Environment variables. You do not always want to define an environment variable globally. For instance, you might want to add /home/my_user/bin to the PATH variable but do not want all other users on your system to have that in their PATH too. Local environment variables can be defined in many different files: * ~/.pam_environment is the user specific equivalent of /etc/security/pam_env.conf [2], used by pam_env module. See pam_env(8) and pam_env.conf(5) for details. User configuration files of your shell, for example Bash#Configuration files or Zsh#Startup/Shutdown files. * ~/.profile is used by many shells as fallback, see wikipedia:Unix shell#Configuration files. To add a directory to the PATH for local usage, put following in [[~/.bash_profile :]] ''export PATH="${PATH}:/home/my_user/bin"'' To update the variable, re-login or source the file: {{{code: lang="sh" linenumbers="False" $ source ~/.bash_profile. }}} ==== Graphical applications ==== Environment variables for GUI applications can be set in xinitrc, or in xprofile when using a display manager, for example: {{{code: lang="sh" linenumbers="False" ~/.xinitrc export PATH="${PATH}:~/scripts" export GUIVAR=value }}} === Per session === Sometimes even stricter definitions are required. One might want to temporarily run executables from a specific directory created without having to type the absolute path to each one, or editing shell configuration files for the short time needed to run them. === XDG === Spécification des répertoires XDG : https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html In Arch Linux, this is defined by ''/etc/profile'', using a ''/etc/profile.d'' script. For Debian/Ubuntu, if there's a /etc/profile.d – create a similar script inside; if such a directory does not exist – edit /etc/profile itsef. ''export XDG_CONFIG_HOME="$HOME/.config"'' The /etc/environment file is parsed by pam_env, which treats it as simple name=value assignments. However, it also has /etc/security/pam_env.conf, which supports variable expansion and can be used for this purpose. You don't need to define it anywhere, unless you want to change the default. XDG Base Directory Specification clearly says: If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used. So it is redundant to define it to the default value. All compliant applications will already use $HOME/.config But, if you do want to change the default in a Debian/Ubuntu system, the best place is: For a system-wide change, affecting all users: /etc/profile For your user only: ~/.profile I've found that it works best to set environment variables via PAM. For modern Linux distros, this means /etc/environment or $HOME/.pam_environment (see man pam_env). You can also set them in /etc/security/pam_env.conf using a special syntax. Here is how I set my XDG variables in /etc/security/pam_env.conf. {{{code: lang="sh" linenumbers="False" XDG_CACHE_HOME DEFAULT=@{HOME}/.xdg/cache XDG_CONFIG_HOME DEFAULT=@{HOME}/.xdg/config XDG_DATA_HOME DEFAULT=@{HOME}/.xdg/data XDG_STATE_HOME DEFAULT=@{HOME}/.xdg/state }}} Previously I would set these variables in /etc/profile.d/custom.sh. However, some applications start before that file is read. Switching to the PAM method solved the issue for multiple applications that behaved this way. ==== Lancer des scripts ==== Pour lancer systématiquement un script au démarrage du système : /etc/rc.local ===== Traitement de textes ===== ==== Transposer une colonne en ligne : ==== ''bash -c "tr -s '\n' ' ' < ~/Documentos/Informatique/Materiel/Ordinateurs/amsi2020/logiciels_installes"'' ==== gawk ==== Récupérer la première colonne : ''gawk '{print $1}' lefichier.txt'' Récup la 1ière colonne pour en faire une ligne : ''cat col.txt | awk 'BEGIN { FS=":"; ORS=" "}{ print $1 }''' Le paramètre ORS stipule le séparateur des données, normalement un retour chariot, mais là ce sera un " ". === Compter les lignes @wc === Résultat : Nbre de lignes / Nbre de mots / nbre d'octets Avec l'option -m on obtient le nbre de caractères ==== Supprimer les doublons @uniq ==== ''uniq doublons.txt sansdoublons.txt'' -c donne le nbre d'occurences -d afficher uniquement les lignes qui ont des doublons ==== Couper avec @cut ==== ''cut premiereposition-secondeposition fichier.txt'' cut ne gère pas les accents ! Si premiereposition n'est pas présent cut prend le premier caractère. -d délimiteur dans le fichier ; -f le numéro du champ voulu, autre numéro de champ voulu ou alors -f -jusqu'audernierchamp ==== @Sed ==== === Changer quelque chose dans un fichier texte === Remplacer "memory_limit = 128M" par "memory_limit = 512M" dans le fichier /etc/php.ini {{{code: lang="sh" linenumbers="True" sudo sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php.ini }}} Ça peut aussi s'écrire ''sed -i "s/^mem.*128M$/g"'' si l'on veut supprimer la ligne il suffit de mettre «d» au lieu de "g". === Intégration de variables === {{{code: lang="sh" linenumbers="True" sed 's|'^"${HOME}"'||' ${HOME}.fic.rsync > ${HOME}.fic.rsync.sed; }}} Remplacer la valeur de $HOME, dans les lignes du fichier ${HOME}.fic.rsync qui commence par la valeur de $HOME, par une chaîne vide "", et placer le résultat dans le fichier ${HOME}.fic.rsync.sed === Caractères spéciaux === Significations particulières des caractères échappés utilisé avec @echo et @sed ''\n'' passe à la ligne ''\r'' renvoie le curseur en début de ligne ''\t'' tabulation ''\v'' tabulation verticale ''\b'' retour en arrière ''\a'' produit une alerte (sonore ou visuelle) ''\0xx'' Transcode en octal le caractère dont le code ASCII est 0nn, dans lequel nn est une suite de chiffres. ==== Éditeur VI @VIM ==== https://fr.wikibooks.org/wiki/Le_syst%C3%A8me_d%27exploitation_GNU-Linux/L%27%C3%A9diteur_de_texte_vi https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/42693-vim-lediteur-de-texte-du-programmeur la touche «inser» ou «i» pour taper du texte ; «esc» pour passer en mode commande Linux maitrisez l'administration du système p 182 Configuration : [[~/.vimrc]] === Les commandes === | Commande<| Effet <| |:---------|:-----------------------------------------------------------------------------| | :q | pour quitter le programme | | :w | pour enregistrer le fichier | | :wq | enregistrer et quitter | | :xG | aller à la ligne x | | :vsp | fichier ouvrir un fichier dans une nouvelle cession verticale de l'affichage | | :vsplit | séparer la fenêtre en deux verticalement, | | :Explore | Arborescence des fichiers | | | | | help | | === Édition === | Commande<| Effet <| |:---------|:-------------------------------------------------------------------------------| | v | sélectionner | | x | efface le caractère courant ou nx n caractères | | dd | efface la ligne courante ; dw et [x]d pour effacer un mot ou x lettres | | d0 et d$ | supprimer le début ou la fin de la ligne | | 0 et $ | aller respectiveent au début ou à la fin de la ligne | | u | défaire | | ctrl-r | refaire | | / | chercher | | n | résultat suivant | | [x]yy | copier la les ligne[s] courante[s] (yank) et voir d pour les déclinaisons | | p | coller la ligne copiée précédement lors de la commande yy ou de la commande dd | | :r fic | Insère le contenu de fic à partir de l'endroit actuel | | :! cmd | Exécute la commande dans le terminal. Appuyer sur entrée pour revenir dans vi | | :r! cmd | Le résultat de la commande est inséré à l'endroit du curseur | | :e fic | Éditer le fichier fic | | :e# | Commute entre les divers fichiers ouverts | ===== Installation de logiciels ===== sudo dnf install lame\* --exclude=lame-devel # pour installer tout ce qui peut aller avec lame, sauf son paquet de développement. ===== Gestion courante ===== mkdir /repparent/rep -p L'optioin -p permet de créer les répertoires parents qui n'existent pas. On peut impacter une liste particulière de répertoires ou fichiers avec des {} : ''chmod 2775 {attic,cache,index,locks,media,meta,pages,tmp}'' ==== Information sur les fichiers ==== Pour parcourir l'arborescence jusqu'à fichier en visualisant les permissions de chaque feuille {{{code: lang="sh" linenumbers="True" namei -l fichier }}} ==== Qui utilise quoi ? ==== ''lsof /quoi'' ''fuser -m /quoi'' Et pour savoir quel processus utilise le fichier ''ps -ef | grep fichier.txt'' {{{code: lang="sh" linenumbers="False" Réponse : processuid{c|e|f|r|m} c : répertoire courant. e : programme en cours d'exécution. f : fichier ouvert. f est omis par défaut. r : répertoire racine m : fichier projeté en mémoire, ou bibliothèque partagée. }}} Pas trop lisible et donc selon [[https://dyrk.org/2018/07/01/linux-trouver-le-ou-les-processus-qui-utilisent-un-fichier-dossier-ou-point-de-montage/|lui]] : {{{code: lang="sh" linenumbers="False" echo "mounting point / Path ";read item;ps -p `fuser -m $item 2>&1 |grep $item |xargs|cut -d':' -f2 |sed -e 's/[a-zA-Z]*//g' ` }}} NB : pour changer le propriétaire en fonction de l'utilisateur : sudo chown -R $(id -u):$(id -g) ==== Chercher @find ==== find + exec Supression des mp3 : ''find /mediatheque/multimedia/musiques -type f -name '*.mp3' -exec bash -c 'rm "${0}"' '{}' \;'' Changer le mod des fichiers : ''find .local/share/menus/ -type f -name *.desktop -exec chmod +x {} \;'' Supprimer certains fichiers et pas d'autres (supprime les *.py dans [[/migrations]] mais pas le fichier init.py ) : find . -path "*/migrations/*.py" -not -name "__init__.py" -delete && find . -path "*/migrations/*.pyc" -delete ---- dim. 31 janv. 2021 11:46:28 {{{code: lang="sh" linenumbers="True" sudo -u apache find nuage/ -type d -exec chmod 750 {} \; # Mais il faut garder un 755 pour nuage lui-même sinon on ne peux plus y entrer [centos@vps-56f82011 www]$ sudo -u apache find nuage/ -type f -exec chmod 640 {} \; }}} {{{code: lang="sh" linenumbers="True" #Convertir mp3 en ogg : #Le nbre 4 de q:a done la qualité, à choisir entre 1 et 10 pour ce codec, 10 étant la plus grande qualité find /mediatheque/multimedia/musiques -type f -name '*.mp3' -exec bash -c 'ffmpeg -i "$0" -c:a libvorbis -q:a 4 "${0/%mp3/ogg}"' '{}' \; #Supression des mp3 : find /mediatheque/multimedia/musiques -type f -name '*.mp3' -exec bash -c 'rm "${0}"' '{}' \; find Documentos/fichiers_de_travail/PolHyPro/compta/Banque/ -type f -exec bash -c 'chmod 755 "${0}"' '{}' \; }}} Exemple simple : trouver dans $HOME les fichiers de type pdf qui font plus de 100 ko et qui ont été modifiés dans les 7 derniers jours et les copier dans [[/tmp/pdf]] , ou, les fichier odt et les archiver mkdir [[/tmp/pdf]] ; ''find ${HOME} -iname "*.pdf" -size +100k -mtime -7 -exec cp {} /tmp/pdf ';' -o -iname "*.odt" -user denis -mtime 7 -exec tar -pczrf archives_odt.tar.gz'' ==== Gestion des droits ==== Ajouter soi-même à un groupe : {{{code: lang="sh" linenumbers="False" sudo usermod -aG groupe $(whoami) }}} ==== Gestion des processus ==== ctrl + z pour le mettre en pause === & === Il y a & en ligne de commande avec éventuellement une redirection de la sortie vers un fichier pour ne pas encombrer la console : find / -name toto.txt > sortie_find.txt === Entrées / sorties (file descriptor) === Entrée standard : ''stdin 0 ; redirection avec "<"'' Sortie standard : ''stdout 1'' Sortie des erreurs : ''stderr 2 ;'' Pour afficher le résultat du dernier processus ''echo $?'' = 1 si erreur on faux ''redirection simple ">" ou ajout ">>"'' Redirection vers un «trou noir» : ''>/dev/null'' Par exemple pour envoyer la sortie standard nulle part : 0> [[/dev/null]] (c'est la même chose que ci-dessus, mais pour le canal 0 pas la peine de préciser). On peut aussi faire 2> [[/tmp/erreur.log]] Transmission par tuyau (pipe) ou flux entre les processus avec "|" Ce référencer soi-même durant l'exécution : Here it is in batch script : "%0" ; Here it is in bash console : "$0" [ ] Tuer un @processus qui utilise le port 80 : à compléter.... === @nohup : Détacher le processus de la console === L'option&, bien qu'assez couramment utilisée, a ce défaut non négligeable : le processus reste attaché à la console, ce qui veut dire que si la console est fermée ou que l'utilisateur se déconnecte, le processus sera automatiquement arrêté. Si on veut que le processus continue, il faut lancer la commande via nohup. Cela s'utilise comme ceci : nohup commande Par exemple, voici ce que ça donne si on lance la copie via un nohup : $ nohup cp video.avi copie_video.avi nohup: ajout à la sortie de `nohup.out' La sortie de la commande est par défaut redirigée vers un fichiernohup.out. Aucun message ne risque donc d'apparaître dans la console. D'autre part, la commande est maintenant immunisée contre la fermeture de la console. Elle continuera de fonctionner quoi qu'il arrive (sauf si on lui envoie un kill, bien sûr). nohup est très utile par exemple lorsque vous vous connectez à un serveur. Imaginons que vous voulez lancer un programme (comme un serveur de jeu) : celui-ci s'arrêtera de fonctionner dès que vous vous serez déconnectés de la ligne de commandes du serveur. Vous n'allez pas rester connectés juste pour que le programme continue à fonctionner ! Heureusement, nohup vous préserve de ce problème. Le passer en tâche de fond après son lancement === @bg === pour le passer en tâche fond Liste des processus en arrière-plan @fg Pour passer le processus au premier plan === @jobs === Faire passer un processus en premier plan fg numéro où numéro est le numéro de processus fournit par jobs 8pas le numéro de PID mais celui d'identification de tâche d'arrière plan. ==== Arrêter un processus ==== ^C ; ^D ; sinon ^\ qui envoie SIGQUIT et génère un rapport dans un fichier «core» avec des information de déminage. ==== filtrage avec @grep ==== -r pour rechercher un texte dans tous les fichiers d'un répertoire, dans le cas où l'on ne sais pas dans quel fichier ce trouve ce que l'¡on cherche. -i pour ne pas tenir compte de la casse -n pour savoir à quel numéro de ligne se trouve le texte -v pour obtenir le complément de la recherche (par exemple le nombre de ligne ne contenant pas le critère de filtrage) Expressions régulières avec l'option -E . caractère qcq $ finit par ; ^commence par ? ce qui précède est optionnel () groupe d'expressions E.g : trouver tout ce qui commence par m et se termine par avi dans l'historique de commandes : grep "^m.*avi$" .bash_history @supression de tous les fichiers listés dans data/deleted.files qui comprend un fichier par ligne avec des lignes de commentaire commeçant par # (voir [[/var/www/doku/data/deleted.files]] : ''grep -Ev '^($|#)' data/deleted.files | xargs -n 1 rm -vf'' ==== Classement avec @sort ==== -o fichier-résultat fichieratrier -r tri inverse -R tri aléatoire -n trier des nombres ==== Charge du système ==== Voici des commandes pour vérifier l'usage processeur, ram, espace disque : ''top ou htop'' ''cat /proc/meminfo'' ''free -m'' ''df -h'' ''lsblk'' ==== Redirection ==== Diriger vers .... Pour les erreurs, il suffit de mettre un «2» devant le chevron > : commande > commande.log 2> erreursdelacommande.log Et si l'on veut les deux ensemble : 2>&1 === Diriger depuis === < et << E. g : saisir des nombre et les trier tant que l'on ne tape pas "fin" sort -n << fin ===== Fichiers distants ===== ==== @SFTP ==== ftp avec ssh @scp ''scp alice@src:RepSrc/f1 bob@dest:RepDst/f2'' ''scp /home/alice/f1 bob@dest:/home/bob/f1'' ==== @Wget ==== Utiliser wget pour corriger une iso mal téléchargée : http://www.damnsmalllinux.org/wiki/fixing_a_corrupted_iso.html {{{code: lang="sh" linenumbers="False" wget -c ftp://mirror2.tuxinator.org/mageia/iso/7.1/Mageia-7.1-Live-Plasma-x86_64/Mageia-7.1-Live-Plasma-x86_64.iso }}} wget -c --background pour reprendre un téléchargement interrompu et tâche de fond scp pour cp distant, mais ça ne fait pas plus que ssh ==== @Rsync ==== rsync --delete --backup-dir permet de déplacer les fichiers supprimés ( --delete) dans la source vers un répertoire spécifique sur la destination rsync -e "ssh -p port" pour passer ssh avec un port spécifique {{{code: lang="sh" linenumbers="True" rsync -aC --log-file='/tmp/rsynclog.log' --filter '- **/Trash' --exclude '**/.Trash' --filter '- **/cache*' --filter '- **/.cache*' --filter '- **/kulcsot' --filter '- **/Administration-Assurance*' /home/denis/ /media/sauvegardes/home/denis/ rsync -aC /home/denis/Documentos/Administration-Assurances-Banques/ /run/media/denis/cryptees/Administration-Assurances-Banques/ rsync -aC /mediatheque/multimedia/Photos /run/media/denis/cryptees/ # Avec un fichier de filtrage rsync -aCr --log-file='/tmp/rsynclog.log' --exclude-from=/tmp/filtre.txt /source/ /destination }}} Et dans ce cas le filtre d'exclusion filtre.txt : {{{code: lang="sh" linenumbers="False" # Exclusion des caches - **/.cache # Exclusion des poubelles - **/.trash }}} Format des log : https://newbedev.com/what-does-f-mean-in-rsync-logs == Accès distant == Pour sauvegarder depuis un serveur distant ===== Compter le temps sous linux ===== ==== @date ==== Modifier l'affichage de la date avec un "+". Par exemple : date "+le %a %d %B %Y à %H h %M min au %C ième s." Il est possible de récupérer la date d'un fichier : date -r [[~/.bashrc]] Définir la date : date -s ==== Exécuter une commande plus tard ==== ==== @at ==== par exemple : at 00:00 01/01/01 faitessonner.sh Le format de la date est anglais : mois/jour/annee exécuter la commande dans 5 minutes : at now +5 minutes ou +5 weeks etc... Pour arrêter at : ctrl d Pour avoir la liste des tâches en attente : atq Pour supprimer une tâches : atrm numéro (de tâche tel que listé par atq) ==== Faire une pause ==== sleep 10 secondes par défauts mais on peut préciser : m, h, d Pratique pour laisser le temps à une commande de s'exécuter avant d'enchaîner. NB : commande,commande1 éxécute les deux commandes. Mais commande && commande1 n'exécute la seconde que si la première l'est. ==== Exécuter une commande régulièrement @ ==== ==== crontab ==== Modifier /etc/cron.allow pour autoriser les utilisateurs à utiliser crontab options : u -< utilisateur , l liste des travaux , r supprimer, e pour éditer Contenu du fichier /etc/crontab initial SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: {{{code: lang="sh" linenumbers="True" # .------------ minute (0 - 59) # | .--------- hour (0 - 23) # | | .------ day of month (1 - 31) # | | | .--- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed }}} ==== Visualiser la charge du système ==== Graphiquement avec @tload ps aussi ou top pour avoir un ps dynamique (se ferme en tapant q) Pour top : f ajoute une colonne et F choisi la colonne de classement ; u filtre l'utilisateur ; k tue un processus ===== Copier une partition ou un disque ===== ==== Type de partition du répertoire ? ==== ''findmnt -no FSTYPE /home'' Sur quel disque ? ''findmnt -vno SOURCE /home/'' ==== @dd ==== Voir la commande @[[file:///mediatheque/bibliotheque/Informatique/OS/Linux/dd%20%5BWiki%20ubuntu-fr%5D.html|dd]] qui permet de faire des choses magiques. Un super tutoriel avec des trucs incroyables pour créer des disques virtuels, lire le bios et plus.... file:///mediatheque/bibliotheque/Informatique/OS/Linux/dd%20%5BWiki%20ubuntu-fr%5D.html ==== cp ==== Pour réduire le temps de copie utiliser les option suivantes : ''cp -iva --reflink=always'' ===== Compression et archivage ===== === tar === ''Tar [Options] [Fichier d'archives] [Fichier ou répertoire à archiver]'' Pour compresser nuage dans l'archive nuage_vps.tar.gz : ''sudo tar --atime-preserve --same-owner -cfvz ./nuage_data_vps_15022023.tar.gz "/srv/nuage_data"'' Pour compresser en excluant ce qui est dans [[/docs]] : ''tar cvzf project.tar.gz --exclude=/docs'' Pour extraire un fichier spécifique : ''tar -xz -f Musique.tar.gz "./musique/1.mp3"'' Rechercher ''tar tvzf fichier.tar.gz | grep superfichier.txt'' En utilisant l’option -r, tar ajoute des fichiers aux archives existantes, sans en créer une nouvelle, à condition qu'elle ne soit pas compressée :''tar rvf fichier.tar *.txt'' E.g : {{{code: lang="sh" linenumbers="True" sudo tar -cvzfop ~/documents/nuage/nuage_apps_vps1_022023.tar.gz /srv/nuage_apps }}} ===== Exploitation des url - CURL ===== {{{code: lang="sh" linenumbers="True" curl http://localhost:8080 }}} Nombreuses options et fonctionnalités dans le manuel. ====== Partition et systèmes de fichiers ====== Voir les partitions : ''cat /proc/partitions'' ou ''/proc/self/mountinfo'' MISE à jour du système ''sudo blockdev --rereadpt /dev/sde'' ou ''partprobe'' Des infos sur la partition : fdisk -l -u [[/dev/sdxx]] ===== @BTRFS ===== https://fedoramagazine.org/working-with-btrfs-general-concepts/ https://fr.linux-console.net/?p=22226 https://btrfs.readthedocs.io/en/latest/ Pour opérer sur le système de fichier, se mettre sur le répertoire de fichier. exemple : {{{code: lang="sh" linenumbers="False" lsblkperso /dev/sdd NAME LABEL SIZE FSUSED PARTTYPE FSTYPE MOUNTPOINT UUID sdd documents 931,5G 496G btrfs /mnt 18454f56-cdcf-4693-968a-98593c2739bd [denis@pcden mnt]$ cd /mnt [denis@pcden mnt]$ sudo btrfs subvolume create opt [denis@pcden mnt]$ sudo btrfs subvolume list /mnt ID 256 gen 1037 top level 5 path opt [denis@pcden mnt]$ sudo mount -t btrfs -o subvol=opt UUID=18454f56-cdcf-4693-968a-98593c2739bd /opt }}} === Snapshot pour sauvegarder === https://fedoramagazine.org/working-with-btrfs-snapshots/ https://archive.kernel.org/oldwiki/btrfs.wiki.kernel.org/index.php/Incremental_Backup.html Le problème c'est de les faire sur un disque externe : il faut d'abord créer un instantané local et envoyer cet instantané sur l'autre support. Possibilité d'utiliser [[/opt/btrbk-0.32.6/]] (https://digint.ch/btrbk/ ) mais utilise aussi des snapshot sur le même volume. Bilan de l'histoire : rsync ou cp ! == Problèmes == scrub vérifie l'arborescence, et reporte le résultat dans des fichiers sous [[/var/lib/btrfs/]] scrub ne peut être lancé que sur un système monté. {{{code: lang="sh" linenumbers="True" btrfs scrub start / btrfs srub status / }}}