12 items tagged "ligne de commande"

  • commande find sous linux avec l'option -regex

    il est souvent utile de rechercher des fichiers pour par exemple les renommer (voir mon article sur le renommage des photos). La commande en ligne sous linux pour cela est find :

    De façon basique,

    La recherche de fichier

    va être réaliser par :

  • Git et l'index (zone de préparation du commit)

    miniature du schéma d'Oliver Steele

    Comme beaucoup, j'ai utilisé git pendant des années sans utiliser l'index. C'est alors qu'un collègue se met à git et me parle de l'index… pas clair!

    Et le hasard faisant bien les choses, arrive un cours Git avancé de Matthieu Moy, dont la page 21 reprend ce graphe très clair d'Oliver Steele dans sa page My Git Workflow:

  • Git sur mon serveur local

    Et on monte encore d'un cran : git sur mon serveur local :

    Actuellement, on privilégiera plutôt une implémentation de gitlab community editions (ce)

    liens utiles pour cette partie :

    https://www.sheevaboite.fr/articles/installer-serveur-git-auto-heberge-partie-1

    http://git-scm.com/book/fr/v2/Git-sur-le-serveur-Mise-en-place-du-serveur

    après avoir commencé à utiliser git sur ma machine, je souhaite maintenant déposer les sources sur un serveur de fichier pour en avoir une copie au chaud… et éventuellement partager ce projet.

    sur le serveur (ubuntu, debian like)
    sur le(s) client(s) (ubuntu, debian like)

    Les lignes ci-dessous s'inspire largement du tutoriel sur sheevaboite.fr (cf. lien ci-dessus):

    installation :

    sudo apt-get install git-core

    création d'un utilisateur spécifique pour l'utilisation de git :
    sudo adduser --system --shell /bin/bash --group --disabled-password --home /var/git/ git

    Création du répertoire pour le(s) certificat(s):

    sudo mkdir /var/git/.ssh

    Copie du certificat du developpeur 1 :
    sudo scp developpeur1@nom_pc_client:/home/developpeur1/.ssh/id_rsa.pub /var/git/.ssh/

    cd /var/git/.ssh/

    Création du fichier authorized_keys avec la clé publique du 1er développeur
    sudo mv id_rsa.pub authorized_keys

    Création d'un dépôt :

    cd ~
    mkdir depot.git
    cd depot.git/
    git init --bare

    installation

    sudo apt-get install git

    Génération des clés privée/publique pour l'accès au serveur

    ssh-keygen -t rsa

    Copie de la clé publique sur le serveur

    scp .ssh/id_rsa.pub git@nom_serveur_git:/var/git/.ssh/

    Extraction du dépôt vide créé sur le serveur

    git clone git@nom_serveur_git:depot.git

    Se placer dans le répertoire du projet

    cd depot/

    Création d'un fichier de code source
    cat > test1.c

    Ajout du fichier précédemment créé
    git add test1.c

    Configuration de git

    git config --global prenom.nom "p.nom@serveur_email.fr"
    git config nom_developpeur.email "p.nom@serveur_email.fr"

    Edition du fichier de config de git pour ajout des raccourcis (cf. tout haut de cet article)

    vim ~/.gitconfig

    Premier commit
    git ci -m "1er ci" test1.c

    Synchronisation avec le serveur
    git push origin master

    Création d'un second fichier source
    cat > test2.c

    Ajout d'un second fichier

    git add test2.c 
    git ci -a -m "add test2"
    git push origin master

    Visualisation du log
    git log ou git log --decorate

    On se repositionne plus
    cd ..

    on crée un nouveau répertoire et on s'y positionne

    mkdir test
    cd test/

    Puis on récupère à nouveau le projet pour vérifier qu'on y retrouve ce qu'on vient de créer (test1.c et test2.c)

    git clone git@nom_serveur_git:depot.git
    ls depot/

    vous devez retrouver votre dépôt copié sur votre machine !

    … à part tous les fichiers et répertoires qui se trouvent dans .gitignore.

    Si vous souhaitez néanmoins que votre dépôt les inclus, il faut recourrir à git annex

    … ou bien les enlever de .gitignoreet donc les ajouter… en y ajoutant au besoin des attributs de fichier binaire :

    voir .gitattributes …à suivre….

    Dans la pratique, on a généralement un projet existant qu'on veut déposer sur le serveur.

    On commence par créer le dépôt vide sur le serveur, comme ci-dessus :

    sudo mkdir depot_projet_existant.git
    cd depot_projet_existant.git/
    sudo git init --bare

     

     Si le projet existe bien, en revanche, il n'est pas associé à un dépôt distant. Le fichier .git/config ne doit pas

    contenir de [remote "origin"].

    Pour créer ce lien, on tape :

    git remote add origin git@nom_serveur_git:depot_projet_existant.git

    et maintenant, on peut pousser notre projet dans le dépôt vide :

    git push origin master

     

    Et maintenant, nous sommes deux développeurs (ou 1 avec 2 machines, ça fait presque pareil):

    PC développeur 1

    qui travaille sur la branche master

    PC développeur 2

    qui développe sur la branche future_version

    Rien de bien particulier ici, ce développeur fait ces commits en local puis de temps à autre un

    git push origin master

    Le développeur 1 doit maintenant aussi travailler sur la future_version

    git fetch origin

    ce qui va récupérer sur son poste "la branche" future_version déposée par le développeur 2…

    j'ai mis des guillemets autour de la branche car elle n'est pas vraimment créée,

    donc pour la créer, on tape :

    git co -b future_version origin/future_version

     ou si conserve le même nom de branche (comme ci-dessus), alors on peut taper à la place:

    git co --track origin/future_version

    C'est ce qui s'appelle une branche de suivi, et nous permet d'utiliser les commandes

    git push et git pull pour se synchroniser avec la branche distante.

    au début, il faut récupérer le projet :

    git clone git@nom_serveur_git:depot.git

    on crée la branche future_version :

    git co -b future_version

    on ajoute, on enlève des fichiers… bref, presque comme sur un nouveau projet, on commit, on tag…

    et on "push" la branche sur le serveur (et le(s) tag(s) éventuel(s)) :

    git push origin future_version

    git push origin --tag

    Si ce développeur doit fair une modif sur la branche master, il se repositionne sur le "tronc"

    git co master

    puis, pour récupérer les modif faites par le developpeur 1:

    git pull origin master

    et pour récupérer les tags ajoutés:

    git pull origin --tag

     

     

  • La date heure sous linux

    horloge du dôme de Florence (src: https://commons.wikimedia.org/wiki/User:Watchduck)

    La date est incontournable,

    le sysadmin (ASR) a parfois besoin:

  • manipulation de chaîne de caractères avec les REGEX (expressions rationnelles)

    Les REGEX (REGular EXpressions ou expressions rationnelles) sont une méthode permettant de décrire des chaînes de caractères afin de les rechercher, contrôler (contrôle de saisie dans un formulaire web par exemple) et à fin de les manipuler : ré-ordonnér, recherche/remplace pour adapter un fichier texte ou CSV, renommer des fichiers, changer du code dans un programme...

  • mémento ligne de commande sous GNU/Linux

    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

    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 !

  • mes options de g++

    https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#Overall-Options

    https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/C-Dialect-Options.html#C-Dialect-Options

    Utilisation classique :

    g++ fichier.cpp -std=c++11 -Wall -Wextra -o fichier_executable

    -o fichier_executable

    -o pour output, permet de définir le fichier de sortie. Si absent, le fichier créé est nommé a.out

    Détermine le langage standard:

    -std=c++14

    Compilation simple (sans assemblage) :

  • photocopier avec un scanner et une imprimante grâce aux commandes scanimage et lp

    Comment photocopier facilement... sans jeter mon vieux scanner (de plus de 10 ans mais qui fonctionne parfaitement !) et avec une imprimante classique?

    J'ai commencé tout d'abord par regarder comment imprimer en ligne en commande :

  • redimmensionnements photos en ligne de commande avec ImageMagick

    Besoin : redimensionner un lot d'images pour réduire leur taille et augmenter leur taux de compression afin d'économiser de la place sur le disque dur.

    En effet, les appareils photos d'entrée de gamme et moyen de gamme retournent souvent des images avec des millions de pixels et font donc une taille sur le disque de plusieurs méga-otets alors que la plupart de ces images ne méritent souvent pas plus de 100 ou 200ko. Ce gain d'environ 10x sur des centaines voir des milliers d'images peut permettre un gain significatif de place sur le disque dur.

  • Renommage photos en ligne de commande (exiv2 - rename)

     

    Voici quelques exemples pour

    renommer vos photos en ligne de commande

    Un renommage permettant un tri facile et de retrouver rapidement une photo en fonction de sa date, est de mettre en préfixe la date sous la forme AAAAMMDD, par exemple 20140512 (pour plus de lisibilité, vous pouvez ajouter des traits d'union entre les éléments de la date... 2014-05-12).

  • Robocopy

    Quand on est obligé de faire des copies sous windows (migration des données d'un PC utilisateur vers un PC crypté par exemple), il peut être intéressant d'utiliser robocopy.

    Tout d'abord, exécuter la console (cmd) en tant qu'administrateur.

    puis

    robocopy répertoire_source répertoire_destination /e /r:0 /w:1 /zb /DCOPY:T

    /e copie les sous-répertoires, même s'ils sont vides

    Si il y a un problème avec un fichier, /r:0 évite une nouvelle tentative et /w:1 ne patiente qu'une seconde.

    /zb Utilise le mode de redémarrage. Si l'accès est refusé, cette option utilise le mode de sauvegarde.

    /DCOPY:T copie les horodatages des répertoires


    ... sinon (si ni la source, ni la destination n'est crypté), il vaut mieux être sous linux (au besoin démarrer avec une clé bootable) et utiliser rsync par exemple !

  • télécharger une liste de fichiers avec wget (des images par exemple)

    Vous disposez d'un lien internet (URL) où se trouve une liste de fichiers, par exemple, une série d'images. Si vous lancez ce lien dans un navigateur, vous voyez la liste mais vous ne pouvez que les charger une par une ce qui est très fastidieux, surtout s'il y en a plusieurs dizaines voir plus !

EasyTagCloud v2.8