13P by GN⁺ | ★ favorite | 댓글 5개
  • 터미널만으로 절전, 클립보드, Finder, Spotlight, 업데이트 같은 macOS 고유 기능을 다룰 수 있어 GUI 반복 작업을 줄일 수 있음
  • caffeinate, pmset, taskpolicy는 잠자기 방지와 전원 상태 확인, 프로세스 실행 우선순위 조정처럼 시스템 동작에 직접 영향을 줌
  • pbcopy, pbpaste, open, screencapture, say를 쓰면 클립보드, 파일 열기, 스크린샷, 음성 출력 같은 일상 작업을 스크립트에 넣기 쉬움
  • sips, textutil, mdfind, mdls는 이미지·문서 변환과 Spotlight 기반 검색, 메타데이터 확인을 자동화하는 파일 처리 도구로 활용됨
  • networkQuality, networksetup, softwareupdate, system_profiler는 네트워크 품질, Wi‑Fi/DNS, OS 업데이트, 하드웨어·소프트웨어 정보를 빠르게 점검하게 해줌

macOS 전용 명령어의 범위

  • macOS는 표준 Unix 도구 외에도 운영체제 기능에 접근하는 전용 커맨드라인 도구를 포함함
  • 각 명령의 자세한 사용법은 man <command>로 확인할 수 있음
  • 기준 환경은 macOS Sonoma

전원, 절전, 프로세스 제어

  • caffeinate - Mac 잠자기 방지

    • caffeinate를 플래그나 인자 없이 실행하면 명령이 실행되는 동안 Mac이 잠자기 상태로 들어가지 않음
    • caffeinate -u -t <seconds>는 지정한 초 동안 절전 방지를 적용함
    • -d 플래그를 추가하면 디스플레이 잠자기도 막음
    • -w <pid>로 기존 프로세스를 지정하면 해당 프로세스가 종료될 때 caffeinate도 함께 끝남
    • caffeinate <command>는 주어진 명령을 새 프로세스로 시작하고, 그 프로세스가 끝날 때까지 잠자기를 방지함
  • pmset - 전원 관리 상태 확인과 제어

    • pmset -g는 사용 가능한 전원 설정 정보를 출력함
    • pmset -g assertions는 다른 프로세스가 만든 전원 관련 assertion을 보여줘 Mac의 잠자기를 막는 프로세스를 찾는 데 유용함
    • pmset -g thermlog는 스로틀링된 프로세스 정보를 표시해 벤치마크 실행 시 참고할 수 있음
    • pmset displaysleepnow는 시스템 전체를 재우지 않고 디스플레이만 즉시 잠자기 상태로 전환함
    • pmset sleepnow는 전체 시스템을 즉시 잠자기 상태로 전환함
  • taskpolicy - 프로세스 스케줄링 제어

    • taskpolicy -b <command>는 주어진 명령을 백그라운드로 실행하며, Apple silicon Mac에서는 효율 코어에서만 실행됨
    • taskpolicy -b -p <pid>는 기존 프로세스를 백그라운드 실행으로 낮춤
    • taskpolicy -B -p <pid>는 지정한 프로세스의 백그라운드 실행 상태를 제거함
      • Apple silicon Mac에서는 이후 효율 코어나 성능 코어에서 실행될 수 있음
      • 이 동작은 백그라운드로 낮춰진 프로세스에만 적용되며, 처음부터 백그라운드에서 시작한 프로세스에는 적용되지 않음
    • taskpolicy -s <command>는 주어진 명령을 일시 중단 상태로 시작해 실행 시작 시점에 디버거를 붙일 수 있게 함

클립보드, 앱 실행, 스크린샷, 음성 출력

  • pbcopy, pbpaste - 시스템 클립보드 사용

    • <command> | pbcopy는 명령 출력 결과를 클립보드에 복사함
    • pbpaste는 클립보드 내용을 표준 출력으로 내보냄
  • open - 파일과 애플리케이션 열기

    • open -a <app> <file>은 지정한 파일을 특정 애플리케이션으로 엶
    • -g 플래그를 추가하면 현재 애플리케이션의 포커스를 유지한 채 파일을 백그라운드에서 엶
    • open .은 현재 디렉터리를 새 Finder 창으로 엶
    • open -R <file>은 지정한 파일을 새 Finder 창에서 표시함
  • screencapture - 스크린샷 촬영

    • screencapture -c는 스크린샷을 찍어 클립보드에 복사함
    • screencapture <file>은 스크린샷을 지정한 파일에 저장함
    • -T <seconds> 플래그를 추가하면 지정한 초만큼 기다린 뒤 촬영함
  • say - 텍스트 음성 변환

    • say <message>는 주어진 메시지를 음성으로 출력함
    • say -f input.txt -o output.aiff는 지정한 텍스트 파일에서 오디오북을 생성함

