[OS X] 10가지 유용한 터미널 명령 Computer Tip

중요한 내용이라 기사의 것을 인용하고 나름의
내용을 정리해 봅니다.


OS X 명령줄(command line)은 터미널(Terminal) 앱을 통해 사용할 수 있는 기능이다. 윈도우의 명령 프롬프트와 마찬가지로 일반 사용자 대부분은 이름만으로도 주눅이 든다. 정말 불가피한 상황에서나 마지못해 사용하는 기능이다. 명령줄은 PC를 복구할 수 없는 문제가 발생했을 때 시스템에 직접 명령어를 전송해 동작을 유도하는 것이다. 물론 이런 경우라도 일반 사용자가 쓰는 명령은 launchd 서비스를 재시작하거나 plist 파일을 제거하는 등 제한된 경우가 대부분이다.

유닉스 셸(Unix shell)에 익숙한 사용자라면 이 명령줄 혹은 터미널을 이미 강력한 툴로 이용하고 있을 수도 있다. OS X는 BSD 코어에 기반을 두고 있으므로 한 줄 명령어만으로 다양한 작업을 할 수 있다. 번잡한 GUI 툴 없이도 디렉토리 구조를 보거나 30일 이상이 지난 모든 파일을 삭제하고, 디렉토리에서 특정 텍스트 행을 포함한 모든 파일 목록을 불러오는 것 등이 가능하다. 그래픽 인터페이스는 많은 작업을 간소화하는 유용한 유틸리티지만, 일부 작업은 오히려 더 복잡해지기도 한다. 이런 문제를 해결해주는 것이 바로 명령줄이다.

이처럼 OS X 속에는 파워 유저도 잘 모르는 숨겨진 보석이 숨어 있다. 여기 명령줄로 동작하는 10가지 흥미로운 기능을 소개해본다. 매우 유용하고 어떤 경우에는 재미있기까지 하다.


1. pbcopy와 pbpaste (클립보드에 복사하거나 붙여넣기)

[잘 사용하지 않지만 유용할 듯 합니다]

pbcopy와 pbpaste는 서로 짝을 이뤄 동작하는 유틸리티다. 시스템 클립보드/페이스트보드와 명령줄 사이의 상호 이동을 구현하는 역할을 한다. 예를 들어 특정 디렉토리 안에서 이름이 'f'로 시작하는 모든 파일을 골라내 그 목록을 클립보드에 목록화하려면 다음과 같이 입력하면 된다.

$ ls f* | pbcopy

이 한 줄만으로 간단히 결과를 도출해 어떤 GUI 앱에도 붙여넣을 수 있다. 반대도 마찬가지다. 클립보드 안에 타 앱에서 불러온 파일 목록이 있으면 이번에는 다음처럼 pbpaste 작업을 처리할 수 있다.

$ pbpaste | grep foo

이 명령줄은 grep 명령을 이용해 foo 열이 포함된 행을 추출한다. 이 두 명령은 명령줄과 GUI를 오가는 작업을 진행할 때 특히 유용하다.


2. rsync (파일, 디렉토리 동기화)

