Créer un dossier et ses parents s'ils n'existent pas encore :
mkdir -p /foo/bar/zoo/andsoforth
cp -R source nomcopie
ln -s cible nom_lien
# 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"
# Lister les fichiers avec un filtre sur leur nom ls *.pdf
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 \"{}\" \;
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 :
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
tar xvf something.tar.bz2 unzip something.zip unrar x "nom de fichier.rar"
tar xvf something.tar.bz2 --exclude="folder"
# 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
tar cvf repertoire.tar.bz2 repertoire/
Paramètres :
c pour compresserv pour verbosef cible = un fichierz pour GNU Zip, j pour BZ2 --directory= suivi du dossier racine à partir duqul archivertar cvf archive.tar.bz2 --directory=/var/www dossier
tar cjvf repertoire.tar.bz2 repertoire/ --remove-files
find ./ -name NOM_FICHIER
find ./ -name *.EXTENSION
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 : 1)
# -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"
find . -type f -name ".directory" -exec rm -i {} \;
find . -name "truc" -mtime +15 -type f -delete
find . -mindepth 1 -type d -empty -delete;
ssh user@host [-p port]
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/
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
Audio, vidéo… déplacés sur la page ffmpeg
exiftool -r -all= -ext jpg -ext gif -ext png /path/to/top/directory/
find ./ -name '*.mp3' -type f -exec mp3splt -a -f {} 00.10.50 EOF -o "trim/@f" \;
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
find . -type f -iname '*.jp*g' -printf "%h\n" | sort | uniq -c > count.txt
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
sudo du -sh /tmp
60K /tmp
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
uname -r
2.6.28-12-netbook-eeepc
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
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
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
[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/
Tout en continuant à les afficher à l'écran !
ftp -v -u -n -d < ${FTP_COMMAND_FILE} 2>&1 | tee $FTP_RETOUR_FILE
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
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”.
sudo useradd nom_utilisateur
sudo groupadd nom_groupe
sudo adduser nom_utilisateur nom_groupe
Il faut fermer/ré-ouvrir la session utilisateur pour que ce soit pris en compte (dommage !)
Source : Wiki Ubuntu-fr > Gestion des utilisateurs et groupes en ligne de commande
sudo pipx install sqlparse pipx ensurepath find . -type f -exec sqlformat --reindent {} -o {}.sql \;