이미지, 문서, 검색과 메타데이터

  • sips - 이미지 조작

    • sips -z <height> <width> <image>는 기존 종횡비를 무시하고 이미지를 지정한 크기로 리사이즈함
    • sips -Z <size> <image>는 종횡비를 유지하면서 가장 긴 변을 지정한 크기로 맞춤
    • sips -c <height> <width> <image>는 원본 이미지의 중심을 기준으로 지정한 크기로 크롭
    • sips -r <degrees> <image>는 이미지를 지정한 각도만큼 회전함
    • 기본 동작은 입력 이미지를 파괴적으로 덮어쓰기 때문에 다른 출력 경로가 필요하면 -o 플래그를 사용함
    • 출력 파일은 입력 이미지와 같은 파일 확장자를 가져야 함
  • textutil - 문서 파일 변환

    • textutil은 Microsoft Word, 일반 텍스트, 리치 텍스트, HTML 포맷 사이에서 파일을 변환할 수 있음
    • textutil -convert html journal.docjournal.docjournal.html로 변환함
    • -convert에 사용할 수 있는 값은 txt, html, rtf, rtfd, doc, docx
  • mdfind, mdls - Spotlight 검색과 메타데이터

    • mdfind <query>는 주어진 쿼리로 Spotlight 키워드 검색을 수행함
    • mdfind kMDItemAppStoreHasReceipt=1은 Mac App Store에서 설치된 모든 앱을 찾음
    • mdfind -name <name>은 지정한 이름과 일치하는 모든 파일을 검색함
    • -onlyin <dir> 플래그로 검색 범위를 특정 디렉터리로 제한할 수 있음
    • mdls <file-path>는 지정한 파일에 연결된 모든 Spotlight 메타데이터를 출력함

네트워크, 업데이트, 시스템 정보

  • networkQuality - 인터넷 속도 측정

    • networkQuality는 Mac에서 인터넷 속도 테스트를 실행함
    • -v 플래그를 추가하면 더 자세한 정보를 볼 수 있음
    • -I 플래그는 특정 네트워크 인터페이스에서 테스트를 실행함
  • networksetup - 네트워크 설정 확인과 구성

    • networksetup -listnetworkserviceorder는 사용 가능한 네트워크 서비스 목록을 출력함
    • networksetup -getinfo <networkservice>는 지정한 네트워크 서비스 정보를 보여줌
    • networksetup -getdnsservers <networkservice>는 지정한 네트워크 서비스의 DNS 서버를 출력함
    • networksetup -setairportnetwork <device> <network> [password]는 지정한 Wi‑Fi 네트워크에 접속함
    • 대부분의 경우 <device> 인자는 "en0"
  • softwareupdate - OS 업데이트 관리

    • softwareupdate --list는 사용 가능한 소프트웨어 업데이트를 출력함
    • sudo softwareupdate -ia는 사용 가능한 모든 업데이트를 설치함
    • softwareupdate --fetch-full-installer --full-installer-version <version>은 지정한 macOS 버전의 전체 설치 프로그램을 /Applications에 다운로드하려고 시도함
  • system_profiler - 시스템 정보 조회

    • system_profiler는 기본적으로 사용 가능한 모든 시스템 정보를 출력하며, 출력량이 대체로 많음
    • system_profiler <datatype>은 지정한 하위 시스템 정보만 출력함
    • system_profiler -listDataTypes는 정보를 가져올 수 있는 모든 하위 시스템 목록을 보여줌
    • 유용한 데이터 타입은 다음과 같음
      • system_profiler SPHardwareDataType: 현재 Mac의 하드웨어 개요, 모델명, 일련번호를 출력함
      • system_profiler SPSoftwareDataType: 현재 Mac의 소프트웨어 개요와 정확한 macOS 버전 번호를 출력함
      • system_profiler SPPowerDataType: 현재 AC 전력량과 배터리 사이클 수를 포함한 전원·배터리 정보를 출력함
      • system_profiler SPDeveloperToolsDataType: 현재 활성화된 Xcode 개발 도구와 SDK 버전을 출력함

댓글과 토론

인생에 도움되는 맥북 고오급 터미널 명령어들 (일반인용)
https://www.youtube.com/watch?v=EhiqpFtmjig

macOS의 고급 CLI 명령들

