Editer Services

Avertissement



Je suis débutant.

Voir aussi clients légers (boot distant), x-org et un bureau, xming, iptables, http://formation-debian.via.ecp.fr/ .

Commandes de base



ALT+F1, F2, F3... ouvrir une nouvelle session.

Lorsqu'on est connecté avec putty, impossible d'utiliser ALT+F1, mais on peut utiliser l'utilitaire "screen", pour ouvrir screen -S nom_de_la_session. Pour sortir, screen -r ou "ctrl+a+d". Pour voir la liste screen -list, fermer un screen screen -X -S numero_du_screen quit (ou simplement exit depuis l'intérieur).


Listes de commandes diverses sur linux et VI

v : selection.
p : coller
yy : copier la ligne courante
u : annuler.
a : ajouter derrière un mot.
tab n : changer de tab
tab e : nouvelle tab.
R : remplacer.
r : remplacer juste une lettre.
%s/a_remplacer/remplacement/g : rechercher/remplacer dans un fichier.
/motif_a_chercher : recherche le motif dans le ficher. "P" pour précédent et "n" pour suivant.

Si certaines commandes ne fonctionne pas, essayer de les lancer avec leur chemin complet. Par exemple /sbin/shutdown au lieu de shutdown. On peut ajouter le répertoire à ceux qui sont utilisés par défaut pour lancer des programmes avec export PATH=$PATH:/sbin. Pour ajouter le répertoire en cours, utiliser export PATH=$PATH:`pwd`.

Obtenir de l'aide



man [texte] : Affiche le manuel concernant [texte]. [texte] peut être une ligne de commande, un programme, le nom d'un fichier ou un sujet général. Manuel stocké dans /usr/share/man.

apropos [texte] : Affiche toutes les pages du manuel en relation avec [texte].

info [texte] : Un autre manuel. Retour arrière et espace pour naviguer, tab pour aller sur un lien, q pour quitter. Dans /usr/share/info.

whatis [texte] : Affiche la description des pages du manuel.

[programme] --help : Le programme affiche son aide interne. Tapez " | more" pour afficher page par page.

Quoi utiliser ? Whatis explique en une phrase ce que fait un programme. --help donne toutes les options du programme tout en étant moins détaillé que le manuel. Dans l'ordre, je dirais whatis, puis --help, et enfin man.

Invite de commande


bash : "Bourn Again Shell", interpréteur de commande exécutant les commandes saisies au clavier ou présentes dans un fichier. Possède quelques commandes internes, sinon il va les chercher dans les répertoires désignés par la variable $PATH.

Historiquement, on utilisait plusieurs périphériques différents pour afficher les commandes et les erreurs. Par exemple, les commandes sortaient sur un écran et les erreurs sortaient sur une imprimantes. On les appelle "Sortie standard" et "Erreur standard".

Par défaut, on redirige vers l'écran mais on peut aussi rediriger les résultats d'une commande dans un fichier, en utilisant un chevron ">". Par exemple, "ls > test" créera un fichier "test" où sera mis le contenu de la commande "ls" (la liste des fichiers du répertoire en cours). Si le fichier existe déjà, son contenu sera remplacé. Deux chevrons, ">>", permettent d'ajouter les infos au fichier au lieu de les remplacer.

On peut également choisir de ne rediriger que les erreurs. "ls 2> test" redirige uniquement les erreurs vers le fichier test.

On peut rediriger vers des interfaces, par exemple un écran. "ls 2>/dev/tty2" renvoie les erreurs de le vers le deuxième terminal.

Un chevron vers la gauche "<" demande au programme de lire depuis un fichier.

Deux chevrons vers la gauche "<<" suivis d'un texte demandent au programme de lire depuis le clavier jusqu'à la saisie du texte qu'on a indiqué plus tôt. Par exemple, tapez "cat << FIN", du texte, puis à la ligne suivante "FIN". Le texte tapé s'affiche. Ou bien "sort << FIN", puis des nombre à chaque ligne, puis "FIN".

Shell permet de faire communiquer plusieurs programmes entre eux par un système de "tuyaux", "pipe" "|". La sortie d'un programme est alors envoyée en entrée d'un deuxième programme. Par exemple "ls | more" : liste le contenu d'un fichier, envoie le résultat à "more", puis more nous l'affichera à l'écran. mknod ou mkfifo pour créer des tuyaux.

Pour créer un tuyau, créer d'abord le fichier tuyau : "kfifo pipe", puis faire passer une commande dedans : "ls -l > pipe1", puis dans un autre terminal créer la sortie : cat < pipe.

On peut créer des variables avec bash. Par exemple, taper "a=1" puis "echo $a". La variable ne sera pas partagée avec les autres terminaux. On peut partager une variable d'environnement avec la commande export, par exemple "export http_proxy=http://10.16.0.255:3128".

Couper/coller : Ctrl+u coupe la ligne en train d'être tapée. Ctrl+y pour la coller.

Comptes utilisateur


On peut avoir plusieurs comptes sur un même système, ce qui permet de restreindre l'accès à tel fichier à tel compte. On peut classer les utilisateurs par groupes pour les gérer plus facilement. les utilisateurs sont listés dans "/etc/passwd", "/etc/shadow" et "/etc/group". Dans le dossier "/etc/skel/" on a un modèle de répertoire "home".

whoami : Pour connaitre le compte qu'on utilise actuellement.

who : Pour voir la liste des connectés.

exit : Pour se déloguer.

