13 पॉइंट द्वारा GN⁺ 2023-06-28 | 5 टिप्पणियां | WhatsApp पर शेयर करें
  • सिर्फ Terminal से sleep, clipboard, Finder, Spotlight और updates जैसे macOS-विशेष features को संभाला जा सकता है, जिससे GUI में दोहराए जाने वाले काम कम हो सकते हैं
  • caffeinate, pmset, taskpolicy sleep रोकने, power status जांचने और process execution priority adjust करने जैसे system behavior पर सीधे असर डालते हैं
  • pbcopy, pbpaste, open, screencapture, say इस्तेमाल करने से clipboard, files खोलना, screenshots और voice output जैसे रोज़मर्रा के काम scripts में डालना आसान होता है
  • sips, textutil, mdfind, mdls image/document conversion, Spotlight-based search और metadata check को automate करने वाले file processing tools के रूप में उपयोगी हैं
  • networkQuality, networksetup, softwareupdate, system_profiler network quality, Wi‑Fi/DNS, OS updates और hardware/software जानकारी को जल्दी जांचने में मदद करते हैं

macOS-विशेष commands का दायरा

  • macOS standard Unix tools के अलावा operating system features तक पहुंच देने वाले विशेष command-line tools भी शामिल करता है
  • हर command का detailed usage man <command> से देखा जा सकता है
  • reference environment macOS Sonoma है

Power, sleep और process control

  • caffeinate - Mac को sleep में जाने से रोकना

    • caffeinate को flags या arguments के बिना चलाने पर command चलने के दौरान Mac sleep state में नहीं जाएगा
    • caffeinate -u -t <seconds> specified seconds तक sleep prevention लागू करता है
    • -d flag जोड़ने पर display sleep भी रोका जाता है
    • -w <pid> से existing process specify करने पर उस process के खत्म होते ही caffeinate भी खत्म हो जाता है
    • caffeinate <command> दिए गए command को नए process के रूप में शुरू करता है और उस process के खत्म होने तक sleep रोकता है
  • pmset - power management status check और control

    • pmset -g उपलब्ध power settings information print करता है
    • pmset -g assertions दूसरे processes द्वारा बनाए गए power-related assertions दिखाता है, जिससे Mac को sleep होने से रोक रहे process को ढूंढना उपयोगी होता है
    • pmset -g thermlog throttled processes की जानकारी दिखाता है, जिसे benchmarks चलाते समय reference के तौर पर इस्तेमाल किया जा सकता है
    • pmset displaysleepnow पूरे system को sleep में डाले बिना सिर्फ display को तुरंत sleep state में बदलता है
    • pmset sleepnow पूरे system को तुरंत sleep state में बदलता है
  • taskpolicy - process scheduling control

    • taskpolicy -b <command> दिए गए command को background में चलाता है, और Apple silicon Mac पर यह केवल efficiency cores पर चलता है
    • taskpolicy -b -p <pid> existing process को background execution में lower करता है
    • taskpolicy -B -p <pid> specified process की background execution state हटाता है
      • Apple silicon Mac पर इसके बाद यह efficiency cores या performance cores पर चल सकता है
      • यह behavior केवल background में lower किए गए processes पर लागू होता है; जो processes शुरुआत से ही background में शुरू किए गए हों, उन पर लागू नहीं होता
    • taskpolicy -s <command> दिए गए command को suspended state में शुरू करता है, ताकि execution शुरू होने के समय debugger attach किया जा सके

Clipboard, apps launch, screenshots और voice output

  • pbcopy, pbpaste - system clipboard का उपयोग

    • <command> | pbcopy command output को clipboard में copy करता है
    • pbpaste clipboard content को standard output में भेजता है
  • open - files और applications खोलना

    • open -a <app> <file> specified file को किसी specific application में खोलता है
    • -g flag जोड़ने पर current application का focus बनाए रखते हुए file को background में खोलता है
    • open . current directory को नए Finder window में खोलता है
    • open -R <file> specified file को नए Finder window में दिखाता है
  • screencapture - screenshot लेना

    • screencapture -c screenshot लेकर उसे clipboard में copy करता है
    • screencapture <file> screenshot को specified file में save करता है
    • -T <seconds> flag जोड़ने पर specified seconds तक इंतज़ार करने के बाद capture करता है
  • say - text-to-speech conversion

    • say <message> दिए गए message को voice में output करता है
    • say -f input.txt -o output.aiff specified text file से audiobook बनाता है