같은 글을 제가 7달전에 요약해서 올린게 있는데, 이쪽 요약이 더 볼만 하군요.. ㅠ

요약해 주신 내용 정도로 줄여도 이해하는데 무리 없어서 그런지 더 좋은데요 ㅎ

그렇지 않습니다......ㅎㅎ

Hacker News 의견들
  • sipsiconutil을 함께 쓰면 서드파티 도구 없이 1024×1024 PNG 하나로 앱용 .icns 파일을 만들 수 있음
    mkdir MyIcon.iconset로 아이콘셋을 만들고, sips -z로 16/32/128/256/512 크기와 @2x 파일들을 생성한 뒤 iconutil -c icns MyIcon.iconset를 실행하면 됨
    보너스로 ffmpeg -i MyIcon.iconset/icon_256x256.png icon.ico.ico도 만들 수 있음
    다만 sips가 PNG를 축소하는 방식상 16px 버전을 1024px에서 바로 만드는 게 나은지, 32px에서 단계적으로 줄이는 게 나은지는 궁금함

    • 시작 파일이 SVG라면 cp 대신 먼저 qlmanage를 써서 1024×1024 PNG를 만들 수 있음
      qlmanage -t -s 1024x1024 -o MyIcon.iconset/Icon1024.png icon.svg
    • 정말 보기 좋은 작은 아이콘, 특히 16×16이나 32×32를 원하면 축소한 뒤 손으로 다듬어야 선명해짐
      다만 macOS 시스템 아이콘을 확인해 보니 요즘은 더 이상 손으로 조정한 것 같지는 않음
  • 목록에서 pbcopypbpaste를 특히 좋아함
    압축된 JSON을 다룰 때 iTerm으로 가서 pbpaste | json_pp | pbcopy를 실행하면 정리된 출력이 클립보드에 들어가서 아주 편함

    • pbpaste | something | pbcopy 패턴을 자주 쓰다 보니 셸 함수로 만들어둘 만함
      pbfilter json_pp, pbfilter base64 -d, pbfilter sed 's/this/that/' 같은 식으로 쓸 수 있음
      인자 없이 pbfilter만 실행하면 클립보드의 서식을 제거하고 순수 텍스트만 남기는 필터로도 동작함
      다만 별칭, 파이프라인, 복잡한 표현식에는 못 쓰고 필터 명령은 일반 명령이나 함수와 그 인자여야 함
    • 이 흐름은 텍스트 문제를 해결하는 강력하고 깔끔한 방식임
      예를 들어 Windows식 복사/붙여넣기에서 생기는 이중 빈 줄은 alias winlines="sed '/^$/{$!{N;s/\n//;};}'"alias pbw="pbpaste | winlines | pbcopy"로 정리할 수 있음
      Linux에서도 alias pbcopy='xsel --clipboard --input', alias pbpaste='xsel --clipboard --output'로 macOS 비슷하게 흉내 낼 수 있음
    • 이것들이 일반 텍스트RTF에서만 동작하는 점은 꽤 짜증남
      X11에는 xclip[0], Wayland에는 wl-clipboard[1]가 있고, 헤더 파싱이나 명시적 MIME 타입 설정으로 바이너리 파일 형식도 지원함
      그래서 터미널에서 이미지를 복사해 브라우저나 채팅 클라이언트 같은 GUI 프로그램에 붙여넣거나 반대로 가져오는 일이 가능하고, 데스크톱 자동화 셸 스크립트에도 유용함
      macOS에서는 osascript로 AppleScript를 호출해 set the clipboard to...를 쓰는 우회가 필요함
      [0] https://github.com/astrand/xclip
      [1] https://github.com/bugaevc/wl-clipboard
    • 휴대폰과 함께 pbcopy/pbpaste를 쓰는 것도 멋짐
      휴대폰에서 텍스트를 복사하면 Mac 명령줄에서 바로 pbpaste로 가져올 수 있음
    • 클립보드 내용을 편집할 때는 pbpaste | vipe | pbcopy를 씀
      여기서 vipe는 파이프 중간에 편집기, 보통 vim을 끼워 넣는 유틸리티이고 https://joeyh.name/code/moreutils/에서 볼 수 있음
  • 명령줄 도구는 아니지만 Network Link Conditioner도 정말 좋음
    지연 시간, 대역폭, 패킷 손실 등을 넣어 아주 나쁜 네트워크를 시뮬레이션할 수 있어서 테스트에 유용함
    카메라를 꼭 켜라고 하는 회의에서도 연결을 일부러 엉망으로 만들어 블록 깨진 영상과 로봇 목소리를 보이게 한 뒤, 모두가 비디오를 끄라고 하면 “마법처럼” 정상화할 수도 있음

    • Comcast도 macOS, BSD, Linux에서 같은 일을 해주고 이름도 기가 막힘
    • Toxiproxy는 다른 환경에서 쓸 수 있는 비슷한 도구이고, 타임아웃, 재시도, 패킷 손실 같은 열악한 조건에서 네트워크 코드를 테스트하고 개선하는 데 도움이 됐음
    • 이런 도구가 있는지 몰랐고, “additional tools for X-Code” 패키지 안에도 몰랐던 멋진 도구들이 더 있음
      https://developer.apple.com/download/all/
    • Linux에서는 네트워크 QoS 도구로 초고수처럼 비슷한 일을 할 수 있음
      https://tldp.org/HOWTO/Traffic-Control-HOWTO/components.html
    • NLC는 dummynet과 PF(packet filter)를 제어하는 GUI 인터페이스임
      프로필에 따라 패킷 지연을 주입하거나 일정 비율의 패킷을 드롭하는 규칙을 설정함
      macOS에서는 dnctlpfctl을 쓰면 비슷한 작업, 더 나아가 더 많은 작업도 가능함
  • 오디오 재생용 afplay도 꼭 언급해야 함
    이걸로 간단히 명령줄 MP3 플레이어를 만들 수 있음
    음성 합성용 say 유틸리티도 있는데, TUNE 형식을 지원해서 발화의 전체 멜로디와 타이밍을 조정하고 감정이 담긴 것처럼 들리게 만들 수 있음
    Apple의 Speech Synthesis Programming Guide는 https://josh8.com/blog/img/speech-synthesis.pdf에 있고, 관련 글은 https://josh8.com/blog/commandline-audio-mac.html에 정리해 둠

    • 아쉽게도 TUNE 형식은 진화적으로 막다른 길에 가까웠음
      이를 지원한 마지막 세대의 음성 합성은 2007년에 포함된 Alex 음성이고, 다시 보게 될 가능성은 매우 낮아 보임
      합성을 정밀하게 제어하는 것과 자연스러움은 본질적으로 긴장 관계에 있고, 후자가 훨씬 더 가치 있음
    • 작은 정정 하나로, 음성 목록을 보는 명령은 say -v '?'
  • 생산성을 높이고 싶거나 발표할 때는 데스크톱의 아이콘과 폴더를 모두 숨김
    defaults write com.apple.finder CreateDesktop 0 뒤에 killall Finder를 실행하면 숨겨지고, 값을 1로 바꾸면 다시 보임
    이를 토글하는 bash 별칭도 만들어 두었고 gist는 https://gist.github.com/berndverst/6f58c0d6aedddb6c06c23e57d...에 있음

    • 새 Mac을 설정할 때 가장 먼저 하는 일 중 하나가 데스크톱 끄기
      그래도 ~/Desktop은 자주 써서 Dock에 두는 두 폴더 중 하나이고, 다른 하나는 ~/Downloads
      한편 macOS 데스크톱에 Stacks가 들어온 건 훌륭했고, 데스크톱이 파일로 엉망인 사람에게 항상 보여주는 기능임
    • 이 방법을 10년 넘게 써왔고, 교사였을 때는 키 조합에도 할당했음
      발표 상황에서 필요할 만한 다른 설정들과 함께 묶어두면 좋음
  • 좋은 목록이고, hidutil도 있음
    https://developer.apple.com/library/archive/technotes/tn2450...
    예를 들어 PC 키보드에서 macOS에서는 거의 쓸모없는 Ins 키를 PC Execute 같은 키로 바꾼 뒤 Keyboard Maestro에서 잡아 다시 매핑할 수 있음

    • hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000035}]}'로 유럽식 키보드의 왼쪽 위 paragraph 키를 더 유용한 backtick으로 바꿀 수 있음
    • 이런 매핑을 만들어 주는 괜찮은 생성기가 있음
      https://hidutil-generator.netlify.app/
    • hidutilhdiutil은 헷갈리면 안 됨
      예를 들어 hdiutil detach /Volumes/some-usb-drive로 USB 드라이브를 분리하거나, hdiutil makehybrid -joliet -o foo.iso ./srcfolder/로 ISO를 만들 수 있음
  • 몇 년 전 큰 데이터 덩어리에서 무언가를 찾고 완료되면 알려주는 스크립트를 만들면서 끝에 say 명령을 넣어둔 적이 있음
    그걸 잊고 잠들었는데 몇 시간 뒤 집 사무실에서 “침입자”가 공범에게 말하는 듯한 목소리에 벌떡 깼고, 무슨 일인지 깨닫고 나서야 크게 안심했음

    • 몇 가지 알림에 Pushover를 쓰고 있어서, 예전에 제목과 선택적 본문을 받는 push라는 작은 bash 스크립트를 만들었음
      ./longRunningCommand && push "Task Done" "Here is a body"처럼 쓰기 좋았고, 컴퓨터 앞에 있을 때는 완료를 알리는 소리만 내는 beep 스크립트와도 함께 썼음
    • 이런 용도로 StarCraft의 research complete 샘플을 쓰는 걸 좋아함
    • 비슷하게, 침투 후 Mac에서 say 명령을 실행하게 하는 Metasploit 모듈도 있음
      실제로 쓰는 건 본 적 없지만, 언젠가 “고객 노트북에서 say를 호출하는 msf 모듈을 썼다”로 시작하는 Twitter 스레드를 기대하게 됨
    • 터미널 탭을 여러 개 열어두면, 오래 걸리는 명령을 실행해 놓고 다른 탭으로 갔다가 잊어버리기 쉬움
      그래서 작업이 5초 이상 걸렸다면 afplay로 삐 소리를 내는 fish 명령 완료 스크립트를 추가했음
      “딱 잊어버릴 만큼만 긴” 작업에서 다시 집중하는 데 도움이 됨
    • 음성을 Arnold 목소리로 바꿀 수 있다면 꽤 큰돈을 낼 수 있음
  • macOS의 diskutil 명령줄 유틸리티도 칭찬할 만함
    오늘 디스크의 일부 슬라이스 문제가 있었는데 macOS의 그래픽 Disk Utility로는 고칠 수 없었고, 예전에 Asahi Linux를 돌려보며 남은 잔재였음
    diskutil CLI로 해결할 방법이 있을 거라 생각했고, 다음 스레드에서 해결책을 찾았음
    https://apple.stackexchange.com/questions/411544/cant-reclai...
    이제 디스크 전체를 다시 macOS에서 활용할 수 있음

    • diskutil은 훌륭하지만 Disk Utility.app이 이렇게 된 건 참담함
      APFS 전환 이후 제대로 관리받지 못했고, diskutil은 되는 일을 GUI 앱이 아예 실패하는 경우가 있음
      인터페이스 재설계 전에는 실패하더라도 이유를 알려주는 튼튼한 도구였는데, 지금은 플래시 드라이브를 포맷하는 정도만 겨우 하는 아기용 LEGO Duplo 인터페이스처럼 됐음
  • 명령이나 매개변수가 기억나지 않을 때는 um도 볼 만함
    https://github.com/promptops/cli
    예를 들어 um prevent my mac from sleeping for 30m를 입력하면 caffeinate -u -t 1800 같은 결과를 줌

  • open은 항상 쓰는 단순하고 좋은 명령임
    alias tab='open . -a iterm', alias phpstorm='open -a "PhpStorm"', alias smerge='open -a "Sublime Merge"'처럼 만들어 두고, 각 앱의 Open/Recents 대화상자보다 더 자주 씀

    • open -a ...의 탭 자동완성은 Apple이 완성 정의를 갱신하지 않아 몇 년째 끔찍하게 느림
      이 Stack Overflow 답변에 우회 방법을 남겼음: https://stackoverflow.com/a/63097652
    • 언급되지 않은 플래그 중 -n도 있음
      같은 애플리케이션을 여러 인스턴스로 실행할 수 있게 해주며, 예전에는 개인적으로 가장 많이 쓰던 유틸리티였음
      요즘은 그 정도로 심각한 설계 문제가 있는 앱이 줄어 사용 빈도도 낮아짐
    • Sublime Text와 Sublime Merge는 기본으로 CLI 유틸리티를 함께 제공하고, 추가 기능도 있음
      /Applications/Sublime Merge.app/Contents/SharedSupport/bin/smerge/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl을 쓸 수 있음
    • 파일을 rofi로 열기 위한 스크립트를 만들었음
      https://github.com/davatorium/rofi
      모습은 https://i.imgur.com/Hm9TGeV.jpg와 같음
      VS Code 터미널에서는 별칭 o를 쓰면 현재 위치에서 열리고, 거기서 파일을 찾아 편집기에서 열 수 있음
    • 터미널의 현재 디렉터리에서 새 Finder 창을 열려면 alias finder='open .'를 쓰면 됨