adduser : Script pour créer un nouvel utilisateur ou l'ajouter à un groupe (adduser nomdeluser group).

useradd : Commande pour créer un utilisateur (sans son répertoire home par défaut). On utilise souvent useradd -d /dev/null -g nom_du_groupe -s /bin/false nom_de_l_user pour créer un groupe qui sera utilsié par un programme (pas de répertoire "home", pas d'invite de commande par défaut).

userdel : Supprime un utilisateur.

addgroup ou groupadd : Pour ajouter un nouveau groupe.

groupdel : Pour supprimer un groupe.

usermod : Pour modifier un compte utilisateur, le mettre dans plusieurs groupes, changer son répertoire home, etc.

su : Switch User, pour utiliser un autre compte.

history : Pour connaitre les dernières commandes tapées par un utilisateur. Il est possible de rappeler une ancienne commande en tapant "![numéro de la commande]". Pour voir l'historique descommandes passées avec sudo : grep -E '^sudo' ~/.bash_history

passwd : Changer son mot de passe.

chpasswd : Change le mot de passe d'un autre utilisateur. echo utilisateur:mot_de_passe | chpasswd

Système


uname = "Unix name", donne des informations sur le système, par exemple sa version. uname -a pour tout voir.

cat /etc/issue = Pour voir la version de debian sur laquelle on est.

dmesg = Voir l'historique des messages du démarrage de la machine.

cat /proc/version = Affiche le contenu du fichier "version" situé dans le répertoire "proc". Ce fichier contient des infos sur le système. Voir aussi les fichiers "/etc/issue" (affiché lors d'une connexion console), "/etc/issue.net" (message affiché lors d'une connexion telnet) et "/etc/motd" (message of the day).

hostname = Affiche ou change le nom donné au système jusqu'au prochain reboot. Se déloguer puis se reloguer pour afficher le nom à l'invite de commande. Pour changer le nom définitivement, modifier "/etc/hostname" et "vi /etc/hosts".

env = Affiche les variables d'environnement.

unset = unset nom_de_la_variable pour faire disparaitre une variable.

ps = Affiche les processus en cours. "-e" pour afficher tous les processsus, "-l" pour le format long. "ps aux" pour tout voir.

kill = Tue un processus.

killall = Tue tous les processus portant le nom spécifié. "killall test".

xkill = Tue un processus en mode graphique.

free = Affiche la mémoire libre.

shutdown : Arrête le système, "shutdown -h now". "-r +5 arrête le système dans 5 minutes.

Réseau


ip : Affiche les interfaces réseau, règle la table de routage, les tunnels... ip link show pour voir les interfaces réseaux. ip address add 207.46.130.108 dev eth0 pour donner une ip temporaire à une interface (modifier "/etc/network/interfaces" pour que ça soit permanent sous Debian, "/etc/rc.d/rc.inet1.conf" sous Slackware, "/etc/sysconfig/network-scripts/ifcfg-" sous Centos.).

ifconfig : "interface config", affiche différentes infos sur les interfaces (addresse IP, addresse mac...). Sous Debian les fichiers de config se trouvent dans "/etc/network/interfaces". Il faut ensuite relire ce fichier, soit avec "/etc/init.d/networking restart", soit "ifdown" (cf plus bas) puis "ifup" suivi du nom de l'interface à chaque fois. ifconfig -a pour voir toutes les interfaces. On peut aussi faire service network start.


route : Affiche/modifie la table de routage. On peut ajouter une route temporaire avec la commande route add -net 172.17.250.0/24 gw 172.17.10.141 dev eth0 (utiliser le fichier "/etc/network/interfaces" pour que ça soit permanent). On peut donc ajouter une passerelle en 1.2.3.4 avec route add -net 0.0.0.0/0 gw 1.2.3.4 dev eth0 (ou "default" à la place de "0.0.0.0/0"). Attention, c'est toujours une route vers un réseau, pas une ip. "route -n" n'essaie pas de résoudre les noms d'hôte et va plus vite.

netstat : Affiche différentes infos concernant le réseau. "netstat -plantu" affiche les programmes écoutants. "netstat -r" les routes.

arp : Affiche la table arp.

host : Pour résoudre un nom de domaine.

nslookup ou dig : Permet de résoudre un nom de domaine en donnant l'adresse du serveur DNS utilisé. Cache dns dans "/etc/hosts", liste des serveurs de noms à utiliser dans "/etc/resolv.conf".

ifdown : Désactive une interface réseau. 'ifdown eth0'.

ifup : Réactive une interface réseau. 'ifup eth0'.

/etc/init.d/networking restart

/etc/apt/sources.list : Fichier indiquant la source des dépots de fichier sous Debian.

Le fichier par défaut de Debian Squeeze :

# Debian Squeeze Main repo deb http://http.us.debian.org/debian/ squeeze main contrib non-free deb-src http://http.us.debian.org/debian/ squeeze main contrib non-free # Squeeze-updates deb http://http.us.debian.org/debian/ squeeze-updates main contrib non-free # Debian Stable Security deb http://security.debian.org/ squeeze/updates main contrib non-free deb-src http://security.debian.org/ squeeze/updates main contrib non-free


Pour le proxy http sous Debian : export http_proxy=http://10.16.0.255:3128. Attention, si vous avez fait une net install et déjà entré un proxy, apt-get ne marchera pas avec 2 proxy. Vous devrez le supprimer du fichier conf dans "/etc/apt".

Pour les serveurs dns sous Debian, dans le fichier "/etc/resolv.conf".

Un fichier "/etc/sysconfig/network-scripts/ifcfg-" sous Centos :

DEVICE=eth0 IPADDR=208.164.186.1 NETMASK=255.255.255.0 NETWORK=208.164.186.0 BROADCAST=208.164.186.255 ONBOOT=yes BOOTPROTO=none USERCTL=no



Pour redémarrer le service réseau, /etc/init.d/networking restart sous Debian, "/etc/init.d/network restart sous Centos.

Sous Slackware, il existe le script netconfig.

Naviguer dans l'arborescence et manipuler des fichiers


Dans linux, tout est fichier, que ça soit un fichier texte, un répertoire (fichier contenant une liste de fichier), un disque, un programme... Un fichier peut exister à plusieurs endroits à la fois ("lien dur"). Le dossier racine, qui contient tous les dossiers, est "/".

Chaque utilisateur possède un dossier personnel dans "/home", à l'exception de l'utilisateur "root" qui possède le dossier "/root".

Dans chaque dossier se trouvent les fichiers "." (désigne le dossier lui-même, pratique pour programmer) et ".." (désigne le dossier parent).

pwd : Print Working Directory, affiche le dossier où on se trouve.

cd : Change Directory, pour se déplacer vers un dossier. Attention au "/" du début : se déplacer vers "/home" nous amène dans le dossier "home" à la racine. Se déplacer dans "home" nous amène dans le dossier "home" du répertoire courant. On peut également se déplacer en utilisant des variables. Saisi sans argument, "cd" nous amène au dossier "home" de l'utilisateur.

cp : copie un fichier. "-R" récursif, "-p" pour conserver les droits.

find : Recherche un fichier sur le disque selon différents critères, par défaut lance une recherche récursive (dans chaque sous-dossier du dossier en cours). Recherche le nom "testfichier" dans le répertoire "home" : "find /home -name testfichier -print". Recherche les fichiers modifiés il y a ...48 heures : "find /home -mtime 2". ...moins de 72 heures : "find /home -mtime -3". ...plus de 48 heures "find /home -mtime +2". Affiche les infos sur les fichiers "find /home -mtime +2 | xargs stat". Recherche les ficheirs commençant par "a" dans le répertoire courant : "find . -name "a*"". L'option par défaut de find est "-print", qui affiche le résultat de la recherche à l'écran. On peut utiliser "-exec" pour lancer une commande sur la liste des fichiers supprimés. Par exemple "-exec rm", suivi de "{}\ ;". Donc, pour supprimer tous les fichiers commençants par a dans le dossier en cours :
"find . -name "a*" -exec rm '{}' \;"

locate : Cherche un fichier par son nom en utilisant un index. On peut mettre l'index à jour avec updatedb (màj tous les jours à minuit). Si l'index n'a pas été mis à jour depuis la cération du fichier recherché, locate ne le trouvera pas.

mlocate : Cherche un fichier par son nom en utilisant un index. Met son index à jour de façon plus intelligente, moins lourde, en se rappelant la dernière date de modification d'un dossier.

cat : Affiche le contenu d'un fichier.

head : Affiche les 10 premières lignes d'un fichier.

tail : Affiche les 10 dernières lignes d'un fichier, pratique pour voir un log (le sens n'est pas inversé, la dernière ligne en bas). tail -f suivi du nom du log pour suivre l'évolution d'un log en temps réel.

