recherche de fichier, voir mon article sur find
recherche de fichier contenant un texte :
grep -lR "pattern REGEX" /chemin/absolu
ou * pour le répertoire courant. Le pattern REGEX est à remplacer par le texte à chercher ou le modèle suivant les règles REGEX (cf. mon article sur les REGEX pour plus de détail)
Pour exclure des répertoires, on peut ajouter l'option --exclude-dir
:
grep -rn \ --exclude-dir={rep1, rep2, replist*} \ terme_recherché
lister que les fichiers et répertoires cachés :
ls -d .*
lister les répertoires cachés :
ls -d .*/
lister que les répertoires (non cachés) :
ls -d */
connaîre la taille d'un répertoire avec du (disk usage), si le chemin du répertoire est omis, c'est le répertoire courant qui est pris en compte :
du -hs repertoire
lister les répertoires ou/et fichiers les plus gros :
du -hms * | sort -nr | head
disk usage liste les répertoire ou/et fichiers est exprime leurs tailles en Mo puis on trie (sort) et on ne conserve que les 10 premiers (head). Si on veut les 20 premiers, ajouter -n20 derrière head.
Pour lister respectivement, la taille totale et/ou la liste d'un type de fichier, bmp dans l'exemple ci-dessous (*):
find . -regex '.*\.bmp' -print0 | du --files0-from=- -ch | tail -1
find . -regex '.*\.bmp' -print0 | du --files0-from=- -ch | less
Pour compter le nombre de fichiers
find . -type f | wc -l
On peut aussi utiliser le programme tree, ci-dessous pour lister des fichiers sources:
tree -P '*.cpp|*.hpp|*.c|*.h'
Lister l'arborescence avec la taille cumulée du contenu des répertoires:
tree --du -h
et
tree -du -h -C -H . > tree.html
crée un fichier tree.html contenant l'arborescence et les tailles!
Trouver les fichiers (voir répertoires) récemment modifiés
Pour connaître les fichiers php modifiés dans les dernières 24 heures:
find *.php -mtime 0
Et versionner avec git ceux modifiés dans la dernière ½h qui ne sont pas (-not -path) dans le répertoire storage, qui ont pour extension .php
find . -type f -not -path '*/storage/*' -iname '*.php' -mmin -30
-exec git add {} \;
Lister-extraire l'arborescence (répertoires uniquement) d'un disque ou d'un répertoire :
sudo find ./ -type d > arborescence.txt
qui sauve dans le fichier arborescence.txt la liste des répertoires. Le problème est que sur un serveur de fichiers, ça peut faire beaucoup de lignes! Pour réduire le nombre de ligne, je supprime les lignes correspondant à des répertoires de niveau 4 et au delà (il suffit de l'adapter pour aller plus ou moins loin dans les niveaux) :
dans vim ou notepad++, recherche/remplacer
.*\/.*\/.*\/.*\/.*\n
par rien
puis
\.\/
par rien pour supprimer le ./ en début de chaque ligne pour plus de lisibilité.
Enfin, on peut l'enregistrer en .csv puis finir la mise en forme dans Calc.
Lister les sessions ouvertes
sur une machine multi-utilisateurs pour par exemple redémarrer après une mise à jour :
who -u
Changer le nom du PC
sudo hostname nouveau_nom
qui ne suffit pas, si vous redémarrer, il récupère l'ancien
il faut aussi changer le nom dans le fichier /etc/hostname
echo nouveau_nom > /etc/hostname
enfin, si samba est installé (ce qui doit être le cas par défaut pour le partage avec des machines windows), il faut aussi modifier le fichier /etc/sambal/smb.conf pour définir le nom du partage
Créer un fichier texte et saisir rapidement des lignes dedans avec la commande cat
Il est parfois intéressant, par exemple pour un fichier de configuration ou simplement un fichier test, de créer un fichier et de saisir dedans quelques lignes sans lancer un éditeur :
cat > nouveau_fichier ligne1 dans le fichier ligne2 dans le fichier
après la dernière ligne saisie, revenir à la ligne et utiliser la combinaison de touche Ctrl-d pour terminer
Utiliser une commande en tant qu'argument d'une autre commande linux
Si vous utilisez ffmpeg pour réaliser un screencast (capture vidéo d'écran), il peut y avoir un problème pour définir le numéros de session s'il y a plusieurs sessions ouvertes. Voilà comment faire en passant en paramètre le numéro de session extrait avec les commandes who et un brin de script awk:
ffmpeg -f x11grab -s 1920x1080 -r 25 -i $(who | awk '{print substr($5,2,2)}').0 screencast.mp4
Autre exemple, compter les lignes de code source d'un programme:
wc -l $(ls *.cpp *.h)
Travailler sur plusieurs fichiers et/ou répertoires
Pour les supprimer :
rm -rf fichier1 repertoire1 fichier2 repertoire2
ou
rm -rf fichier{1,2} repertoire{1,2}
on peut recourir au expressions rationnelles:
rm -f $(ls | grep -i '^abc\.log\.')
similaire pour la copie:
cp -r src1 src2 dest/
on peut aussi faire, mais on ne copie alors que le contenu:
cp -r src1/ src2/ dest/
et pour les déplacer?
Pareil, avec l'option -r en moins !
scp chemin-src/{src1,src2} utilisateur@serveur:chemin-dest/dest/
NE PAS mettre d'espace dans l'accolade !