Ceci est une ancienne révision du document !


Commandes Unix

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 

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 :

  • 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
tar xvfz something.tar.gz
tar jxf something.tar.bz2
unzip something.zip
unrar x "nom de fichier.rar"
tar czvf repertoire.tar.gz repertoire/
tar cjvf repertoire.tar.bz2 repertoire/ 

Flags :

  • c pour compresser
  • z pour GNU Zip, j pour BZ2
  • v pour verbose
  • f cible = un fichier

Idem en supprimant les fichiers source après compression :

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"

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
scp /source/fichier  user@host:repertoiredistant

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
shopt -s globstar nocaseglob
for input in GigaSoundPack/**/*.wav
do
  indir=$(dirname "$input")
  outdir=${indir/#GigaSoundPack/GigaSoundFlac}
  [ ! -d "$outdir" ] && mkdir -p "$outdir"
  infile=$(basename "$input")
  outfile=${infile%.???}.flac
  ffmpeg -i "$input" "${outdir}/${outfile}"
done
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" \;
ffmpeg -ss 300 -t 180 -i "input.avi" output.flac

Remplacer

  • 300 par la position de départ (en secondes)
  • 180 par la durée à capturer
  • input.avi par le fichier d'où extraire
  • output.flac par le fichier de destination
ffmpeg -i video1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i video2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4

Source : http://trac.ffmpeg.org/wiki/Concatenate#protocol

ffmpeg -i "source.mp4" -vcodec libx264 -crf 20 "resultat.mp4"

Diminuer la valeur de CRF pour augmenter la qualité, et augmenter cette valeur pour diminuer la taille.

Source : https://unix.stackexchange.com/questions/28803/how-can-i-reduce-a-videos-size-with-ffmpeg#

  • Pour changer le nombre d'images par secondes : paramètre -r
  • Pour changer la résolution : paramètre -s
ffmpeg -i "source.mp4" -vcodec libx264 -crf 20 -r 20 -s 360x640 "resultat.mp4"

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/

mnt-eddie-musicmaking.automount
[Unit]
Description=Automount Eddie Music Making
 
[Automount]
Where=/mnt/eddie/musicmaking
 
[Install]
WantedBy=multi-user.target
mnt-eddie-musicmaking.mount
[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 les vidéos :

mnt-eddie-videos.automount
[Unit]
Description=Automount Eddie Vidéos
 
[Automount]
Where=/mnt/eddie/videos
 
[Install]
WantedBy=multi-user.target
mnt-eddie-videos.mount
[Unit]
Description=Eddie Vidéos
 
[Mount]
What=192.168.0.42:/volume1/videos
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”.

  • memo/unix.1649670608.txt.gz
  • Dernière modification : il y a 4 ans
  • de Arnaud Jacquemin