diff : Compare 2 fichiers. "diff fichier fichier2"

touch : Créé un fichier vide.

rm : Supprime un fichier ou un répertoire. Utiliser l'argument "-r" ("récursif") pour supprimer un répertoire non-vide.

mkdir : Créé un répertoire.

mv : Déplace/renomme un fichier (mv anciennom nouveau nom).

rmdir : Supprime un répertoire.

ls : Liste les fichiers du répertoire en cours ou du répertoire spécifié. Indique les autorisations attribuées aux fichiers. Pour afficher sous une forme longue (-l) et ne rien cacher (-a, ls cache par défaut les fichiers commençants par un point), utiliser "ls -la". ls propose aussi un affichage couleur avec l'argument "color=auto" et un affichage récursif avec "-L".
Sous forme longue, les fichiers apparaissent comme ceci :

drwxr-xr-- 3 root root 4096 mars 12 09:41 test

"d"=directory, indique qu'il s'agit d'un dossier ("l" indique un raccourci, "c" un fichier spécial, "p" un tuyau, "-" un fichier classique...). Le premier "rwx" indique les autorisations du propriétaire du fichier (read, write, execute). "r-x" indique les permissions du groupe propriétaire du fichier. "r--" indique les permissions des autres utilisateurs. Le chiffre "3" donne le nombre de lien dur existant pour ce fichier (lien dur=même fichier mais avec autre nom/autre emplacement, effacer tous les liens durs pour effacer le fichier). Le premier "root" indique le propriétaire du fichier, le second "root" indique le groupe propriétaire. "4096" indique sa taille, "mars 12 09:41" indique sa date de dernière modification et, finalement, "test" indique le nom du fichier.

source : Permet d'exécuter un fichier, même s'il n'est pas exécutable. On peut remplacer "source" par .. Par exemple, pour lancer un fichier du répertoire courant : . ./script_a_lancer