[이미 많이 사용하고 있는 내용입니다.

rsync 기능은 같은 시스템 내 폴더 혹은 로컬 및 원격 시스템 내의 폴더 사이에 디렉토리 트리를 동기화한다. 이는 지난 수년 간 IT의 보루 역할을 해 온 매우 유용한 기능이며, OS X에도 역시 포함돼 있다. 두 디렉토리 트리를 같게 유지하려면 로컬 시스템에서 rsync를 적용하는 것만으로 작업을 완료할 수 있다.

$ rsync -av /path/to/directory1/ /path/to/directory/2/

이는 /path/to/directory1/ 내의 모든 파일이 /path/to/directory2/에도 똑같이 존재하도록 하라는 의미다. 아예 두 디렉토리를 완전히 같게 만들고 싶을 경우에는 /path/to/directory2/ 내의 파일 중 /path/to/directory1/에 존재하지 않는 파일은 전부 지워버리도록 다음과 같이 rsync 명령을 이용하면 된다.

$ rsync -av --delete /path/to/directory1/ /path/to/directory2/

동기화 과정에서 파일이 리스트화되기를 원하지 않는다면, v 플래그만 지우면 된다.

$ rsync -a --delete /path/to/directory1/ /path/to/directory2/

또는, 어떤 파일이 복사됐고 어떤 것이 제거됐는지 확인하고 싶다면 다음처럼 n을 추가하면 된다.

$ rsync -avn --delete /path/to/directory1/ /path/to/directory2/

서로 다른 시스템 간에도 rsync를 이용할 수 있다. 다만 이를 위해선 원격 시스템에 rsync가 설치돼 있어야 하고, SSH를 구동 중이어야 한다. 명령어는 다음과 같다.

$ rsync -av --delete /path/to/directory1/ user@remotesystem:/path/to/directory1/

여기서 중요하게 봐야 할 부분은 맨 마지막에 넣은 사선(/)이다. 이 사선은 rsync가 소스 디렉토리 내 파일을 읽어 그것을 종착 디렉토리로 동기화함을 나타내는 기호다. 이를 빠뜨리면 rsync는 소스 디렉토리를 통째로 종착 디렉토리로 복제해 결과적으로 추가적인 디렉토리 층위를 만든다.

맥에서 SSH 접속을 구현하려면, ‘시스템 환경설정’의 ‘공유' 메뉴에서 ‘원격 로그인'을 활성화해야 한다. 이를 통해 사용자는 SSH로 맥으로 rsync를 연결하거나 SSH를 이용해 시스템 셸에 연결할 수 있다.


3. ditto (디렉토리, 아카이브 복제, 병합)

[잘 사용하지 않았지만 필요하겠군요]

얼핏 보면 ditto 명령은 rsync와 유사해 보인다. 그러나 제대로 알면 둘은 완전히 다른 도구다. 이는 꽤 오랜 기간 OS X에 포함돼 있었지만 인지도는 상대적으로 낮은 편이다. rsync와 마찬가지로 ditto도 다음과 같이 사용해 승인, 소유권, 메타데이터를 유지하면서 디렉토리 트리를 복제할 수 있다.

$ ditto /path/to/source /path/to/destination

종착 디렉토리가 존재하지 않는 경우라면, ditto는 소스 디렉토리를 그곳에 온전히 복제한다. 종착 디렉토리가 존재하면 소스 디렉토리를 종착 디렉토리와 병합하고, 중복되는 파일은 덮어쓴다. 두 개의 대형 사진 디렉토리를 하나의 디렉토리 구조로 합치고 콘텐츠를 병합할 때 이 명령을 사용하면 유용하다.

물론 그것만이 ditto의 역할은 아니다. CPIO(Copy In, Copy Out)나 Zip 아카이브 생성, 추출, 조작하는 데도 쓸 수 있고 선택적으로 복제, 병합할 물자표(BOM, Bill Of Materials) 문서를 만들거나 파일 복제 중에 메타데이터를 생략하도록 할 때도 이용할 수 있다. 한 발 더 나가 운영 과정에서 유니버설 바이너리(universal binary)를 하나의 특정 아키텍처로 축소하는 것 역시 ditto로 할 수 있다.

ditto는 꽤 복잡한 툴이어서 이것을 온전히 이해하려면 일정 수준 이상의 훈련이 필요하다. 그러나 제대로 사용하면 매우 많은 가치를 제공한다.


4. tmutil (타임 머신으로 백업과 복원하기)

[타임머신을 이용하지 않고 대부분 rsync를 이용하여 백업합니다]

애플의 타임 머신 기능은 NAS나 USB 드라이브 등 외장 하드에 지속적으로 백업할 수 있다는 점에서 매우 유용하다. 그러나 이른바 ‘스타워즈’ 인터페이스는 꽤 거슬리게 느껴질 수 있고 시스템 환경 설정 역시 그 방패 모양이 무척 '스파르탄(Spartan)'스럽다. 다행히도 tmutil 을 사용하면 이러한 부족한 점을 보완할 수 있다. 예를 들어 타임 머신의 GUI는 마지막 백업만 보여주는 데 비해 모든 가용한 백업을 보고 싶다면 다음과 같은 명령줄을 입력한다.

$ tmutil listbackups

현재 시스템에서 액세스 가능한 모든 백업의 리스트를 볼 수 있다. 가장 최근의 백업을 보고 싶다면 다음과 같이 입력한다.

$ tmutil latestbackup

그런가 하면 tmutil 을 이용해 백업을 시작, 중지하거나 서로 비교할 수 있다. 백업 간에 얼마나 변화됐는지를 분석하거나 오래된 시스템에서 했던 백업을 가져올 수도 있다. 백업 종착 위치에 관한 정보를 확인하고 종착 위치를 연결, 분리하거나, 백업에서 파일을 복원하는 것도 가능하다.

기본적으로 GUI에는 없는 백업과 관련된 모든 기능이 tmutil에 있다고 보면 된다. 만일 아주 절박한 상황에서 백업만이 문제 해결의 유일한 해법인 상황이라면 큰 도움이 될 것이다.


5. fs_usage (파일 시스템 활동 한눈에 보기)

[실행해 보았더니 엄청나게 현재 활동을 로그로 남기는 군요]

가끔 디스크가 미쳐 날뛸 때 어떤 시스템 프로세스에 문제가 생긴 건지 한눈에 파악하고 싶다면 fs_usage를 쓰면 된다. fs_usage는 어떤 프로세스가 파일 시스템에 액세스하고 있는지에 대한 실시간 정보를 보여준다. 기본적으로 fs_usage는 터미널과 sshd(Secure Shell)와 같은 몇 가지 프로세스를 제외하고 모두 결과창에 보여준다. 터미널에서 fs_usage를 사용하려면 다음과 같이 입력하면 된다.

$ sudo fs_usage

현재 다른 터미널 애플리케이션을 쓰고 있다면 이 역시 -e를 추가해 아웃풋에서 이를 제거할 수 있다.

$ sudo fs_usage -e iTerm

위와 같이 입력하면 fs_usage와 iTerm 앱 모두가 결과에서 제외된다. fs_usage는 시스템 전반에 대한 정보를 보여줄 뿐 아니라 다음과 같이 구글 크롬 같은 각 프로세스에 대한 정보도 확인할 수 있다.

$ sudo fs_usage "Google Chrome"


6. drutil과 hdiutil (CD, DVD 굽기, 그리고 디스크 이미지 수정하기)

DVD나 CD를 더 빨리 레코딩하려면 drutil이 적합하다. 한 줄의 명령 행으로 디렉토리 트리를 CD로 구울 수 있다.

$ drutil burn /path/to/folder

오디오를 CD로 굽고 싶다면 오디오 파일이 위치한 디렉토리를 다음과 같이 명령어 경로에 추가하면 된다.

$ drutil burn -audio /path/to/folder

이 기능은 특히 erase 명령으로 CD-RW 미디어를 지울 때 유용하다(drutil erase /path/to/folder). bulkerase 명령을 이용하면 RD-RW 디스크 자체를 지우고 디스크를 빼낸 다음 다른 디스크를 삽입 후 다시 반복한다. hdiutil 기능도 디스크 이미지를 수정한다는 점에서 이와 비슷하다. hdiutil 을 사용하면 디렉토리 경로에서 애플 디스크 이미지(DMG 파일)를 만들 수 있다.

$ hdiutil create -srcfolder /path/to/files/ myfiles.dmg

OS X 엘 캐피탄 버전을 사용하고 있다면 다음 명령을 통해 ISO 이미지를 CD로 구울 수 있다.

$ hdiutil burn /path/to/file.iso

hdiutil에는 이미지 마운팅/언마운팅, 이미지 포맷 전환, 암호화 이미지 생성, 이미지 확인 등 다른 기능도 많다.


7. system_profiler (시스템 정보 리포트)

[시스템 상세 정보를 출력]

일반적으로 시스템을 조사하거나 디버깅할 때 사용 중인 소프트웨어와 하드웨어에 관한 모든 정보 리포트를 받으면 큰 도움이 된다. system_profiler 명령의 용도가 바로 이것이다. 결과 리포트를 텍스트 파일로 변화해 주기 때문에 읽기도 더 편하다. 대부분의 경우 다음과 같은 명령어로 기본 리포트만 확인해도 충분하다.

$ system_profiler -detailLevel basic > report.txt

이렇게 하면 CPU, RAM 그래픽, 스토리지, 시리얼 넘버, 하드웨어 UUID, 네트워크 정보, 램 슬롯, 네트워크 정보, 파워 정보, 프린터 소프트웨어, USB, 썬더볼트, 그리고 타임머신 백업 정보 등 시스템 전반에 관한 엄청난 양의 정보를 받을 수 있다. 이 명령을 사용하면 맥에서 필요한 거의 모든 데이터를 한 번에 얻을 수 있다. 특히 액세스가 어려운 원격 시스템을 통해 문제를 해결하려 할 때(즉, 멀리 사는 부모님이 컴퓨터가 이상하다며 전화를 할 때) 매우 유용하다.


8. tar, gzip, bzip2, zip (압축 아카이브 생성 및 열기)

[이미 리눅스 계열을 사용한다면 자연스럽게 이용하게 됩니다]

유닉스 세계에서 tar(‘tape archive’의 줄임말)는 원래 표준화된 포맷으로 테이프를 백업해 파일을 복사하는 명령이었다. 현재는 더는 tar를 이렇게 사용하지는 않는다. 대신 개별 파일이나 디렉토리의 아카이브를 생성할 때 사용한다. gzip, bzip2와 같은 압축 툴과 함께 사용할 경우 tar는 파일의 압축 아카이브를 생성해준다. 그 결과 Zip 파일 아카이브와 비슷한 압축 아카이브가 만들어지는데 이는 맥뿐 아니라 윈도우와 다른 플랫폼에서도 사용된다. gzip으로 압축한 tar 디렉토리 아카이브를 생성하려면 다음과 같이 입력하면 된다.

$ tar zcpf myfiles.tgz /path/to/files

이 명령줄을 입력하면 myfile.tgz가 생성되는데 이는 경로에 입력된 모든 파일을 gzip으로 압축한 tar 아카이브다. 다음과 같이 bzip2를 사용하면 압축파일 크기가 작아지지만 압축하고 푸는 데 시간이 더 걸릴 수 있다.

$ tar jcpf myfiles.tbz /path/to/files

다음과 같이 그냥 Zip을 이용할 수도 있다.

$ zip –r myfiles.zip /path/to/files

gzip된 tar 파일을 열려면 다음의 명령줄을 입력한다.

$ tar zxf myfiles.tgz

bzip2 아카이브를 열 때 명령줄은 다음과 같다.

$ tar jxf myfiles.tbz

Zip 아카이브의 경우 명령줄은 unzip이다.

$ unzip myfiles.zip

파일 유형에 따라 zip보다 tar, gzip, bzip2를 쓰는 것이 더 좋을 수도 있다. 그러나 윈도우 사용자의 경우 특정 소프트웨어 없이 압축된 파일을 열 수 없을 수도 있다. 반면 Zip 파일은 모든 윈도우 버전에서 자동으로 열 수 있으므로 이 점을 참고하자.


9. mdfind (강력한 스포트라이트 검색 기능)

[맥에서 자동으로 생성해 놓는 인덱스를 검색]
[find 명령으로 한글 포함된 파일을 찾기 힘든데
 반해 mdfind는 한글포함 파일을 쉽게 검색합니다.

OS X는 원래부터 스포트라이트(Spotlight) 검색을 지원했다. 디스크에서 파일을 찾아주고 메타데이터, 파일 콘텐츠 등 다양한 기준에 따라 고급 검색을 할 수 있다. 다행히 스포트라이트 검색 역시 mdfind 명령줄을 통해 실행할 수 있다. 기능은 파인더의 스포트라이트 툴과 똑같지만, 검색 종류가 다양하고 찾은 모든 데이터를 보여준다. 예를 들어 다음과 같이 입력하면 스포트라이트에서 foobar로 분류한 모든 자료를 다 보여준다.

$ mdfind "foobar"

혹은 다음과 같이 파일 종류 등 모든 류의 메타 데이터를 찾을 수도 있다.

$ mdfind "kMDItemContentType == 'com.microsoft.word.doc'"

다음은 'Bread cheese salami'라는 키워드를 사용해 파일을 검색한 사례다.

$ mdfind "kind:pdf Bread cheese salami"

다음과 같이 입력하면 시간대별 검색도 할 수 있다.

$ mdfind -onlyin ./tmp/ 'kMDItemFSContentChangeDate >= $time.today(-2)'

스포트라이트 검색 GUI는 간단한 검색에 매우 유용하다. 그러나 정말 구체적인 검색 기능이 필요할 때는 mdfind 명령줄이 더 요긴할 것이다.


10. say (파일 읽어주는 맥)

[재미로 한두번 해 보았습니다]

say는 장애 등을 이유로 청각 지원이 필요한 사람에게 유용하게 쓰일 수 있다. 그러나 꼭 그런 용도가 아니어도 say로 할 수 있는 재미있는 것들이 많다. 이 명령이 하는 일은 이름에서 나타나듯 텍스트를 음성으로 읽어주는 것이다. 사용법도 다음과 같이 매우 간단하다.

$ say "Hello world"

이 명령줄을 입력하면 전형적인 로봇 목소리가 “Hello world”라고 인사한다. 하지만 이게 다가 아니다. 목소리가 64가지나 있고, 언어도 다양하게 선택할 수 있다. 특히 영어 외에 다른 외국어를 선택한 뒤 영어 단어나 문장을 입력하면 해당 언어 구사자의 영어 ‘악센트’까지 살려서 발음한다. 이처럼 다양한 목소리나 언어를 선택하고 싶다면 다음과 같이 입력한다.

$ say -v ‘?’

적절한 목소리를 찾았다면 이제 어떤 문장이나 텍스트 파일도 읽게 할 수 있다. 다음과 같이 '--interactive' 플래그를 추가하면 해당 문장을 읽을 때 그 부분을 강조해서 읽어주기도 한다.

$ say -v Vicki -f myfile.txt --interactive

심지어 텍스트를 읽는 속도도 조절할 수 있다. 종착 시스템이 제대로 설정돼 있다면 원격 시스템에서도 say 명령으로 텍스트를 읽게 할 수 있다.

사실 맥의 GUI를 이용하면 이 모든 것을 클릭만으로 할 수 있다. 하지만 맥은 단순히 외관만 예쁜 컴퓨터가 아니다. GUI가 너무 느리거나 제한적일 경우 터미널을 열고 명령줄의 위력을 체험해보는 것도 좋다.


어느 분께는 도움이 되셨기를 ....


덧글

댓글 입력 영역

구글애드텍스트