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 
  • -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

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 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
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
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

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/

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 la musique :

mnt-eddie-musique.automount
[Unit]
Description=Automount Eddie Musique
 
[Automount]
Where=/mnt/eddie/musique
 
[Install]
WantedBy=multi-user.target
mnt-eddie-musique.mount
[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 :

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/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 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


  • memo/unix.1723201846.txt.gz
  • Dernière modification : il y a 19 mois
  • de Arnaud Jacquemin