chmod : Change les droits du fichier. chmod u+w chemin_du_fichier donne le droit au propriétaire de modifier le fichier. "chmod g+r" donne le droit au groupe propriétaire de lire le fichier. On peut aussi utiliser des chiffres (méthode octale) : 1=droit d'exécution, 2=droit d'écriture, 4=droit de lecture. Le premier chiffre indique les droits du propriétaire, le 2e les droits du groupe, le 3e les droits de tous les autres utilisateurs. Ainsi, 142 indique que le propriétaire peut exécuter, le groupe peut lire, tout le monde peut modifier. On peut additionner les chiffres : 750 indique que le propriétaire peut tout faire, que le groupe peut lire et exécuter.

Attention, chmod ne marche pas avec fat32, les permissions doivent s'appliquer sur tout le disque lorsqu'on le monte. Voir fstab.

Un "T" à la fin de la liste des permissions ("Sticky Bit") indique, pour un dossier, qu'on peut modifier les fichiers qu'il contient, mais pas les supprimer. Pour un fichier, il indique qu'il doit rester en mémoire après avoir été modifié.

chown : change le propriétaire d'un fichier (chown nomuser nomfichier, chown nomuser:nomgroup nomfichier).

file : Indique le type d'un fichier (Fichier texte ? Fichier compressé ? etc...).


Disques et partitions


Les disques et partitions ont des noms évocateurs tels que sdb3, il s'agit ici d'un disque SATA (sd), du 2e disque du pc (b), et de la 3e partition de ce disque. Ils peuvent être aussi désignés par un numéro unique au monde (Universal Unique Identifier) se présentant sous la forme 110E8400-E29B-11D4-A716-446655440000.

sda1, sda2, sda3 et sda4 sont des partitions primaires, sda5 sera une partition secondaire (ou "logique", partition dans une partition étendue).


fdisk : affiche, manipule la table de partition d'un disque. fdisk -l pour afficher la table. Permet d'identifier le système de fichier d'un nouveau disque qu'on vient de brancher.

cfdisk : formater un disque.

lsblk : affiche les disques.

mount : monte un disque (càd associe un disque à un fichier), affiche les disques montés, vérifie si un dossier est un disque monté. Pour monter un disque fat32 (vfat), utiliser "mount -t vfat /dev/[nom du disque, par exemple hda1] /mnt/[dossier où on veut le monter, peut être n'importe lequel, en créer un pour un disque qu'on prévoit de laisser brancher]". Peut servir pour donner des quotas. Exemple : mount -t ntfs /dev/sda1 /mnt/maclefusb.

umount : Démonte un disque monté dans le dossier /mnt "umount /mnt".

ls : liste les fichiers du répertoire courant ou du répertoire précisé. ls -l /dev/disk/by-uuid permet d'afficher le nom des partitions des disques associé à leur UUID.

blkid : Affiche l'UUID de tous les disques.

df : Disk free, indique l'espace libre / occupé par les systèmes de fichier. "-h" pour que ça soit plus clair.

du : Disk usage, évalue l'espace disque occupé par des fichiers. Dans un répertoire, faire "du . -h" par exemple. Un "du" sur root affichera la taille totale occupée par les fichiers, en mélangeant toutes les partitions. "du -s" pour éviter que tous les fichiers soient listés.

fsck : Vérifie la cohérence du système de fichier.

mdadm : Gère les volumes RAID. "mdadm -C /dev/md0 -l1 -n2 /dev/hda /dev/hdb" pour créer un volume RAID.

Utilitaires divers



more : More est un programme permettant d'afficher du texte page par page. Par exemple ls /etc|more affiche le contenu de "/" page par page.

less : Un peu similaire à more. Permet d'afficher ligne par ligne, de remonter, de rechercher dans le texte (avec la touche "/"). ls /etc|less