Images, documents, search और metadata

  • sips - image manipulation

    • sips -z <height> <width> <image> existing aspect ratio को ignore करके image को specified size में resize करता है
    • sips -Z <size> <image> aspect ratio बनाए रखते हुए longest side को specified size में fit करता है
    • sips -c <height> <width> <image> original image के center के आधार पर specified size में crop करता है
    • sips -r <degrees> <image> image को specified angle तक rotate करता है
    • default behavior input image को destructively overwrite करता है, इसलिए अगर अलग output path चाहिए तो -o flag इस्तेमाल करें
    • output file में input image जैसा ही file extension होना चाहिए
  • textutil - document files conversion

    • textutil Microsoft Word, plain text, rich text और HTML formats के बीच files convert कर सकता है
    • textutil -convert html journal.doc journal.doc को journal.html में convert करता है
    • -convert के लिए usable values txt, html, rtf, rtfd, doc, docx हैं
  • mdfind, mdls - Spotlight search और metadata

    • mdfind <query> दिए गए query से Spotlight keyword search करता है
    • mdfind kMDItemAppStoreHasReceipt=1 Mac App Store से installed सभी apps खोजता है
    • mdfind -name <name> specified name से match करने वाली सभी files search करता है
    • -onlyin <dir> flag से search scope को किसी specific directory तक सीमित किया जा सकता है
    • mdls <file-path> specified file से जुड़े सभी Spotlight metadata print करता है

Network, updates और system information

  • networkQuality - internet speed measurement

    • networkQuality Mac पर internet speed test चलाता है
    • -v flag जोड़ने पर अधिक detailed information दिखती है
    • -I flag किसी specific network interface पर test चलाता है
  • networksetup - network settings check और configuration

    • networksetup -listnetworkserviceorder उपलब्ध network services की list print करता है
    • networksetup -getinfo <networkservice> specified network service की जानकारी दिखाता है
    • networksetup -getdnsservers <networkservice> specified network service के DNS servers print करता है
    • networksetup -setairportnetwork <device> <network> [password] specified Wi‑Fi network से connect करता है
    • ज्यादातर मामलों में <device> argument "en0" होता है
  • softwareupdate - OS updates management

    • softwareupdate --list उपलब्ध software updates print करता है
    • sudo softwareupdate -ia उपलब्ध सभी updates install करता है
    • softwareupdate --fetch-full-installer --full-installer-version <version> specified macOS version के full installer को /Applications में download करने की कोशिश करता है
  • system_profiler - system information query

    • system_profiler default रूप से उपलब्ध सभी system information print करता है, और output आम तौर पर काफी बड़ा होता है
    • system_profiler <datatype> केवल specified subsystem information print करता है
    • system_profiler -listDataTypes उन सभी subsystems की list दिखाता है जिनकी information ली जा सकती है
    • useful data types ये हैं
      • system_profiler SPHardwareDataType: current Mac का hardware overview, model name और serial number print करता है
      • system_profiler SPSoftwareDataType: current Mac का software overview और exact macOS version number print करता है
      • system_profiler SPPowerDataType: current AC power amount और battery cycle count सहित power/battery information print करता है
      • system_profiler SPDeveloperToolsDataType: current active Xcode developer tools और SDK versions print करता है

5 टिप्पणियां

 
dansepo 2023-07-07

ज़िंदगी में काम आने वाले MacBook के उन्नत टर्मिनल कमांड्स (आम यूज़र्स के लिए)
https://www.youtube.com/watch?v=EhiqpFtmjig

 
xguru 2023-06-28

macOS के उन्नत CLI कमांड्स

मैंने इसी तरह की एक पोस्ट 7 महीने पहले संक्षेप में डाल दी थी, लेकिन यह वाला सारांश ज़्यादा देखने लायक है.. हाय

 
edunga1 2023-06-28

जितना आपने संक्षेप में बताया है, उतना भी समझने में कोई दिक्कत नहीं होती, इसलिए यह और भी अच्छा लगता है, हा

 
botplaysdice 2023-06-28

