- Solo con la Terminal se pueden manejar funciones propias de macOS como ahorro de energía, portapapeles, Finder, Spotlight y actualizaciones, reduciendo tareas repetitivas en la GUI
caffeinate,pmsetytaskpolicyinfluyen directamente en el comportamiento del sistema, como evitar el reposo, revisar el estado de energía y ajustar la prioridad de ejecución de procesos- Con
pbcopy,pbpaste,open,screencaptureysay, es fácil incorporar en scripts tareas cotidianas como usar el portapapeles, abrir archivos, tomar capturas de pantalla y generar salida de voz sips,textutil,mdfindymdlsse usan como herramientas de procesamiento de archivos para automatizar conversiones de imágenes y documentos, búsquedas basadas en Spotlight y revisión de metadatosnetworkQuality,networksetup,softwareupdateysystem_profilerpermiten revisar rápidamente la calidad de red, Wi‑Fi/DNS, actualizaciones del sistema operativo e información de hardware y software
Alcance de los comandos exclusivos de macOS
- Además de las herramientas Unix estándar, macOS incluye herramientas de línea de comandos dedicadas para acceder a funciones del sistema operativo
- El uso detallado de cada comando puede consultarse con
man <command> - El entorno de referencia es macOS Sonoma
Energía, reposo y control de procesos
-
caffeinate- Evitar que la Mac entre en reposo- Si se ejecuta
caffeinatesin flags ni argumentos, la Mac no entrará en reposo mientras el comando esté en ejecución caffeinate -u -t <seconds>aplica la prevención de reposo durante la cantidad de segundos especificada- Si se agrega el flag
-d, también evita que la pantalla entre en reposo - Con
-w <pid>se especifica un proceso existente, ycaffeinatetambién termina cuando ese proceso finaliza caffeinate <command>inicia el comando dado como un nuevo proceso y evita el reposo hasta que ese proceso termine
- Si se ejecuta
-
pmset- Consultar y controlar el estado de administración de energíapmset -gmuestra la información de configuración de energía disponiblepmset -g assertionsmuestra las assertions relacionadas con energía creadas por otros procesos, útil para encontrar procesos que impiden que la Mac entre en reposopmset -g thermlogmuestra información de procesos con throttling, útil como referencia al ejecutar benchmarkspmset displaysleepnowpone inmediatamente en reposo solo la pantalla, sin suspender todo el sistemapmset sleepnowpone inmediatamente en reposo todo el sistema
-
taskpolicy- Control de scheduling de procesostaskpolicy -b <command>ejecuta el comando dado en segundo plano y, en Macs con Apple silicon, solo se ejecuta en los núcleos de eficienciataskpolicy -b -p <pid>reduce un proceso existente a ejecución en segundo planotaskpolicy -B -p <pid>elimina el estado de ejecución en segundo plano del proceso especificado- En Macs con Apple silicon, después de esto puede ejecutarse en núcleos de eficiencia o de rendimiento
- Este comportamiento solo se aplica a procesos que fueron reducidos a segundo plano, no a procesos iniciados en segundo plano desde el principio
taskpolicy -s <command>inicia el comando dado en estado suspendido, lo que permite adjuntar un depurador en el momento en que comienza la ejecución
Portapapeles, apertura de apps, capturas de pantalla y salida de voz
-
pbcopy,pbpaste- Usar el portapapeles del sistema<command> | pbcopycopia el resultado de salida del comando al portapapelespbpasteenvía el contenido del portapapeles a la salida estándar
-
open- Abrir archivos y aplicacionesopen -a <app> <file>abre el archivo especificado con una aplicación concreta- Si se agrega el flag
-g, abre el archivo en segundo plano manteniendo el foco en la aplicación actual open .abre el directorio actual en una nueva ventana de Finderopen -R <file>muestra el archivo especificado en una nueva ventana de Finder
-
screencapture- Tomar capturas de pantallascreencapture -ctoma una captura de pantalla y la copia al portapapelesscreencapture <file>guarda la captura de pantalla en el archivo especificado- Si se agrega el flag
-T <seconds>, espera la cantidad de segundos indicada antes de capturar
-
say- Conversión de texto a vozsay <message>reproduce el mensaje dado como vozsay -f input.txt -o output.aiffgenera un audiolibro a partir del archivo de texto especificado
Imágenes, documentos, búsqueda y metadatos
-
sips- Manipulación de imágenessips -z <height> <width> <image>redimensiona la imagen al tamaño indicado, ignorando la relación de aspecto originalsips -Z <size> <image>ajusta el lado más largo al tamaño especificado manteniendo la relación de aspectosips -c <height> <width> <image>hace un recorte al tamaño indicado tomando como referencia el centro de la imagen originalsips -r <degrees> <image>rota la imagen la cantidad de grados especificada- El comportamiento predeterminado sobrescribe destructivamente la imagen de entrada, por lo que se debe usar el flag
-osi se necesita otra ruta de salida - El archivo de salida debe tener la misma extensión que la imagen de entrada
-
textutil- Conversión de archivos de documentostextutilpuede convertir archivos entre formatos Microsoft Word, texto plano, texto enriquecido y HTMLtextutil -convert html journal.docconviertejournal.docenjournal.html- Los valores que se pueden usar con
-convertsontxt,html,rtf,rtfd,docydocx
-
mdfind,mdls- Búsqueda de Spotlight y metadatosmdfind <query>realiza una búsqueda por palabras clave de Spotlight con la consulta dadamdfind kMDItemAppStoreHasReceipt=1encuentra todas las apps instaladas desde la Mac App Storemdfind -name <name>busca todos los archivos que coincidan con el nombre especificado- Con el flag
-onlyin <dir>se puede limitar el alcance de la búsqueda a un directorio concreto mdls <file-path>muestra todos los metadatos de Spotlight asociados al archivo especificado
Red, actualizaciones e información del sistema
-
networkQuality- Medición de velocidad de internetnetworkQualityejecuta una prueba de velocidad de internet en la Mac- Si se agrega el flag
-v, se puede ver información más detallada - El flag
-Iejecuta la prueba en una interfaz de red específica
-
networksetup- Consultar y configurar ajustes de rednetworksetup -listnetworkserviceordermuestra la lista de servicios de red disponiblesnetworksetup -getinfo <networkservice>muestra la información del servicio de red especificadonetworksetup -getdnsservers <networkservice>muestra los servidores DNS del servicio de red especificadonetworksetup -setairportnetwork <device> <network> [password]se conecta a la red Wi‑Fi especificada- En la mayoría de los casos, el argumento
<device>es"en0"
-
softwareupdate- Administrar actualizaciones del sistema operativosoftwareupdate --listmuestra las actualizaciones de software disponiblessudo softwareupdate -iainstala todas las actualizaciones disponiblessoftwareupdate --fetch-full-installer --full-installer-version <version>intenta descargar en/Applicationsel instalador completo de la versión de macOS especificada
-
system_profiler- Consultar información del sistemasystem_profilermuestra de forma predeterminada toda la información del sistema disponible, y la salida suele ser bastante extensasystem_profiler <datatype>muestra solo la información del subsistema especificadosystem_profiler -listDataTypesmuestra la lista de todos los subsistemas de los que se puede obtener información- Algunos tipos de datos útiles son los siguientes
system_profiler SPHardwareDataType: muestra un resumen del hardware de la Mac actual, el nombre del modelo y el número de seriesystem_profiler SPSoftwareDataType: muestra un resumen del software de la Mac actual y el número exacto de versión de macOSsystem_profiler SPPowerDataType: muestra información de energía y batería, incluida la potencia AC actual y el número de ciclos de la bateríasystem_profiler SPDeveloperToolsDataType: muestra las herramientas de desarrollo de Xcode actualmente activas y las versiones del SDK
5 comentarios
Comandos avanzados de Terminal para MacBook que te ayudan en la vida (para usuarios comunes)
https://www.youtube.com/watch?v=EhiqpFtmjig
Comandos avanzados de CLI en macOS
Yo había subido un resumen del mismo artículo hace 7 meses, pero este resumen está mejor para leerlo.. T_T
Mejor así, creo; incluso reduciéndolo más o menos a lo que resumiste se entiende sin problema jaja
No es así...... jaja
Comentarios de Hacker News
Si usas sips y iconutil juntos, puedes crear un archivo
.icnspara una app a partir de un solo PNG de 1024×1024 sin herramientas de tercerosCrea el iconset con
mkdir MyIcon.iconset, genera los tamaños 16/32/128/256/512 y los archivos@2xconsips -z, y luego ejecutaiconutil -c icns MyIcon.iconsetComo extra, también puedes crear un
.icoconffmpeg -i MyIcon.iconset/icon_256x256.png icon.icoAunque queda la duda de si, por la forma en que
sipsreduce PNG, conviene más generar la versión de 16px directamente desde 1024px o ir reduciendo gradualmente desde 32pxcppara crear un PNG de 1024×1024qlmanage -t -s 1024x1024 -o MyIcon.iconset/Icon1024.png icon.svgAunque al revisar los íconos del sistema de macOS, parece que hoy en día ya no están ajustados a mano
De la lista, me gustan especialmente pbcopy y pbpaste
Cuando trabajo con JSON comprimido, voy a iTerm y ejecuto
pbpaste | json_pp | pbcopy; así la salida formateada queda en el portapapeles y es comodísimopbpaste | something | pbcopy, vale la pena convertirlo en una función de shellSe puede usar como
pbfilter json_pp,pbfilter base64 -d,pbfilter sed 's/this/that/'Si ejecutas
pbfiltersin argumentos, también puede funcionar como un filtro para quitar el formato del portapapeles y dejar solo texto planoEso sí, no sirve para alias, pipelines ni expresiones complejas; el comando del filtro tiene que ser un comando normal o función con sus argumentos
Por ejemplo, las dobles líneas en blanco que aparecen al copiar/pegar estilo Windows se pueden limpiar con
alias winlines="sed '/^$/{$!{N;s/\n//;};}'"yalias pbw="pbpaste | winlines | pbcopy"En Linux también se puede imitar algo parecido a macOS con
alias pbcopy='xsel --clipboard --input'yalias pbpaste='xsel --clipboard --output'En X11 está
xclip[0] y en Waylandwl-clipboard[1], que también soportan formatos binarios mediante parsing de headers o configuración explícita de tipos MIMEAsí puedes copiar imágenes desde la terminal y pegarlas en programas GUI como un navegador o un cliente de chat, o hacer lo contrario, y también sirven para scripts de automatización de escritorio
En macOS hace falta recurrir a AppleScript vía
osascripty usarset the clipboard to...[0] https://github.com/astrand/xclip
[1] https://github.com/bugaevc/wl-clipboard
Si copias texto en el teléfono, puedes traerlo enseguida a la línea de comandos de la Mac con
pbpastepbpaste | vipe | pbcopyAquí vipe es una utilidad que inserta un editor, normalmente vim, en medio de un pipe, y se puede ver en https://joeyh.name/code/moreutils/
No es una herramienta de línea de comandos, pero Network Link Conditioner también es excelente
Te permite simular una red muy mala añadiendo latencia, ancho de banda limitado, pérdida de paquetes y más, así que es muy útil para pruebas
Incluso en reuniones donde insisten en que enciendas la cámara, puedes arruinar a propósito la conexión para que se vea video pixelado y voz robótica, y cuando todos te pidan apagar el video, “mágicamente” todo vuelve a la normalidad
https://developer.apple.com/download/all/
https://tldp.org/HOWTO/Traffic-Control-HOWTO/components.html
Configura reglas para inyectar latencia de paquetes o descartar cierto porcentaje de paquetes según el perfil
En macOS, con
dnctlypfctlpuedes hacer algo similar, e incluso másTambién hay que mencionar afplay para reproducir audio
Con esto se puede armar un reproductor MP3 sencillo desde la línea de comandos
También está la utilidad
saypara síntesis de voz, que soporta el formato TUNE, así que se puede ajustar la melodía y el timing completos de la locución y hacer que suene como si tuviera emociónLa guía Apple Speech Synthesis Programming Guide está en https://josh8.com/blog/img/speech-synthesis.pdf y el artículo relacionado está resumido en https://josh8.com/blog/commandline-audio-mac.html
La última generación de síntesis de voz que lo soportó fue la voz Alex incluida en 2007, y parece muy poco probable que volvamos a verla
El control preciso de la síntesis y la naturalidad están esencialmente en tensión, y esta última vale mucho más
say -v '?'Cuando quiero ser más productivo o voy a dar una presentación, oculto todos los íconos y carpetas del escritorio
Si ejecutas
defaults write com.apple.finder CreateDesktop 0y luegokillall Finder, se ocultan; si cambias el valor a1, vuelven a aparecerTambién me hice un alias de bash para alternarlo, y el gist está en https://gist.github.com/berndverst/6f58c0d6aedddb6c06c23e57d...
Aun así uso mucho
~/Desktop, así que es una de las dos carpetas que dejo en el Dock; la otra es~/DownloadsPor otro lado, fue excelente que llegaran los Stacks al escritorio de macOS, y siempre se lo muestro a la gente que tiene el escritorio hecho un caos de archivos
Conviene agruparlo con otras configuraciones que puedan servir en una presentación
Buena lista, y también está hidutil
https://developer.apple.com/library/archive/technotes/tn2450...
Por ejemplo, en un teclado de PC puedes cambiar la tecla
Ins, que en macOS casi no sirve para nada, por algo comoPC Execute, y luego capturarla en Keyboard Maestro para volver a mapearlahidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000035}]}'puedes cambiar la teclaparagraphde la esquina superior izquierda de un teclado europeo por una backtick más útilhttps://hidutil-generator.netlify.app/
Por ejemplo, con
hdiutil detach /Volumes/some-usb-drivepuedes desmontar una unidad USB, o conhdiutil makehybrid -joliet -o foo.iso ./srcfolder/puedes crear una ISOHace unos años, mientras hacía un script para buscar algo en un gran bloque de datos y avisarme cuando terminara, le puse al final el comando say
Me olvidé de eso y me quedé dormido, y unas horas después me desperté de golpe al oír en la oficina de mi casa una voz que sonaba como “un intruso” hablándole a su cómplice; recién cuando entendí qué pasaba me tranquilicé muchísimo
pushque recibe un título y un cuerpo opcionalEra cómodo usarlo como
./longRunningCommand && push "Task Done" "Here is a body", y también lo usaba junto con un scriptbeepque solo emitía un sonido para avisar que había terminado cuando yo estaba frente a la computadorasayen una Mac después de comprometerlaNunca he visto que alguien lo use de verdad, pero algún día espero ver un hilo de Twitter que empiece con “usé un módulo de msf que llamaba a
sayen la laptop del cliente”Por eso agregué un script de finalización de comandos en fish que hace sonar un bip con
afplaysi la tarea tardó más de 5 segundosAyuda a volver a concentrarse en tareas “justo lo bastante largas como para olvidarlas”
La utilidad de línea de comandos diskutil de macOS también merece elogios
Hoy tuve un problema con algunos slices del disco, y la utilidad gráfica Disk Utility de macOS no podía arreglarlo; eran restos de cuando estuve probando Asahi Linux
Pensé que tenía que haber una forma de resolverlo con la CLI de
diskutil, y encontré la solución en el siguiente hilohttps://apple.stackexchange.com/questions/411544/cant-reclai...
Ahora puedo volver a usar todo el disco desde macOS
diskutiles excelente, pero es desolador en lo que se convirtió Disk Utility.appDesde la transición a APFS no ha recibido un mantenimiento adecuado, y hay casos en los que
diskutilpuede hacer algo que la app GUI simplemente no lograAntes del rediseño de la interfaz era una herramienta sólida que al menos te decía por qué había fallado, pero ahora parece una interfaz tipo LEGO Duplo para bebés que apenas alcanza para formatear una memoria USB
Cuando no recuerdas un comando o parámetro, también vale la pena probar um
https://github.com/promptops/cli
Por ejemplo, si escribes
um prevent my mac from sleeping for 30m, te devuelve algo comocaffeinate -u -t 1800open es un comando simple y bueno que uso siempre
alias tab='open . -a iterm',alias phpstorm='open -a "PhpStorm"',alias smerge='open -a "Sublime Merge"'; los dejo configurados así y los uso más seguido que los cuadros de diálogo Open/Recents de cada app-nTe permite ejecutar múltiples instancias de la misma aplicación, y antes era, en lo personal, una de las utilidades que más usaba
Hoy la uso menos porque ya hay menos apps con problemas de diseño tan graves
open -a ...se siente horrible desde hace años porque Apple no actualiza la definición de completadoDejé una solución alternativa en esta respuesta de Stack Overflow: https://stackoverflow.com/a/63097652
Puedes usar
/Applications/Sublime Merge.app/Contents/SharedSupport/bin/smergey/Applications/Sublime Text.app/Contents/SharedSupport/bin/sublhttps://github.com/davatorium/rofi
Se ve como https://i.imgur.com/Hm9TGeV.jpg
En la terminal de VS Code, si usas el alias
o, se abre en la ubicación actual y desde ahí puedes buscar archivos para abrirlos en el editoralias finder='open .'