grep : Permet de filtrer. ls /etc|grep blue pour n'afficher que les fichiers contenant le mot "blue" dans /etc. Permet aussi de rechercher dans du texte si elle est utilisée toute seule : grep -r 'bonjour !' recherche "bonjour !" à l'intérieur de tous les fichiers du répertoire courant. cat /etc.samba/smb.conf | grep '^#' n'affiche que les lignes commençant par #. cat /etc.samba/smb.conf | grep '^[^#;]' affiche tout sauf les lignes commançant par # et ;. On peut l'utiliser seul pour rechercher un mot à l'intérieur de fichiers : grep -R recherche*.

sed : Permet de supprimer, remplacer des chaines selon un motif. "cat /etc.samba/smb.conf | sed 's/^#/*/g" affiche tout sauf les lignes commençant par #.

tr : Pour remplacer des caractères, peut utiliser des expressions régulières. tr "[A-Z]" "[a-z]" < /etc/passwd.

cut :Pour couper ce qui vient après.

wget : Télécharge un fichier. Ajouter --no-check-certificate pour forcer https même avec un mauvais certificat.

tar : Décompresse un fichier.

nmap : Scanner de port.

tcpdump : Ecoute une interface réseau, équivalent de wireshark.

dd : Copie bit à bit. Par exemple : "dd if=/dev/sda of=sect bs=512 count 1" copie les 512 premiers octets du disque (c'est à dire le mbr) et le met dans le fichier "sect".

hd : Ou "hexdump -C", affiche l'hexadécimal d'un fichier.

fg : Pour mettre au premier plan un programme envoyé en arrière plan. On peut préciser un numéro de job. Utiliser jobs -l pour voir les jobs actifs, stop pour les stopper.

apt-file : Cherche dans une liste contenant les fichiers de chaque paquet. apt-file search smbpasswd~ nous indique que le fichier "smbpasswd" est utilisé par le paquet "samba-common-bin".

Dossiers et fichiers utiles


/bin : Utilitaires systèmes (lister les fichiers, faire un echo, créer un répertoire).

/boot : Fichiers de démarrage.

/dev : Liste des fichiers spéciaux (périphériques...)

/etc : Fichiers de configuration du système et des logiciels.

/home : Contient les dossiers des utilisateurs. Peut contenir les sites web perso des utilisateurs.

/lib : Bibliothèques (GTK etc).

/lost+found : Fichiers retrouvés par fsck (utilitaire pour vérifier la cohérence du système de fichier).

/mnt : Dossier où on monte les disques.

/proc : infos sur le système et le noyau.

/root : répertoire de base de l'utilisateur "root".

/sbin : fichiers exécutables du système.

/srv : fichiers que l'on va donner au client, avec des sous dossiers genre "ftp", "rsync"... Parfois on met ses sites web ici.

/tmp : fichiers temporaires, sont effacés à chaque démarrage (se configure dans le fichier "/etc/rcS").

/usr : une sorte de "Program Files" qui devrait être en lecture seule. Ca concerne tous les programmes qui ne sont pas livrés avec le système en gros. Prend beaucoup de place. ("unix shared readable" ? Je sais plus d'où je sors ça mais je suis le seul d'internet à avoir cette acronyme...) On définit le plus souvent "usr" comme étant l'écronyme de "unix shared readable".

/proc/sys/net/ipv4/ip_forward : Indique si le système redirige les paquets ou non. echo 1 > /proc/sys/net/ipv4/ip_forward pour mettre (jusqu'au prochain reboot) en mode routeur.

/var : logs, fichiers qui changent souvent de taille, liste d'attente de l'imprimante, fichiers temporaires qui ne doivent pas être effacés au reboot... Bizarrement Apache y met par défaut les sites internet (/var/www).

/etc/fstab : Liste les disques montés au démarrage, leur point de montage, etc.

Exemple pour monter du fat32 avec les droits 775 :
/dev/sda1 /srv/www/chateau/hall vfat rw,noatime,uid=1007,gid=1008,user,umask=002 0 0

Pour NTFS, il est possible d'utiliser chmod à condition de le monter d'une façon particulière (dans /etc/fstab : UUID=12102C02102CEB83 /media/windows ntfs-3g auto,users,permissions 0 0).

Sinon, comme pour le fat32, il faut indiquer les permissions de tout le disque en le montant de la façon suivante : mount -t ntfs-3g /dev/sda1 /mnt/maclefusb -o umask=022 (022 indique ici 755, c'est inversé).

/etc/group : Liste les groupes utilisateurs. [nom du groupe]:[mot de passe ou non (x)]:[identifiant du groupe]

/etc/group : Liste les groupes utilisateurs. [nom du groupe]:[mot de passe ou non (x)]:[identifiant du groupe]

/etc/network/interfaces : Pour modifier les ip et la passerelle par défaut. On peut y ajouter une route avec "up route add -net 192.168.1.128 netmask 255.255.255.0 gw 192.168.1.2". La configuration d'une interface doit ressembler à :

auto eth1 #il faut démarrer automatiquement eth1 au démarrage allow-hotplug eth1 #démarre l'interface si un branchement est constaté iface eth1 inet static address 10.0.0.1 netmask 255.0.0.0 gateway 1.2.3.4


/etc/resolv.conf : Pour modifier les serveurs dns. nameserver 8.8.8.8

/etc/passwd : Liste les utilisateurs, affiche s'ils ont besoin d'un mot de passe ou non (x), leur identifiant utilisateur (uid), leur identifiant de groupe (gid), leurs répertoire par défaut, le programme qu'ils lancent (le bash par défaut).

/etc/shadow : Liste les utilisateurs, affiche le hash des mots de passe.

/etc/rc2.d : Dossier contenant des liens vers les services. rc2 lance les services au runlevel 2, c'est à dire en mode texte.

/etc/inittab : Se lance au démarrage par /bin/init. Détermine le niveau d'exécution (mode texte, mode graphique...), que faire en cas de ctrl+alt+del, que faire en cas de défaillance d'alimentation, quels processus doivent être relancés automatiquement s'ils sont tués (par defaut "getty", le login). Charge par défaut le fichier "/etc/init.d/rcS". Ne semble pas permettre de lancer des commandes personnalisées.

/etc/sysctl.conf : Dans ce fichier, on peut activer la redirection de port (net.ipv4.ip_forward=1), ce qui permet d'utiliser son debian comme routeur.

/etc/init.d/ : Contient les programme qui se lancent automatiquement au démarrage, les démons, équivalent des services dans Windows. On peut aussi lancer des services manuellement à partir de ce dossier.

/etc/init.d/rcS : Lance les programmes contenus dans rc1.d, rc2.d, rc3.d etc.

/etc/skel/ : Modèle des fichiers présents dans les répertoire utilisateurs (.profile, .bashrc, .bashlogout).

[home]/.profile : lance quelque chose au login.

Installation des logiciels


apt-get ugrade : remet à jour la liste par rapport à celle sur le dépot.

apt-get update : remet à jour la liste par rapport à celle sur le dépot.

apt-get clean : enlève les paquets du cache des paquets (les .deb qu'on a téléchargé avec atp-get stockés dans /var/cache/apt/archives/).

apt-get autoclean : enlève seulement les paquets inutilisés du cache des paquets.

apt-cache search [nom du paquet] : cherche un paquet dans la liste téléchargé "/etc/apt/sources.list".

apt-get install [nom du paquet] : télécharge et installe les paquets demandés.

apt-get download [nom du paquet] : télécharge le paquet dans le répertoire courant. Pratique pour récupérer un fichier de conf par défaut, par exemple.

apt-get autoremove [nom du paquet] : supprime un paquet et ses dépendances.

apt-get remove --purge [nom du paquet] : supprime un paquet.

dpkg = Gestionnaire de paquet debian. "--get-selections" pour afficher la liste des paquets. "dpkg -l *perl*" pour afficher la liste des paquets installés ayant "perl" dans leur nom. "dpkg reconfigure test" pour relancer la configuration automatique du paquet "test".

dpkg -r [nom du paquet] : Désinstaller un paquet.

dpkg -x [nom du paquet] [répertoire] : Pour extraire le contenu d'un paquet dans le répertoire. Pratique pour récupérer un fichier de conf par défaut, par exemple.

dpkg --purge [nom du paquet] : Désinstaller un paquet ainsi que les utilisateurs et les fichiers de config qu'il a créé.

Clavier



Sous Debian https://wiki.debian.org/fr/Keyboard


Avec le paquet keyboard-configuration qui enregistre la configuration dans "/etc/default/keyboard".
Pour lancer la configuration, utiliser "dpkg-reconfigure keyboard-configuration" puis lancez "service keyboard-setup restart".

Il existe aussi la commande "loadkeys", mais il faut qu'un fichier de configuration soit présent dans "/usr/share/keymaps".

Sous X11


Utiliser "setxkbmap".

Divers



echo [texte] : Affiche [texte]. Permet d'afficher le contenu d'une variable ("echo $PATH"). Echo retourne par défaut à la ligne, on peut l'en empêcher en faisant "echo -n".

wc : word count, pour compter le nombre de lignes, mots, octets. "who|wc -l" pour afficher le nombre d'utilisateurs.

Démarrer un programme au démarrage


Chez un utilisateur en particulier


Modifier le fichier .profile ou le fichier .bashrc dans le home.

Chez tout le monde (1)


Indiquez votre commande dans "/etc/rc.local".

Chez tout le monde (2)


Ajouter une ligne au fichier "/etc/profile" ou dans le dossier "/etc/profile.d".

Chez tout le monde (3)


La technique utilisée par les services linux.

Mettez votre script dans le dossier "/etc/init.d", le rendre executable avec "chmod 777 [votre script]".

Lancer "update-rc.d [votre script] defaults", il devrait se lancer au prochain démarrage.

Pour le supprimer : "update-rc.d -f blah remove".

Caractères de substitition


Pour toutes les commandes, on est pas obligé de désigner précisément un fichier, on peut utilsier des caractères de substitution.
Par exemple, mettons qu'on ai 3 fichiers, testA, testB, testC et testDada.

Etoile :
tes* : désigne un mot commençant pas "tes", donc testA, testB, testC et testDada.
*est : désigne un mot se terminant pas "est".

Crochets :
test[AB] : désigne un fichier commençant par "test" et finissant par A ou B donc testA et testB .
test[A-Z] : désigne un fichier commençant par "test" et finissant par une lettre en A et Z donc testA, testB, testC et .
test[1A-Z] : désigne un fichier commençant par "test" et finissant par 1 ou une lettre en A et Z donc testA, testB et testC.

Point d'interrogation :
test? : désigne un mot se terminant par n'importe quel caractère (mais un seul), donc testA, testB et testC.
test???? : désigne un mot se terminant par 4 caractères, n'importe lesquels, donc testdada.

Supprimer les bips du haut parleur interne : modprobe -r pcspkr snd_pcsp

Remettre les bips : modprobe pcspkr


cat /etc/group | sed 's/:.*//g' | sort : Affiche les groups. "cat /etc/group" affiche le contenu du fichier /etc/group/, "sed 's/:.*//g'" trie en remplaçant tout ce qui vient après ":" par rien globalement, "sort" range les fichiers dans l'ordre alphabétique.


SSH


SSH permet d'administrer linux à distance et de s'y connecter en sftp (par exemple avec filezilla, même identifiants que sur le tty, sur le port 22). Vous pouvez utiliser le paquet "open-ssh".

Pour lancer une session ssh : "ssh [nom de l'utilisateur]@192.168.1.1".

Pour sftp, faire : "sftp [nom de l'utilisateur]@192.168.1.1". Puis, la commande pour récupérer un fichier est "get", "ls" pour se déplacer, etc.

Attention, SSH est parfois bloqué par inetd, il faudra l'autoriser dans "/etc/hosts.allow" ou "/etc/hosts.deny".

Partage Windows/Linux


Serveur Linux, client Windows


Pour les partages de fichiers, windows utilise "Server Message Block", "SMB" (qui fut aussi appelé cifs). L'implémentation libre est "Samba". Cela permet d'afficher les dossiers d'un serveur linux dans l'explorateur windows.

Les paquets à installer sont "samba" et "samba-common" pour le partage linux vers windows.

Configurer les dossiers à partager : dans "/etc/samba/".
Exemple fonctionnel (assurez vous que samba est lancé, que vous avez les droits linux pour accéder au dossier).

[monpartage] browseable = yes comment = divertissements path = /home/pi/test read only = no valid users = tech_divertissement public = yes


Très bonne infos sur la configuration de samba


Pour configurer comment samba se lance, c'est dans "/etc/default/samba".

Pour ajouter un utilisateur, il est conseillé de le créer comme ceci (mais on peut en choisir un existant) :
useradd -M -s /bin/false nom_utilisateur

Puis de l'ajouter à samba :
smbpasswd -a [nom de l'utilisateur]

Samba utilise parfois le backend "tdbsam" (c'est indiqué dans cat /etc/samba/smb.conf).

Les utilisateurs sont stockés dans "/var/lib/samba/passdb.tdb". On peut les voir avec tdbdump (outil inclus dans le paquet tdb-tools).

Démarrer samba : "/etc/init.d/samba start"

Serveur Windows, client Linux



Pour accéder à un partage Windows, le paquet "cifs-utils" est à installer.
Pour accéder en tant que client à "192.168.1.1/monpartage" sous linux : Il faut monter le disque avec mount -t cifs -o username=[nom de l'user],password=[mot de passe] //192.168.1.1/monpartage /mnt

Partage linux



-Installer les paquets requis avec "apt-get install nfs-common nfs-kernel-server portmap".

-Autorisations à configurer dans /etc/exports.

-Relancer le serveur avec "nfs-kernel-server restart".

Inetd


Inetd est un "superdemon", un service qui écoute sur les ports et va renvoyer les tentatives de connexions à d'autres programmes. Par exemple, une connexion se fait sur le port 21 puis Inetd l'envoie vers le client ftp.

Certains services utilisent Inetd, d'autres fonctionnent sans. C'est un logiciel fourni par Open-bsd.

"/etc/init.d/openbsd-inetd start"

Il existe également Xinetd qui propose à peu près les mêmes fonctions.

Le fichier de configuration de Xinetd est dans "/etc/inetd.conf", généralement les services utilisant Inetd se mettent dedans automatiquement.

Inetd peut autoriser ou interdire des ips avec les fichiers de configuration "/etc/hosts.deny" et "/etc/hosts.allow". Les lignes ressemblent à "http: ALL".

On peut vérifier qui écoute sur tel ou tel port avec la commande -netstat plantu (Est-ce inted ou directement le serveur ftp qui écoute ?).

Serveur ftp (ftpd avec inetd)


Note : si vous avez ssh sur votre serveur (open-ssh), ça peut servir de client sftp.

Le nom du paquet est ftpd.

On peut mettre la liste des utilisateurs qu'on veut limiter à leur home dans "/etc/ftpchroot".

On peut bloquer des utilisateurs dans "/etc/ftpusers".

MySQL


Installer :
apt-get install mysql-server mysql-client libmysqlclient-dev mysql-common

Changer le mot de passe root :
mysqladmin -u root -p oldpassword newpass

Empécher qu'il se lance au démarrage : sudo systemctl disable mysql

Apache


Installer la pile LAMP : sudo apt install libapache2-mod-php mysql-server php-mysql
Pour redémarrer Apache sous Centos/Debian : /etc/init.d/httpd restart
Empécher qu'il se lance au démarrage : sudo systemctl disable apache2

Nginx


Un serveur plus léger qu'Apache. Conf sous /etc/nginx/sites-available/default.
Pour le lancer : /etc/init.d/nginx start

Fail2ban avec nginx



Fail2ban permet de bannir un utilisateur ayant échoué à s'authentifier un certain nombre de fois. Il fontionne en analysant les fichiers de logs des autres applications ce qui lui permet d'être assez souple.

apt-get install fail2ban

Puis créer un fichier de conf local en dupliquant le fichier de conf par défaut : sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Rajouter dans le fichier de conf local :

[nginx-auth] enabled = true filter = nginx-auth action = iptables[name=NoAuthFailures, port=80, protocol=tcp] logpath = /var/log/nginx*/*error*.log


Enfin, il faut créer une règle "nginx-auth" dans "/etc/fail2ban/filter.d/nginx-auth.conf"


[Definition] failregex = no user/password was provided for basic authentication.*client: <HOST> user .* was not found in.*client: <HOST> user .* password mismatch.*client: <HOST> ignoreregex = </host></host></host>


Voir les ip bannies :
iptables -L -n

Pour débannir, trouver le nom de la prison avec fail2ban-client status puis : fail2ban-client set (nom de la prison) unbanip (adresse ip)

ou alors : iptables -D (nom de la règle iptables) (numero de la ligne ou apparait l'ip)


Squid


Bon tutorial sur squid

Pour bloquer un site, rajouter dans le fichier "/etc/squid/squid.conf" les lignes "acl nom_de_l_acl dstdomain site.com" et "http_access deny nom_de_l_acl". Le navigateur doit indiquer à la fois en proxy http et en proxy ssl l'adresse de votre serveur squid (par défaut 3128).

iptables


Iptable permet de faire ce qu'on veut des paquets, on transforme les adresses, on les transfère, on les bloque, en fonction de leurs adresses ip. Complexe à mettre en place. Pratiquement tous les logiciels de parefeu (monowall, smoothwall, checkpoint..) se basent sur iptable.

Pour voir les règles : iptables -L -n -v

Exemple divers


Des petits exercices.

VPN ipsec avec openswan



A[192.168.19.3] ---- [192.168.19.4]B[10.0.0.1] ---- [10.0.0.2]C

B doit être en mode routeur echo 1 > /proc/sys/net/ipv4/ip_forward. Installer TCPdump pour voir les paquets. S'assurer que A peut pinger C.

Sur A et C chercher "ipsec" en apt-cache search ipsec, openswan (ou un fork) devrait être proposé. A l'installation, indiquer qu'on veut travailler avec des clefs, pas des certificats.

Sur A et C la configuration et la clef doivent être identique. Ajouter, dans "/etc/ipsec.conf" :

#sous "config setup" interface="ipsec0=eth0" conn ma_connexion left=192.168.19.3 leftnexthop=192.168.19.4 #pour indiquer la route right=10.0.0.2 rightnexthop=10.0.0.1 #pour indiquer la route authby=secret auto=add


Ajouter des 2 côtés dans le fichier "/etc/ipsec.secrets" 192.168.19.3 10.0.0.2: PSK "0xmotdepasse" (le fichier doit contenir la même chose des deux côtés).

Pour démarrer ipsec : /etc/init.d/ipsec restart
Pour voir le status d'ipsec : /etc/init.d/ipsec staatus
Pour démarrer la connexion : ipsec auto --up maconn

Dossier /usr/ dans un autre disque avec Debian


Le dossier /usr/ contenant les programmes installés (genre "Program Files" mais en elcture seule), il peut devenir rapidement trop gros.

Disons qu'on ait branché un nouveau disque : la première étape est de créer une table de partition avec "fdisk /dev/sdb". Vous pouvez appuyer sur "p" pour afficher la liste des partitions (il n'y en a pas). Puis, appuyer sur "n" pour créer une nouvelle partition et "w" pour appliquer les modifications.

Il faut ensuite créer un volume dans la partition, avec "mkfs -t ext3 /dev/sdb1".

Maintenant, on veut copier le contenu de "/usr" dans ce nouveau disque. On va donc tout d'abord le monter avec "mount -t ext3 /dev/sdb1 /mnt". Puis, copier le contenu du répertoire "/usr" dans "/mnt" : "cp /usr/* /mnt -R -p".

Pour la suite, il nous faudra obtenir l'id du disque avec la commande "blkid".

Pour finir, on va faire en sorte que le disque se monte automatiquement au démarrage. Ca se passe dans le fichier "/etc/fstab". On y ajoute l'id du disque en se basant sur le modèle du disque précédent (sda), attention la ligne est longue. Vous pouvez essayer de redémarrer pour vérifier que le disque se monte correctement (commande "mount" pour voir les disques montés).

Supprimer le dossier /usr


Attention, en supprimant le contenu de ce dossier, vous supprimerez des outils tels que vi, donc soyez sûr que la copie dans /mnt a réussi.

Attention, soyez également sûr que c'est le contenu de /usr que vous supprimez, et pas le contenu du disque monté dans /usr. Vous pouvez vérifier où est monté /dev/sdb1 avec la commande "mount". Si le disque est monté dans /usr, essayez un "umount /usr". Si la commande ne marche pas, désactivez le montage automatique (commentez la ligne dans "/etc/fstab"), rebootez. /usr ne contiendra alors plus le nouveau disque, mais tous les anciens fichiers que vous voulez supprimer.

Pour supprimer : "rm -r /usr/*".

Oubli de mot de passe sur Debian


Booter sur un live-cd, modifier les fichiers "/etc/shadow" et "/etc/passwd" (ainsi que "/etc/shadow-" et "/etc/passwd-" le cas échéant) pour supprimer le hash + l'indicateur du besoin de mot de passe ("x").

Oubli de mot de passe sur Debian 2


Dépend des versions.

Au menu grub, appuyer sur e pour éditer le grub.

Enlever quiet. Mettre single "init=/bin/bash" à la place. Puis ctrl+x pour booter.

Si le disque est verrouillé, mount -rw -o remount /.
Avec nano, modifier les fichiers "/etc/shadow" et "/etc/passwd" (ainsi que "/etc/shadow-" et "/etc/passwd-" le cas échéant) pour supprimer le hash + l'indicateur du besoin de mot de passe ("x").

Exemples de script


Lire dans un fichier texte



#!/bin/bash while read ligne do echo $ligne done < fifi



Exemple de script CGI


A mettre dans /usr/lib/cgi-bin puis à lancer dans (hote)/cgi-bin/ depuis un navigateur.


#! /bin/sh rm /tmp/fi1 ls -l /var > /tmp/fi while read line do x=$(echo -n "$line\c") x="$x<br>"; echo -n "$x\c" >> /tmp/fi1 done < /tmp/fi cat << fini Content-type: text/html <HTML><HEAD><H1>Directory de /var </H1></HEAD> <BODY> $(cat /tmp/fi1) </BODY> </HTML> fini


Divers


Changer la résolution du serveur X:
X -configure, ce qui va créer un fichier xorg.conf.new dans le dossier home. Y ajouter modes "640x480" dans la subsection "display" (sous depth 24 ou 16), puis cp /root/xorg.conf.new /etc/X11/xorg.conf

Configurer jwm :
Copier le fichier présent dans /etc/jwm/system.jwmrc dans votre dossier home en le renommant .jwmrc.

Installer les firmwares wifi :

Attention, si l'installateur demande rtl_nic/rtl8168g-3.fw il faut un dossier rtl_nic à la racine qui contiendra rtl8168g-3.fw.

Si debian ne détecte pas les firemwares lors de l'installation, il faut monter la clef manuellement. Appuyer sur ALT+F2, ou ALT+SHIFT+F2 pour ouvrir une console. Chercher l'id du disque en tapantblkid.
Puis monter le disque :
mount -t vfat /dev/[nom du disque, par exemple hda1] **/mnt/**

Enfin, copier le firemware dans le dossier idoine (/lib/firmware si ça n'a pas changé).

Si le dossier n'existe pas, le créer avec mkdir /lib/firmware.