ऐसा नहीं है......हाहा

 
GN⁺ 2023-06-28
Hacker News टिप्पणियां
  • sips और iconutil को साथ इस्तेमाल करके, किसी third-party tool के बिना, एक 1024×1024 PNG से ऐप के लिए .icns फ़ाइल बनाई जा सकती है
    mkdir MyIcon.iconset से 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 version सीधे 1024px से बनाना बेहतर है या 32px से चरणबद्ध तरीके से घटाना

    • अगर शुरुआती फ़ाइल SVG है, तो cp की जगह पहले qlmanage का इस्तेमाल करके 1024×1024 PNG बना सकते हैं
      qlmanage -t -s 1024x1024 -o MyIcon.iconset/Icon1024.png icon.svg
    • अगर सच में अच्छे दिखने वाले छोटे icon, खासकर 16×16 या 32×32, चाहिए हों तो छोटा करने के बाद हाथ से सुधारना पड़ता है, तभी वे sharp दिखते हैं
      हालांकि macOS system icons को देखकर लगता है कि आजकल उन्हें अब हाथ से adjust नहीं किया जाता
  • सूची में pbcopy और pbpaste खास तौर पर पसंद हैं
    compressed JSON से काम करते समय iTerm में जाकर pbpaste | json_pp | pbcopy चलाएं, तो formatted output clipboard में आ जाता है और यह बहुत सुविधाजनक है

    • pbpaste | something | pbcopy pattern अक्सर इस्तेमाल होता है, इसलिए इसे shell function बनाकर रखना ठीक है
      इसे pbfilter json_pp, pbfilter base64 -d, pbfilter sed 's/this/that/' जैसे इस्तेमाल किया जा सकता है
      बिना arguments के सिर्फ pbfilter चलाने पर यह clipboard की formatting हटाकर केवल plain text छोड़ने वाले filter की तरह भी काम करता है
      लेकिन aliases, pipelines और जटिल expressions के साथ यह नहीं चलता; filter command कोई सामान्य command या function और उसके arguments होने चाहिए
    • यह workflow text समस्याओं को हल करने का एक ताकतवर और साफ़ तरीका है
      उदाहरण के लिए, Windows-style copy/paste से आने वाली double blank lines को alias winlines="sed '/^$/{$!{N;s/\n//;};}'" और alias pbw="pbpaste | winlines | pbcopy" से साफ़ किया जा सकता है
      Linux पर भी alias pbcopy='xsel --clipboard --input', alias pbpaste='xsel --clipboard --output' से macOS जैसा व्यवहार imitate किया जा सकता है
    • यह बात काफी परेशान करती है कि ये सिर्फ plain text और RTF पर ही काम करते हैं
      X11 में xclip[0], Wayland में wl-clipboard[1] है, और ये header parsing या explicit MIME type setting के जरिए binary file formats को भी support करते हैं
      इसलिए terminal से image copy करके browser या chat client जैसे GUI program में paste करना, या उल्टा वहां से लाना संभव है, और desktop automation shell scripts में भी उपयोगी है
      macOS में osascript से AppleScript call करके set the clipboard to... इस्तेमाल करने वाला workaround चाहिए
      [0] https://github.com/astrand/xclip
      [1] https://github.com/bugaevc/wl-clipboard
    • फ़ोन के साथ pbcopy/pbpaste इस्तेमाल करना भी शानदार है
      फ़ोन पर text copy करें, तो Mac command line में सीधे pbpaste से उसे ला सकते हैं
    • clipboard की सामग्री edit करने के लिए pbpaste | vipe | pbcopy इस्तेमाल करता हूं
      यहां vipe एक utility है जो pipe के बीच में editor, आम तौर पर vim, लगा देती है और इसे https://joeyh.name/code/moreutils/ पर देखा जा सकता है
  • command-line tool तो नहीं, लेकिन Network Link Conditioner भी वाकई अच्छा है
    latency, bandwidth, packet loss वगैरह डालकर बहुत खराब network simulate किया जा सकता है, इसलिए testing में उपयोगी है
    उन meetings में भी जहां camera चालू रखना ज़रूरी बताया जाता है, connection को जानबूझकर खराब करके blocky video और robot जैसी आवाज़ दिखा सकते हैं, और जब सब video off करने को कहें तो “जादू की तरह” उसे normal कर सकते हैं

    • Comcast भी macOS, BSD, Linux पर यही काम करता है, और नाम भी कमाल का है
    • Toxiproxy अलग environments में इस्तेमाल होने वाला similar tool है, और timeout, retry, packet loss जैसी खराब conditions में network code test और improve करने में मददगार रहा है
    • पता ही नहीं था कि ऐसा tool मौजूद है, और “additional tools for X-Code” package के अंदर भी ऐसे कई शानदार tools हैं जिनके बारे में नहीं पता था
      https://developer.apple.com/download/all/
    • Linux में network QoS tools से super-expert की तरह similar काम किया जा सकता है
      https://tldp.org/HOWTO/Traffic-Control-HOWTO/components.html
    • NLC dummynet और PF(packet filter) को control करने वाला GUI interface है
      profile के मुताबिक packet delay inject करने या packets का एक तय प्रतिशत drop करने के rules set करता है
      macOS में dnctl और pfctl इस्तेमाल करके similar काम, बल्कि उससे भी ज्यादा काम, किए जा सकते हैं
  • ऑडियो प्लेबैक के लिए afplay का ज़िक्र भी ज़रूर होना चाहिए
    इससे एक सरल command-line MP3 player बनाया जा सकता है
    voice synthesis के लिए say utility भी है, जो TUNE format को support करती है, जिससे बोलने की पूरी melody और timing adjust की जा सकती है और उसे भावनात्मक जैसा सुनाया जा सकता है
    Apple की Speech Synthesis Programming Guide https://josh8.com/blog/img/speech-synthesis.pdf पर है, और संबंधित लेख https://josh8.com/blog/commandline-audio-mac.html परまとめा गया है

    • अफसोस, TUNE format विकास की दृष्टि से लगभग एक dead end रहा
      इसे support करने वाली voice synthesis की आखिरी पीढ़ी 2007 में शामिल Alex voice थी, और इसे फिर देखने की संभावना बहुत कम लगती है
      synthesis को बारीकी से control करने और naturalness के बीच मूल रूप से तनाव रहता है, और बाद वाला कहीं ज़्यादा मूल्यवान है
    • एक छोटी correction: voice list देखने का command say -v '?' है
  • productivity बढ़ानी हो या presentation देना हो, तो desktop के सभी icons और folders छिपा देता हूँ
    defaults write com.apple.finder CreateDesktop 0 के बाद killall Finder चलाने पर वे छिप जाते हैं, और value को 1 करने पर फिर दिखने लगते हैं
    इसे toggle करने के लिए एक bash alias भी बनाया है, और gist https://gist.github.com/berndverst/6f58c0d6aedddb6c06c23e57d... पर है

    • नया Mac setup करते समय सबसे पहले किए जाने वाले कामों में से एक desktop बंद करना है
      फिर भी ~/Desktop मैं अक्सर इस्तेमाल करता हूँ, इसलिए Dock में रखे दो folders में से एक है; दूसरा ~/Downloads है
      दूसरी ओर macOS desktop में Stacks का आना शानदार था, और जिन लोगों का desktop files से अस्त-व्यस्त होता है, उन्हें मैं हमेशा यह feature दिखाता हूँ
    • यह तरीका 10 साल से ज़्यादा समय से इस्तेमाल कर रहा हूँ, और जब teacher था तो इसे key combination पर भी assign किया था
      presentation के समय काम आने वाली दूसरी settings के साथ इसे bundle करना अच्छा रहेगा
  • अच्छी list है, और hidutil भी है
    https://developer.apple.com/library/archive/technotes/tn2450...
    उदाहरण के लिए, PC keyboard पर macOS में लगभग बेकार Ins key को PC Execute जैसी key में बदलकर Keyboard Maestro में पकड़कर फिर remap किया जा सकता है

    • hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000035}]}' से European keyboard की ऊपर-बाईं paragraph key को ज़्यादा उपयोगी backtick में बदला जा सकता है
    • ऐसी mappings बनाने के लिए एक ठीक-ठाक generator है
      https://hidutil-generator.netlify.app/
    • hidutil और hdiutil को confuse नहीं करना चाहिए
      उदाहरण के लिए hdiutil detach /Volumes/some-usb-drive से USB drive अलग कर सकते हैं, या hdiutil makehybrid -joliet -o foo.iso ./srcfolder/ से ISO बना सकते हैं
  • कुछ साल पहले बड़े data chunk में कुछ खोजने और पूरा होने पर notify करने वाली script बनाते समय मैंने अंत में say command डाल दिया था
    उसे भूलकर सो गया, और कुछ घंटों बाद home office से “घुसपैठिए” के अपने साथी से बात करने जैसी आवाज़ सुनकर झटके से जाग गया; क्या हुआ है यह समझने के बाद ही काफी राहत मिली

    • कुछ notifications के लिए Pushover इस्तेमाल करता हूँ, इसलिए पहले push नाम की छोटी bash script बनाई थी जो title और optional body लेती थी
      ./longRunningCommand && push "Task Done" "Here is a body" की तरह इस्तेमाल करना आसान था, और computer के सामने होने पर completion sound बजाने वाली beep script के साथ भी इसे इस्तेमाल करता था
    • इस काम के लिए StarCraft का research complete sample इस्तेमाल करना पसंद है
    • इसी तरह, post-exploitation के बाद Mac पर say command चलाने वाला Metasploit module भी है
      इसे सच में इस्तेमाल होते नहीं देखा, लेकिन कभी “customer laptop पर say call करने वाला msf module इस्तेमाल किया” से शुरू होने वाला Twitter thread देखने की उम्मीद जगती है
    • कई terminal tabs खुले हों, तो लंबे समय तक चलने वाला command शुरू करके दूसरे tab में चले जाना और भूल जाना आसान है
      इसलिए अगर task में 5 seconds से ज़्यादा लगे, तो afplay से beep sound बजाने वाली fish command completion script जोड़ी है
      यह “बस इतना लंबा कि भूल जाओ” वाली tasks में फिर से focus करने में मदद करती है
    • अगर voice को Arnold की आवाज़ में बदल सकता, तो इसके लिए अच्छा-खासा पैसा दे सकता हूँ
  • macOS की diskutil command-line utility भी तारीफ के काबिल है
    आज disk के कुछ slices में problem थी, जिसे macOS की graphical Disk Utility ठीक नहीं कर सकी; यह पहले Asahi Linux चलाकर देखने के बाद बचा हुआ residue था
    मुझे लगा diskutil CLI से कोई तरीका होगा, और इस thread में solution मिला
    https://apple.stackexchange.com/questions/411544/cant-reclai...
    अब पूरी disk फिर से macOS में इस्तेमाल की जा सकती है

    • diskutil शानदार है, लेकिन Disk Utility.app का यह हाल होना दुखद है
      APFS transition के बाद इसे ठीक से maintain नहीं किया गया, और कुछ काम जो diskutil कर देता है, GUI app उनमें पूरी तरह fail हो जाता है
      interface redesign से पहले यह एक मजबूत tool था जो fail होने पर भी कारण बता देता था; अब यह बस flash drive format करने जितना ही करने वाला बच्चों के LEGO Duplo जैसा interface बन गया है
  • जब command या parameter याद न हो, तो um भी देखने लायक है
    https://github.com/promptops/cli
    उदाहरण के लिए, um prevent my mac from sleeping for 30m डालने पर यह caffeinate -u -t 1800 जैसा परिणाम देता है

  • open एक सरल और अच्छा command है जिसे मैं हमेशा इस्तेमाल करता हूँ
    alias tab='open . -a iterm', alias phpstorm='open -a "PhpStorm"', alias smerge='open -a "Sublime Merge"' की तरह बना रखा है, और हर ऐप के Open/Recents dialog से भी ज़्यादा बार इसका इस्तेमाल करता हूँ

    • open -a ... का tab autocomplete, Apple द्वारा completion definitions अपडेट न करने की वजह से, कई सालों से बेहद धीमा लगता है
      इस Stack Overflow जवाब में workaround छोड़ा है: https://stackoverflow.com/a/63097652
    • जिन flags का ज़िक्र नहीं हुआ, उनमें -n भी है
      यह उसी application को कई instances में चलाने देता है, और पहले निजी तौर पर सबसे ज़्यादा इस्तेमाल की जाने वाली utility थी
      आजकल इतने गंभीर design issues वाले apps कम हो गए हैं, इसलिए इसका इस्तेमाल भी कम हो गया है
    • Sublime Text और Sublime Merge default रूप से CLI utilities साथ देते हैं, और extra features भी हैं
      /Applications/Sublime Merge.app/Contents/SharedSupport/bin/smerge और /Applications/Sublime Text.app/Contents/SharedSupport/bin/subl इस्तेमाल किए जा सकते हैं
    • files को rofi से खोलने के लिए एक script बनाई है
      https://github.com/davatorium/rofi
      यह https://i.imgur.com/Hm9TGeV.jpg जैसा दिखता है
      VS Code terminal में alias o इस्तेमाल करने पर यह current location से खुलता है, और वहाँ से file ढूँढकर editor में खोल सकते हैं
    • terminal की current directory से नया Finder window खोलने के लिए alias finder='open .' इस्तेमाल कर सकते हैं