- Il est possible de gérer des fonctions propres à macOS comme la mise en veille, le presse-papiers, Finder, Spotlight ou les mises à jour uniquement depuis le terminal, ce qui réduit les tâches répétitives dans l’interface graphique
caffeinate,pmset,taskpolicyagissent directement sur le comportement du système, par exemple pour empêcher la mise en veille, vérifier l’état de l’alimentation ou ajuster la priorité d’exécution des processus- Avec
pbcopy,pbpaste,open,screencapture,say, il devient facile d’intégrer à des scripts des tâches du quotidien comme le presse-papiers, l’ouverture de fichiers, les captures d’écran ou la synthèse vocale sips,textutil,mdfind,mdlsservent d’outils de traitement de fichiers pour automatiser la conversion d’images et de documents, la recherche via Spotlight et la consultation des métadonnéesnetworkQuality,networksetup,softwareupdate,system_profilerpermettent de vérifier rapidement la qualité du réseau, le Wi‑Fi/DNS, les mises à jour de l’OS et les informations matérielles et logicielles
Portée des commandes spécifiques à macOS
- En plus des outils Unix standards, macOS inclut des outils en ligne de commande dédiés donnant accès à des fonctions du système d’exploitation
- L’usage détaillé de chaque commande peut être consulté avec
man <command> - L’environnement de référence est macOS Sonoma
Alimentation, veille et contrôle des processus
-
caffeinate- Empêcher le Mac de se mettre en veille- Exécuter
caffeinatesans option ni argument empêche le Mac d’entrer en veille tant que la commande s’exécute caffeinate -u -t <seconds>applique une prévention de mise en veille pendant le nombre de secondes indiqué- Ajouter l’option
-dempêche aussi la mise en veille de l’écran - Avec
-w <pid>, on cible un processus existant etcaffeinatese termine quand ce processus s’arrête caffeinate <command>lance la commande donnée dans un nouveau processus et empêche la mise en veille jusqu’à la fin de ce processus
- Exécuter
-
pmset- Vérifier et contrôler l’état de la gestion d’alimentationpmset -gaffiche les informations de configuration de l’alimentation disponiblespmset -g assertionsmontre les assertions liées à l’alimentation créées par d’autres processus, utile pour trouver ce qui empêche le Mac de se mettre en veillepmset -g thermlogaffiche les informations sur les processus soumis à throttling, pratique lors de benchmarkspmset displaysleepnowmet immédiatement l’écran en veille sans mettre tout le système en veillepmset sleepnowmet immédiatement tout le système en veille
-
taskpolicy- Contrôler l’ordonnancement des processustaskpolicy -b <command>exécute la commande donnée en arrière-plan et, sur les Mac Apple silicon, uniquement sur les cœurs d’efficacitétaskpolicy -b -p <pid>rétrograde un processus existant en exécution d’arrière-plantaskpolicy -B -p <pid>supprime l’état d’exécution en arrière-plan du processus indiqué- Sur les Mac Apple silicon, il pourra ensuite s’exécuter sur des cœurs d’efficacité ou de performance
- Ce comportement ne s’applique qu’aux processus rétrogradés en arrière-plan, pas à ceux lancés en arrière-plan dès le départ
taskpolicy -s <command>démarre la commande donnée en état suspendu, ce qui permet d’attacher un débogueur au lancement
Presse-papiers, lancement d’apps, captures d’écran et synthèse vocale
-
pbcopy,pbpaste- Utiliser le presse-papiers système<command> | pbcopycopie la sortie d’une commande dans le presse-papierspbpasteenvoie le contenu du presse-papiers vers la sortie standard
-
open- Ouvrir des fichiers et des applicationsopen -a <app> <file>ouvre le fichier indiqué avec une application précise- Ajouter l’option
-gpermet d’ouvrir le fichier en arrière-plan tout en conservant le focus sur l’application actuelle open .ouvre le répertoire courant dans une nouvelle fenêtre Finderopen -R <file>révèle le fichier indiqué dans une nouvelle fenêtre Finder
-
screencapture- Prendre des captures d’écranscreencapture -cprend une capture d’écran et la copie dans le presse-papiersscreencapture <file>enregistre la capture dans le fichier indiqué- Ajouter l’option
-T <seconds>attend le nombre de secondes indiqué avant de capturer
-
say- Synthèse vocalesay <message>lit à voix haute le message fournisay -f input.txt -o output.aiffgénère un livre audio à partir du fichier texte indiqué
Images, documents, recherche et métadonnées
-
sips- Manipulation d’imagessips -z <height> <width> <image>redimensionne l’image à la taille indiquée sans respecter les proportions d’originesips -Z <size> <image>ajuste le côté le plus long à la taille indiquée tout en conservant les proportionssips -c <height> <width> <image>rogne l’image à la taille indiquée en se basant sur le centre de l’image sourcesips -r <degrees> <image>fait pivoter l’image de l’angle indiqué- Par défaut, l’outil écrase le fichier source de manière destructive, donc il faut utiliser l’option
-osi l’on veut un chemin de sortie différent - Le fichier de sortie doit avoir la même extension que l’image d’entrée
-
textutil- Conversion de documentstextutilpeut convertir des fichiers entre les formats Microsoft Word, texte brut, texte enrichi et HTMLtextutil -convert html journal.docconvertitjournal.docenjournal.html- Les valeurs acceptées par
-convertsonttxt,html,rtf,rtfd,doc,docx
-
mdfind,mdls- Recherche Spotlight et métadonnéesmdfind <query>exécute une recherche par mots-clés Spotlight avec la requête fourniemdfind kMDItemAppStoreHasReceipt=1trouve toutes les applications installées depuis le Mac App Storemdfind -name <name>recherche tous les fichiers correspondant au nom indiqué- L’option
-onlyin <dir>permet de limiter la recherche à un répertoire précis mdls <file-path>affiche toutes les métadonnées Spotlight associées au fichier indiqué
Réseau, mises à jour et informations système
-
networkQuality- Mesurer la vitesse InternetnetworkQualityexécute un test de débit Internet sur le Mac- Ajouter l’option
-vpermet d’obtenir des informations plus détaillées - L’option
-Ilance le test sur une interface réseau spécifique
-
networksetup- Vérifier et configurer les paramètres réseaunetworksetup -listnetworkserviceorderaffiche la liste des services réseau disponiblesnetworksetup -getinfo <networkservice>affiche les informations du service réseau indiquénetworksetup -getdnsservers <networkservice>affiche les serveurs DNS du service réseau indiquénetworksetup -setairportnetwork <device> <network> [password]se connecte au réseau Wi‑Fi indiqué- Dans la plupart des cas, l’argument
<device>est"en0"
-
softwareupdate- Gérer les mises à jour de l’OSsoftwareupdate --listaffiche les mises à jour logicielles disponiblessudo softwareupdate -iainstalle toutes les mises à jour disponiblessoftwareupdate --fetch-full-installer --full-installer-version <version>tente de télécharger dans/Applicationsle programme d’installation complet de la version macOS indiquée
-
system_profiler- Consulter les informations systèmesystem_profileraffiche par défaut toutes les informations système disponibles, avec un volume de sortie généralement importantsystem_profiler <datatype>n’affiche que les informations du sous-système indiquésystem_profiler -listDataTypesmontre la liste de tous les sous-systèmes dont les informations peuvent être récupérées- Types de données utiles :
system_profiler SPHardwareDataType: affiche l’aperçu matériel du Mac actuel, le nom du modèle et le numéro de sériesystem_profiler SPSoftwareDataType: affiche l’aperçu logiciel du Mac actuel et le numéro de version exact de macOSsystem_profiler SPPowerDataType: affiche les informations d’alimentation et de batterie, y compris la puissance secteur actuelle et le nombre de cycles de la batteriesystem_profiler SPDeveloperToolsDataType: affiche les outils de développement Xcode actuellement actifs et les versions des SDK
5 commentaires
Des commandes Terminal avancées sur MacBook qui peuvent vous être utiles (pour le grand public)
https://www.youtube.com/watch?v=EhiqpFtmjig
J’avais publié il y a 7 mois un résumé du même article : Commandes CLI avancées de macOS
mais ce résumé-ci vaut davantage le détour.. T_T
Je trouve ça même mieux, sans doute parce qu’il n’y a aucun mal à comprendre même en le réduisant à peu près au niveau de votre résumé, haha.
Pas du tout...... haha
Commentaires Hacker News
En combinant sips et iconutil, on peut créer un fichier
.icnspour une app à partir d’un seul PNG 1024×1024, sans outil tiersIl suffit de créer un jeu d’icônes avec
mkdir MyIcon.iconset, de générer les tailles 16/32/128/256/512 ainsi que les fichiers@2xavecsips -z, puis d’exécutericonutil -c icns MyIcon.iconsetBonus : on peut aussi créer un
.icoavecffmpeg -i MyIcon.iconset/icon_256x256.png icon.icoEn revanche, je me demande si, vu la façon dont
sipsréduit les PNG, il vaut mieux générer la version 16 px directement depuis le 1024 px, ou la réduire progressivement à partir du 32 pxcppour produire un PNG 1024×1024qlmanage -t -s 1024x1024 -o MyIcon.iconset/Icon1024.png icon.svgCela dit, en regardant les icônes système de macOS, on dirait qu’elles ne sont plus vraiment ajustées à la main de nos jours
Dans cette liste, j’aime particulièrement pbcopy et pbpaste
Quand je manipule du JSON compacté, c’est très pratique d’ouvrir iTerm et d’exécuter
pbpaste | json_pp | pbcopypour récupérer une sortie mise en forme dans le presse-papierspbpaste | something | pbcopyque ça vaudrait le coup d’en faire une fonction shellOn pourrait l’utiliser comme
pbfilter json_pp,pbfilter base64 -d,pbfilter sed 's/this/that/'Si on lance simplement
pbfiltersans argument, il peut aussi servir de filtre pour enlever toute mise en forme du presse-papiers et ne garder que le texte brutEn revanche, ça ne marche pas avec les alias, les pipelines ou les expressions complexes : la commande de filtre doit être une commande normale ou une fonction, avec ses arguments
Par exemple, les doubles lignes vides générées par le copier-coller façon Windows peuvent être nettoyées avec
alias winlines="sed '/^$/{$!{N;s/\n//;};}'"etalias pbw="pbpaste | winlines | pbcopy"Sous Linux, on peut imiter le comportement de macOS avec
alias pbcopy='xsel --clipboard --input'etalias pbpaste='xsel --clipboard --output'Sur X11, il y a
xclip[0], et sur Wayland,wl-clipboard[1], qui prennent aussi en charge les formats de fichiers binaires grâce à l’analyse des en-têtes ou à la définition explicite des types MIMEIl est donc possible de copier des images depuis le terminal pour les coller dans des applications GUI comme un navigateur ou un client de chat, ou de faire l’inverse, ce qui est aussi utile pour des scripts shell d’automatisation du bureau
Sur macOS, il faut passer par
osascriptpour appeler AppleScript et utiliserset the clipboard to...[0] https://github.com/astrand/xclip
[1] https://github.com/bugaevc/wl-clipboard
Si l’on copie du texte sur son téléphone, on peut ensuite le récupérer directement avec
pbpastedepuis la ligne de commande du Macpbpaste | vipe | pbcopyIci, vipe est un utilitaire qui insère un éditeur, généralement vim, au milieu d’un pipeline, et on peut le voir sur https://joeyh.name/code/moreutils/
Ce n’est pas un outil en ligne de commande, mais Network Link Conditioner est lui aussi excellent
Il permet de simuler un très mauvais réseau en ajoutant de la latence, des limites de bande passante, des pertes de paquets, etc., ce qui est utile pour les tests
Lors de réunions où l’on vous demande absolument d’activer la caméra, on peut aussi dégrader volontairement sa connexion pour afficher une vidéo pixelisée et une voix de robot, puis la voir redevenir « magiquement » normale quand tout le monde demande de couper la vidéo
https://developer.apple.com/download/all/
https://tldp.org/HOWTO/Traffic-Control-HOWTO/components.html
Elle configure des règles qui injectent de la latence sur les paquets ou en suppriment un certain pourcentage selon le profil
Sur macOS, on peut faire des choses similaires, voire davantage, avec
dnctletpfctlIl faut aussi absolument mentionner afplay pour la lecture audio
On peut s’en servir pour fabriquer facilement un lecteur MP3 en ligne de commande
Il y a aussi l’utilitaire
saypour la synthèse vocale, qui prend en charge le format TUNE, ce qui permet d’ajuster la mélodie complète et le timing d’une élocution pour lui donner un rendu plus expressifLe Speech Synthesis Programming Guide d’Apple se trouve ici : https://josh8.com/blog/img/speech-synthesis.pdf, et un article connexe est résumé ici : https://josh8.com/blog/commandline-audio-mac.html
La dernière génération de synthèse vocale à l’avoir pris en charge était la voix Alex incluse en 2007, et il semble très peu probable qu’on le revoie un jour
Le contrôle fin de la synthèse et le naturel sont fondamentalement en tension, et le second a bien plus de valeur
say -v '?'Pour gagner en productivité ou faire une présentation, je masque toutes les icônes et tous les dossiers du bureau
En lançant
defaults write com.apple.finder CreateDesktop 0puiskillall Finder, ils disparaissent, et en remettant la valeur à1, ils réapparaissentJ’en ai même fait un alias bash pour basculer entre les deux, et le gist est ici : https://gist.github.com/berndverst/6f58c0d6aedddb6c06c23e57d...
Pourtant, j’utilise souvent
~/Desktop, au point que c’est l’un des deux dossiers que je garde dans le Dock, l’autre étant~/DownloadsCela dit, l’arrivée des Stacks sur le bureau de macOS a été excellente, et c’est une fonction que je montre toujours aux gens dont le bureau est envahi de fichiers
C’est pratique de la regrouper avec d’autres réglages utiles en contexte de présentation
Bonne liste, et il y a aussi hidutil
https://developer.apple.com/library/archive/technotes/tn2450...
Par exemple, sur un clavier PC, on peut remapper la touche
Ins, presque inutile sur macOS, en quelque chose commePC Execute, puis la faire intercepter par Keyboard Maestro pour la remapper à nouveauhidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000035}]}', on peut transformer la toucheparagraphen haut à gauche d’un clavier européen en un backtick plus utilehttps://hidutil-generator.netlify.app/
Par exemple, on peut détacher un lecteur USB avec
hdiutil detach /Volumes/some-usb-drive, ou créer un ISO avechdiutil makehybrid -joliet -o foo.iso ./srcfolder/Il y a quelques années, j’avais ajouté une commande say à la fin d’un script qui cherchait quelque chose dans un gros bloc de données et devait me prévenir une fois terminé
J’avais oublié ce détail et je me suis endormi ; quelques heures plus tard, je me suis réveillé d’un bond en entendant dans mon bureau à domicile une voix qui ressemblait à celle d’un “intrus” parlant à son complice, et je n’ai été vraiment rassuré qu’après avoir compris ce qui se passait
pushqui prend un titre et un corps facultatifC’était pratique à utiliser comme
./longRunningCommand && push "Task Done" "Here is a body", et je l’employais aussi avec un scriptbeepqui se contentait de faire un son de fin quand j’étais devant l’ordinateursaysur un Mac après compromissionJe n’en ai jamais vu d’usage réel, mais j’attends toujours le jour où apparaîtra un thread Twitter commençant par : « j’ai utilisé un module msf qui appelait
saysur le portable d’un client »J’ai donc ajouté un script fish de fin de commande qui joue un bip avec
afplaysi la tâche a pris plus de 5 secondesÇa aide à se reconcentrer sur les tâches « juste assez longues pour être oubliées »
L’utilitaire en ligne de commande diskutil de macOS mérite aussi des éloges
Aujourd’hui, j’avais un problème avec certaines tranches de disque, que l’utilitaire graphique Disk Utility de macOS ne pouvait pas corriger ; c’était un reste d’anciens essais avec Asahi Linux
Je me suis dit qu’il devait y avoir un moyen de le résoudre avec la CLI
diskutil, et j’ai trouvé la solution dans le fil suivanthttps://apple.stackexchange.com/questions/411544/cant-reclai...
Je peux maintenant réutiliser tout le disque sous macOS
diskutilest excellent, mais l’état actuel de Disk Utility.app est navrantDepuis le passage à APFS, l’application a visiblement été délaissée, et il arrive que la GUI échoue complètement sur des opérations que
diskutilréussitAvant la refonte de l’interface, c’était un outil solide qui, même en cas d’échec, expliquait pourquoi ; aujourd’hui, c’est devenu une interface façon LEGO Duplo pour bébés, à peine bonne à formater une clé USB
Quand on ne se souvient plus d’une commande ou de ses paramètres, um vaut aussi le détour
https://github.com/promptops/cli
Par exemple, si on saisit
um prevent my mac from sleeping for 30m, il renvoie quelque chose commecaffeinate -u -t 1800open est une commande simple et excellente que j’utilise en permanence
alias tab='open . -a iterm',alias phpstorm='open -a "PhpStorm"',alias smerge='open -a "Sublime Merge"'par exemple ; je m’en sers plus souvent que des boîtes de dialogue Open/Recents de chaque applicationopen -a ..., l’autocomplétion par tabulation est atroce depuis des années parce qu’Apple ne met pas à jour sa définition de complétionJ’ai laissé une solution de contournement dans cette réponse Stack Overflow : https://stackoverflow.com/a/63097652
-nElle permet de lancer plusieurs instances de la même application, et c’était autrefois l’un de mes utilitaires les plus utilisés
Aujourd’hui, je m’en sers moins souvent, car il y a moins d’apps avec des problèmes de conception à ce point graves
On peut utiliser
/Applications/Sublime Merge.app/Contents/SharedSupport/bin/smergeet/Applications/Sublime Text.app/Contents/SharedSupport/bin/sublhttps://github.com/davatorium/rofi
Ça ressemble à https://i.imgur.com/Hm9TGeV.jpg
Dans le terminal de VS Code, en utilisant l’alias
o, ça s’ouvre à l’emplacement courant, puis on peut y chercher un fichier et l’ouvrir dans l’éditeuralias finder='open .'