Commandes du shell
Les redirections
0 = Stdin 1 = Stdout 2 = Stderr
Pour rediriger les flux de sorties standards sous Bash :
Redirige la sortie standard générée par la commande (stdout) dans fichier
commande 1> fichier
Redirige la sortie d'erreur standard généré par la commande (stderr) dans fichier
commande 2> fichier
Redirige stderr vers stdout
commande 2>&1
Redirige stdout et stderr dans fichier
commande &> fichier
Où commande est une commande du bash (telle que ls ou mkdir), ou un programme (vim ou emacs). Et fichier est un fichier quelconque.
Les variables
lors de l'exécution d'un script, des arguments sont affectés à des variables EX: fichier de commande = $0
arg1 = $1 $# = nombre total d'argument de $1 $x $* = affiche tous les arguments sauf $0 $$ = Pid du processus en cours $? = code de retour pour l'exécution 0=OK et 1=!OK $! = PID du dernier processus lance en tache de fond
Date d'installation d'un serveur
Il existe une commande, qui consiste à lister tous les fichiers de configuration du répertoire /etc et à prendre la date la plus ancienne.
Voici la commande à utiliser :
ls -lct /etc | tail -1 | awk '{print $6, $7, $8}'
Une autre solution consiste à afficher la date de création du système de fichiers à l'aide de la commande tune2fs. A lancer avec le compte root de la machine :
df / | awk '{print $1}' | grep dev | xargs tune2fs -l | grep create
Informations trouvées sur www.tux-planet.fr url:http://www.tux-planet.fr/connaitre-la-date-dinstallation-dun-systeme-linux/
Créer un fichier vide
- Il est parfois utile de pouvoir créer des fichiers vide.
- Il est possible de le créer avec des données aléatoires ou des 0.
les commandes suivantes créer un fichier comprenant 1000 bloc de 1k
dd if=/dev/zero of=[Fichier] bs=1k count=1000
dd if=/dev/urandom of=[Fichier] bs=1k count=1000
Grub2
grub-install /dev/sda
update-grub
Chroot
mount --bind /dev /chroot/dev mount --bind /sys /chroot/sys mount --bind /proc /chroot/proc
Modification du shell
chsh -s /bin/bash user chsh -s /bin/false user
Rsync
rsync -av --delete-during source destination rsync -av --delete-during /src/test/ /dest/test rsync -av --delete-during /src/test/ user@server:/dest/test
Tar distant
tar -czv / | ssh user@serveur "tar -xzv -C destination"
LSATTR
Les attributs
Ils sont au nombre de seize, tous identifiables par une lettre [ASacDdIijsTtuEXZ]
-A
La date de dernier accès n'est pas mise à jour (uniquement utile pour réduire les accès disque sur les portables)
-S
Le fichier est synchrone, les écritures dans le fichier sont immédiatement effectuées sur le disque. (équivalent à l'option sync de mount appliquée à un sous-ensemble de fichiers)
-a
Le fichier ne peut être ouvert qu'en ajout pour l'écriture (fichiers journaux, etc) Seule la redirection >> peut être utilisée, le fichier ne peut être supprimé. Seul l'utilisateur root ou un programme disposant des droits nécessaires peut changer cet attribut.
-c
Le fichier est automatiquement compressé avant l'écriture sur le disque, et décompressé avant la lecture.
-D
Le dossier est synchrone (cf: -S) (équivalent à l'option dirsync de mount sur un sous ensemble de dossiers) Utilisable à partir du noyau 2.5.19
-d
Le fichier ne sera pas sauvegardé par la commande dump
-I
Ne peut être fixé par chattr, uniquement listé par lsattr Indique que le dossier est indexé.
-i
Le fichier/répertoire ne peut être modifié, effacé, renommé ou lié symboliquement, pas même par root. Seul root ou un binaire possédant les droits nécessaires peut fixer cet attribut.
-j
EXT3 uniquement. Si le système de fichier est monté avec l'option "data=ordered" ou "data=writeback", toutes les données du fichier sont écrites sur le journal avant d'être écrites dans le fichier lui-même. Si le système de fichier est monté avec l'option "data=journal", toute les données de tous les fichiers sont déjà dans le journal, l'attribut est sans effet. Seul root ou un binaire possédant les droits nécessaires peut fixer cet attribut.
-s
Quand le fichier est détruit, tous les blocs de données libérés sont mis à zéro.
-T
Utilisable à partir de la version 2.5.46 du noyau. Pas trouvé plus d'infos pour le moment.
-t
Concerne la fragmentation. Ceci n'est pour le moment pas implémenté sur l'ext2 et l'ext3 à ma connaissance.
-u
Si le fichier est effacé, son contenu est sauvegardé, cela permet à l'utilisateur de demander sa restauration.
-E
Expérimental, permet de détecter une erreur de compression, ne peut être fixé par chattr, mais peut être listé par lsattr
-X
Expérimental, indique que les données brutes d'un fichier compressé peuvent être accédées directement. Ne peut pour le moment être fixé par chattr
-Z
Expérimental, donne des informations sur l'état d'un fichier compressé. peut être uniquement listé par lsattr
Liste des processus en train de swapper
Trouver sur ce site : http://northernmost.org/blog/find-out-what-is-using-your-swap/
#!/bin/bash # Get current swap usage for all running processes # Erik Ljungstrom 27/05/2011 SUM=0 OVERALL=0 for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do PID=`echo $DIR | cut -d / -f 3` PROGNAME=`ps -p $PID -o comm --no-headers` for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'` ; do let SUM=$SUM+$SWAP done echo "PID=$PID - Swap used: $SUM - ($PROGNAME )" let OVERALL=$OVERALL+$SUM SUM=0 done echo "Overall swap used: $OVERALL"
Touver le dossier contenant trop d'inodes
for i in /*; do echo -n $i " " ; find $i |wc -l; done | sort -n -k2
Virtualbox
- Agrandir un volume disque
VBoxManage clonehd ancien.vdi --existing nouveau.vdi
vboxmanage modifyhd /home/CHEMIN/VIRTUALBOX\VOTRE.vdi --resize 80000 (80Go)
ajouter un fichier de swap
Création du fichier
fallocate -l 1G /swapfile ou dd if=/dev/zero of=/swapfile bs=1024 count=1048576 chmod 600 /swapfile
activation du swap
dans /etc/fstab /swapfile swap swap defaults 0 0 swapon -a
Section comment faire
Comment augmenter un disque
On nous demande d'ajouter 50Go à la '/'
Nous supposons qu'il s'agit d'un serveur virtuel quelque soit le système de virtualisation
- installation de l'outil parted
- apt install parted
- Augmentation du disque de la VM via la console de virtualisation
- Faire reconnaître l'ajout d'espace par le système
- for i in /sys/class/scsi_device/*/device/rescan; do echo 1 > $i;done
- Augmenter la taille de la partition
- /sbin/parted ---pretend-input-tty /dev/${DEV} unit % resizepart ${PART} Yes 100%
- ${DEV}: correspond au disque sda,sdb,sdc, ...
- ${PART} : corresponds à la partition sur le disque 1,2,3
- exemple : /sbin/parted ---pretend-input-tty /dev/sdc unit % resizepart 4 Yes 100%
- Agrandir le systéme de fichier
- resize2fs /dev/${DEV}${PART}
- exemple: resize2fs /dev/sdc4
- Faire reconnaître l'ajout d'espace par le système
Comment augmenter un disque avec du LVM
- à venir
Comment lister les fichiers de plus de 7 jours
La commande find est très utile pour rechercher des fichiers
find ${mondossier} -type f -mtime +7 -exec ls -alh {} ';'
explication :
${mondossier} doit être remplacer par un chemin sur le disque dans lequel on veut faire une recherche
-type f : recherche des fichiers et non des dossiers
-mtime +7 : pour trouver les fichiers de plus de 7jours
-exec ls -alh {} ';' : permet d'afficher le résultat en utilisant la commande ls
Comment trouver les plus gros fichiers sur un disque ou dans un dossier
nous allons utiliser plusieurs commande afin d'obtenir le résultat recherché
- find : pour trouver des fichiers
- cut : permet de sélectionner ou couper des chaînes de caractère
- sort: permet de classé des chaînes de caractère
find ${mondossier} -type f -exec ls -alhgG {} ';' |cut -b14- |sort -h > /tmp/${monfichier_de_resultat.txt}
explication :
${mondossier} doit être remplacer par un chemin sur le disque dans lequel on veut faire une recherche
-type f : recherche des fichiers et non des dossiers
-exec ls -alhgG {} ';' : permet d'afficher le résultat en utilisant la commande ls en supprimant l'affichage du user et du groupe propriétaire des fichiers
| : pipe ou tube de redirection, redirige le résultat de la commande find en entrée de la commande suivante
cut -b14- : supprime les 14 premiers caractéres du résultat de la commande ls
sort -h : trie le résultat de la commande sort en affichant les K, M et G
> /tmp/${monfichier_de_resultat.txt} : redirige le résultat de la commande dans un fichier texte
Comment savoir si un processus écoute sur un port ou qui écoute sur le port xx
netstat -laputen |grep 443
netstat -laputen |grep apache2
netstat est un outils qui permet de voir les ports en écoute sur un serveur et les connexions sortantes également.
laputen l : a : p : programs u : udp t : tcp e : n: numerique
Comment faire si 'du' ne donne pas la même chose de 'df'
- Il se peut dans certains cas que le résultat de la commande 'df' ne donne pas la même chose que 'du'.
la commande 'df -h' remonte un disque utilisé à 100% et 'du -sch /*' dit qu'il reste 10Go par exemple pendant longtemps on a redémarrer les serveurs pour corriger ce problème d'espace à tord
que se passe-t-il ?
En réalité un ou des fichiers ont été supprimés du disque mais un process à gardé un verrou sur ces fichiers, le système de fichier ne libérera l'espace disque qu'une fois le processus redémarré.
Avec la commande 'lsof |grep deleted', nous allons voir tous les fichiers supprimés du disque mais qui ne le sont pas vraiment. Il faudra chercher les plus gros fichiers listés et regarder le process attaché à ces fichiers, il suffira alors de restart le process fautif
- commande lsof : cette commande permet de voir la liste de tous les fichiers ouvert, voici un exemple de résultat
Sous linux un fichier ouvert peut correspondre à un fichier de log, fichier texte ou bien un port (tcp ou udp) en écoute
lsof COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME authdaemo 1682 root mem REG 8,1 97928 9461998 /lib/ld-2.3.6.so authdaemo 1682 root mem REG 8,1 27576 3632634 /usr/lib/libltdl.so.3.1.4 authdaemo 1682 root mem REG 8,1 10392 9462011 /lib/libdl-2.3.6.so authdaemo 1682 root 2w FIFO 0,6 100645 pipe authdaemo 1682 root 3r FIFO 0,6 100646 pipe vmtoolsd 2834 root 3w REG 8,1 34973 1584253 /var/log/vmware-vmsvc.log apache2 9884 www-data 3u IPv6 868297 TCP *:www (LISTEN) apache2 9884 www-data 4u sock 0,5 868298 can't identify protocol apache2 9884 www-data 5u IPv6 868302 TCP *:https (LISTEN) apache2 9884 www-data 6u sock 0,5 868303 can't identify protocol apache2 9884 www-data 7r FIFO 0,6 868316 pipe apache2 9884 www-data 8w FIFO 0,6 868316 pipe apache2 9884 www-data 9w REG 8,1 927 1589286 /var/log/apache2/error.log
Exemple de fichier supprimés du disque mais avec un verrou et donc toujours présent sur le système de fichier mais pas sur le disque
lsof |grep deleted COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME mysqld 3295 mysql 5u REG 8,1 0 434643 /tmp/ibcnLlAD (deleted) mysqld 3295 mysql 6u REG 8,1 1048 471482 /tmp/ib2okDoJ (deleted) mysqld 3295 mysql 7u REG 8,1 0 472164 /tmp/ib0bB1cP (deleted) mysqld 3295 mysql 8u REG 8,1 0 472165 /tmp/ibMnGIuV (deleted) mysqld 3295 mysql 12u REG 8,1 0 665190 /tmp/ibNxRZl2 (deleted) apache2 9773 root 19w REG 8,1 0 1581155 /var/run/apache2/ssl_mutex (deleted) apache2 9831 www-data 19w REG 8,1 0 1581155 /var/run/apache2/ssl_mutex (deleted) apache2 9832 www-data 19w REG 8,1 0 1581155 /var/run/apache2/ssl_mutex (deleted)