Commandes du shell

De TwisterWiki

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

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)