Outils pour utilisateurs

Outils du site


informatique:technique:linux_rubrikabrac

Ceci est une ancienne révision du document !


GNU/Linux, base

Creat dimanche 20 décembre 2020 le dimanche 4 février 2018… Source : arch wiki arch linux @Axiome 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/ localctl_set-keymap_fr} 1 - affiche toutes les localisations disponibles 2 - affiche la localisation en cours 3 - détails sur un paramètre de la localisation en cours 4 - installer la locale fr avec utf8 5 - celles qui peuvent être installéesdnf search langpack la locale est configurée dans :

/etc/default/locale – on Ubuntu/Debian
/etc/locale.conf – on 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_sh_linenumbers_false_lang_en_in.utf8_export_lang} Pour le cas où la locale voulue n'est pas présente dans une fedora ou centos : 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'' 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} lang_sh_linenumbers_true} 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 lang_sh_linenumbers_true_-e_f1_-a_-r_f1} [ -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 ] lang_sh_linenumbers_true}

Boucle for

for 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): lang_sh_linenumbers_true}

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: 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: 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. 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 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

'^"${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 <
:qpour quitter le programme
:wpour enregistrer le fichier
:wqenregistrer et quitter
:xGaller à la ligne x
:vspfichier ouvrir un fichier dans une nouvelle cession verticale de l'affichage
:vsplitséparer la fenêtre en deux verticalement,
:ExploreArborescence des fichiers
help
=== Édition ===
Commande<Effet <
:———:——————————————————————————-
vsélectionner
xefface le caractère courant ou nx n caractères
ddefface 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
udéfaire
ctrl-rrefaire
/chercher
nrésultat suivant
[x]yycopier la les ligne[s] courante[s] (yank) et voir d pour les déclinaisons
pcoller la ligne copiée précédement lors de la commande yy ou de la commande dd
:r ficInsère le contenu de fic à partir de l'endroit actuel
:! cmdExécute la commande dans le terminal. Appuyer sur entrée pour revenir dans vi
:r! cmdLe 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
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
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 lui :
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
lang_sh_linenumbers_true_sudo_-u_apache_find_nuage_-type_d_-exec_chmod_750}

lang_sh_linenumbers_true} 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

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

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 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

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:

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 @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 : lang_sh_linenumbers_true_sudo_tar_-cvzfop_documents_nuage_nuage_apps_vps1_022023.tar.gz_srv_nuage_apps}

Exploitation des url - CURL

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

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é. lang_sh_linenumbers_true_btrfs_scrub_start_btrfs_srub_status}

informatique/technique/linux_rubrikabrac.1786153794.txt.gz · Dernière modification : de denis