====== Commandes Unix ====== ===== Créer un dossier ===== Créer un dossier et ses parents s'ils n'existent pas encore : mkdir -p /foo/bar/zoo/andsoforth ===== Copie ===== cp -R source nomcopie ===== Liens symboliques ===== ln -s cible nom_lien ===== Lister les fichiers ===== * **-l** : utiliser un format d'affichage long (càd. afficher toutes les informations de droits, taille, date...) * **-h** : pour //human-readable//, avec -l ou -s, afficher les tailles en format lisible (par exemple 1K, 234M ou 2G) # Lister les fichiers et dossiers du répertoire courant, avec tous les détails, et les tailles compréhensibles par un humain ls -lh # Créer un alias pour cette commmande alias ll="ls -lh" * **-a** : pour //all//, permet d'afficher aussi les fichiers cachés * **-R** : pour //recursive//, permet de parcourir les dossiers * **-t** : pour trier les fichier par date de modification, du plus récent au plus ancien * **-r** : pour inverser le sens de tri * **-S** : pour trier les fichier par taille, du plus gros au plus petit # Lister les fichiers avec un filtre sur leur nom ls *.pdf ===== Droits ===== Désigner le propriétaire d'un fichier : chown owner:group fichier # Récursif : chown -hR owner:group dossier Rendre un fichier exécutable pour son propriétaire : chmod u+x fichier.sh Positionner les droits de tous les fichiers à lecture écriture pour le proprio, lecture seule pour les autres : # Version bash find . -type f -exec chmod 644 {} \; #Version busybox find "/shares/Public/Shared Videos" -type f -exec chmod u=rw,g=r,o=r \"{}\" \; ===== Dates ===== Pour analyser les différentes dates des fichiers et répertoire, en passant par un fichier CSV : cd DOSSIER_A_ANALYSER printf "nom;mtime (modification);ctime (status change);atime (access)\n" > ~/times.csv find . -printf "%P;%Td/%Tm/%TY;%Cd/%Cm/%CY;%Ad/%Am/%AY\n" >> ~/times.csv Pour rappel les dates sont : * mtime : dernière modification du contenu (pas des attributs) * ctime : dernière modification du contenu OU des attributs (:!: pas la date de création) * atime : dernier accès Source : https://www.quora.com/What-is-the-difference-between-mtime-atime-and-ctime Récupérer les fichiers modifiés dans les 15 derniers jours avec leur date/heure de modification : find ./ -type f -mtime -15 -printf "%p;%TY-%Tm-%Td %TH:%TM\n" > fichiers-modifies.csv ===== Archives ===== ==== Décompresser ==== tar xvf something.tar.bz2 unzip something.zip unrar x "nom de fichier.rar" === Exclure un dossier === tar xvf something.tar.bz2 --exclude="folder" === Spécifier cible et créer un dossier === # Créer dossier /var/www/nom-archive et y extraire l'archive tar xvf /home/ajacquemin/nom-archive.tar.xz --directory /var/www --one-top-level # Créer dossier /var/www/nom-specifie et y extraire l'archive tar xvf /home/ajacquemin/nom-archive.tar.xz --directory /var/www --one-top-level=nom-specifie ==== Compresser ==== tar cvf repertoire.tar.bz2 repertoire/ Paramètres : * ''c'' pour compresser * ''v'' pour verbose * ''f'' cible = un fichier * ''z'' pour GNU Zip, ''j'' pour BZ2 **:!: plus nécessaire** === Ne pas inclure toute le hiérarchie des dossiers === * ''--directory='' suivi du dossier racine à partir duqul archiver tar cvf archive.tar.bz2 --directory=/var/www dossier === Supprimer les fichiers source après compression === tar cjvf repertoire.tar.bz2 repertoire/ --remove-files ===== Chercher un fichier ===== find ./ -name NOM_FICHIER find ./ -name *.EXTENSION ==== Chercher à l'intérieur des fichiers ==== En connaissant l'extension, obtenir la liste des fichiers qui contiennent une chaîne : find ./ -name \*.php | xargs grep "\x63\x72\x65\x61\x74\x65\x5f\x66" Ou autre version plus simple, avec grep uniquement : ((https://stackoverflow.com/a/16957078)) # -r or -R is recursive, # -n is line number, and # -w stands for match the whole word. # -e is the pattern used during the search grep --include=\*.{php,yml} -rnw '/path/to/somewhere/' -e "pattern" Sans connaître l'extension : grep -rwl './' -e "chaine" ==== Supprimer fichiers selon leur nom ==== find . -type f -name ".directory" -exec rm -i {} \; ==== Supprimer fichiers selon leur date ==== find . -name "truc" -mtime +15 -type f -delete ==== Supprimer dossiers vides ==== find . -mindepth 1 -type d -empty -delete; ===== SSH ===== ==== Se connecter ==== ssh user@host [-p port] ==== Copier un fichier ==== Envoyer un fichier local vers une machine distante : scp /source/fichier user@host:repertoiredistant Télécharger un fichier depuis une machine distante : scp user@host:repertoiredistant/fichier /cible/ ===== MD5 ===== Calculer les hashs de tous les fichiers d'un dossier : find ./dossier -type f -print0 | xargs -0 md5sum > checksums.md5 Vérifier que tous les fichiers sont corrects d'après un fichier de hash : md5sum -c checksums.md5 ===== Multimédia ===== Audio, vidéo... déplacés sur la page [[ffmpeg]] ==== Retirer metatags de toutes les photos d'un dossier ==== exiftool -r -all= -ext jpg -ext gif -ext png /path/to/top/directory/ ==== Retirer les premières secondes de plusieurs mp3 ==== find ./ -name '*.mp3' -type f -exec mp3splt -a -f {} 00.10.50 EOF -o "trim/@f" \; ===== Téléchargement ===== Faire un miroir d'un site (attendre 4 secondes entre chaque page, convertir les extensions en .html, permettre d'actualiser l'archive ) wget --mirror --convert-links --backup-converted --html-extension -w 4 http://example.com/ -o log.txt # version condensée, sans la réécriture des extension, sans permettre l'actualisation de l'archive wget -mk -w 4 http://www.example.com Juste une page et ses liens : wget -r -N -w 4 -l 2 --no-remove-listing http://www.example.com http://www.gnu.org/software/wget/manual/wget.html#Examples ===== Nombre de fichiers dans chaque dossier ===== find . -type f -iname '*.jp*g' -printf "%h\n" | sort | uniq -c > count.txt ===== Espace disque utilisé / libre ===== ==== Toutes les partitions ==== df -h Résultat : Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur /dev/sda1 9,2G 5,9G 2,9G 68% / tmpfs 499M 0 499M 0% /lib/init/rw varrun 499M 332K 498M 1% /var/run varlock 499M 0 499M 0% /var/lock udev 499M 152K 498M 1% /dev tmpfs 499M 12K 498M 1% /dev/shm lrm 499M 1,6M 497M 1% /lib/modules/2.6.28-12-netbook-eeepc/volatile /dev/sda3 65G 61G 600M 100% /home /dev/sda5 155G 126G 21G 87% /media/partage ==== Pour un répertoire ==== sudo du -sh /tmp 60K /tmp ==== Le contenu d'un répertoire ==== sudo du -h /usr/src --max-depth=1 7,7M /usr/src/linux-headers-2.6.28-19-generic 64M /usr/src/linux-headers-2.6.28-19 52K /usr/src/rpm 72M /usr/src ===== Noyaux actuellement utilisé ===== uname -r 2.6.28-12-netbook-eeepc ===== Monter automatiquement NFS ===== ==== Version intiale ==== Dans ''/etc/fstab'' : 192.168.0.97:/nfs/Public /media/nas/Public nfs user,rw,hard,intr 0 0 Source : https://help.ubuntu.com/community/SettingUpNFSHowTo#Mounts ==== Version 2017 (autofs) ==== Dans ''/etc/auto.eddie'' music -fstype=nfs,rw,intr 192.168.0.42:/volume1/music music-making -fstype=nfs,rw,intr 192.168.0.42:/volume1/music-making photo -fstype=nfs,rw,intr 192.168.0.42:/volume1/photo video -fstype=nfs,rw,intr 192.168.0.42:/volume1/video public -fstype=nfs,rw,intr 192.168.0.42:/volume1/public ==== Version 2021 (systemd) ==== Créer deux fichiers dans ''/etc/systemd/system/'' [Unit] Description=Automount Eddie Music Making [Automount] Where=/mnt/eddie/musicmaking [Install] WantedBy=multi-user.target [Unit] Description=Eddie Music Making [Mount] What=192.168.0.42:/volume1/music-making Where=/mnt/eddie/musicmaking Type=nfs [Install] WantedBy=multi-user.target === Pour la musique : === [Unit] Description=Automount Eddie Musique [Automount] Where=/mnt/eddie/musique [Install] WantedBy=multi-user.target [Unit] Description=Eddie Musique [Mount] What=192.168.0.42:/volume1/music Where=/mnt/eddie/musique Type=nfs [Install] WantedBy=multi-user.target Pour les vidéos : [Unit] Description=Automount Eddie Vidéos [Automount] Where=/mnt/eddie/videos [Install] WantedBy=multi-user.target [Unit] Description=Eddie Vidéos [Mount] What=192.168.0.42:/volume1/video Where=/mnt/eddie/videos Type=nfs [Install] WantedBy=multi-user.target Annoncer ces fichiers à systemd : systemctl daemon-reload systemctl start mnt-eddie-musicmaking.automount Source : https://blog.tomecek.net/post/automount-with-systemd/ ===== Copier stdout et stderr dans un fichier ===== Tout en continuant à les afficher à l'écran ! ftp -v -u -n -d < ${FTP_COMMAND_FILE} 2>&1 | tee $FTP_RETOUR_FILE ===== Vérifier réussite FTP ===== Le code retour du client FTP est 0, même si le transfert n'est pas effectué. La solution est d'enregistrer les échanges dans un fichier et de chercher si celui-ci contient le message de réussite. FTP_SUCCESS_MSG="226 Transfer complete" ftp -v -u -n -d < ${FTP_COMMAND_FILE} &>$FTP_RETOUR_FILE if fgrep "$FTP_SUCCESS_MSG" $FTP_RETOUR_FILE ;then echo " [OK]" else echo " [KO]" fi Ou plus simple : utiliser lftp ===== Remplacer motif dans un fichier ===== Dans cet exemple, remplacer toutes les tabulations suivies d'un pipe par un pipe uniquement : sed -i 's/\t|/|/' monfichier.txt -i signifie "faire la modification directement dans le fichier source". ===== Gérer les utilisateurs ===== ==== Créer un utilisateur ==== sudo useradd nom_utilisateur ==== Créer un groupe ==== sudo groupadd nom_groupe ==== Ajouter un utilisateur dans un groupe ==== sudo adduser nom_utilisateur nom_groupe Il faut fermer/ré-ouvrir la session utilisateur pour que ce soit pris en compte (dommage !) Source : [[https://doc.ubuntu-fr.org/tutoriel/gestion_utilisateurs_et_groupes_en_ligne_de_commande#ajouter_un_utilisateur_a_un_groupe|Wiki Ubuntu-fr > Gestion des utilisateurs et groupes en ligne de commande]] ===== Reformater des fichiers SQL ===== sudo pipx install sqlparse pipx ensurepath find . -type f -exec sqlformat --reindent {} -o {}.sql \;