481

(2개의 댓글, 어플리케이션 글에 작성됨)

Panther로 넘어오면서 SWAT으로의 접근 인증 방식에 알 수 없는 어떤 문제가 있는 지, root로도 로그인 할 수가 없나봅니다.

임시 해결책으로, 인증없이 SWAT에 접근할 수 있게 하는 방법은 다음과 같습니다.

/etc/xinetd.d/swat에 있는 SWAT 설정파일에 다음과 같은 설정을 추가합니다:

server_args = -a

그리고, sudo killall -HUP xinetd 명령으로 xinetd를 다시 켜면, 인증 없이 SWAT에 접근할 수 있게 됩니다. 물론 보안상 문제가 생길 수도 있지만, only_from = localhost 설정이 되어 있기 때문에, localhost에서만 접근이 가능하게 됩니다.

482

(1개의 댓글, Mac OS 글에 작성됨)

Mac OS X의 Finder는 각각의 디렉토리에 (파일 이름 앞에 점을 붙여서) 보이지 않는 ".DS_Store" 파일을 만들어서, 이 파일 속에 해당 디렉토리 안에 들어있는 파일들의 항목을 포함하는 정보를 담아놓게 됩니다. 그래서 이 .DS_Store를 간단한 글자 편집기로 불러서 읽어 보면 해당 디렉토리의 구조를 살펴볼 수가 있습니다.

여기서 문제가 되는 것은, Mac OS X "client version"에서 Apache를 돌릴 경우 만약 서버 운용자가 Finder에서 웹 디렉토리를 "한 번이라도 열어 본 적"이 있다면 생겼을 .DS_Store 파일로 인해, 악의를 품은 사용자가 웹 브라우저를 통해 http://your.mac.com/some_directory/.ds_store와 같은 주소로 해당 디렉토리에 어떤 파일들이 위치하고 있는 지를 알 수가 있게 되는 보안상의 허점이 생긴다는 것입니다. 

이 문제에 대한 해결책으로는, 아래와 같이 Apache 설정 파일인 httpd.conf에 <FilesMatch> 지시자와 함께 적절한 regular expressions을 써서 해당 파일로의 접근을 막아낼 수가 있습니다.

# The Finder creates an invisible .DS_Store file in each directory.

# For 'no-index' access controls to be effective, we had better forbid

# retrieval of that file as well. Note that we have to protect

# against the same case-insensitivity bug as above.

#

<FilesMatch "^.[Dd][Ss]_[Ss]">

     Order allow,deny

     Deny from all

</FilesMatch>

위의 regular expression에서는 Mac OS X의 대소문자를 구별하지 못하는 문제도 같이 고려되어 있습니다. 물론, 위의 설정이 적용되기 위해서는 터미널에서 다음과 같은 명령으로 Apache를 재시동 하셔야 합니다.

sudo apachectl restart

참고로, Mac OS X Server 10.3.5의 경우에서는 위 문제에 대한 방지로 httpd.conf에 다음과 같이 설정이 되어 있습니다.

#### For Mac OS X Server: Note the method used to deny access to these

#### files so that files on case-insensitive HFS+ volumes are protected.

#### Also note that .DS_Store files created by the Finder are denied here.

#### (Consider adding .FBCIndex files)

#### (Note: Denying .DS_S* may interfere with Finder WebDAV operation)

#

<Files ~ "^.([Hh][Tt]|[Dd][Ss]_[Ss])">

     Order allow,deny

     Deny from all

    Satisfy All

</Files>

여기에는 디렉토리의 Apache 설정 관련 .htaccess 파일과 .htpasswd 파일로의 접근 방지도 함께 추가되어 있음을 보실 수 있습니다.

:arrow: 여기서 제기된 Apache와 .DS_Store 파일에 관한 보안상의 문제는 Mac OS X Server 10.1 이후에서는 이미 고쳐진 것임을 밝혀둡니다.

참고 글: MacInTouch

483

(0개의 댓글, 어플리케이션 글에 작성됨)

Mac OS X 10.3.5에 와서도 종종 Disk Utility를 사용해서 이미지를 마운트할 수 없거나 이미지를 새로 만들 수 없는 등의 문제들을 호소하는 사용자들이 있습니다.

터미널 도구인 hdiutil를 이용해서 다음과 같은 명령으로 디스크 이미지를 강제적으로 마운트하는 방법도 있습니다만, 영구적인 해결책이 안될 수도 있습니다:

sudo hdiutil attach 이미지_이름

이 문제에 대해 Apple에서 제시한 해법으로,
/System/Library 폴더에 위치한 "Extensions.kextcache", "Extensions.mkext" 파일과 /System/Library/Caches 폴더에 위치한 "com.apple.kernelcaches" 폴더를 휴지통으로 버리고, 캐쉬 정보를 지우기 위해 터미널에서 다음과 같이 입력합니다:

sudo touch /System/Library/Extensions

어떤 경우에는 그냥 특정 설정 파일들을 지우기만 하면 문제가 해결될 수도 있다고 합니다. 이런 파일에는 ~/Library/Caches 폴더 속의 'com.apple.LaunchServices.*' 파일들과 함께 ~/Library/Preferences/com.apple.LaunchServices.plist 파일이 포함됩니다.

또한, 간혹 알 수 없는 이유로 Finder 환경설정(Finder 메뉴의 Finder>Preferences>Sidebar 혹은 Finder>Preferences>General)의 특정 선택사항들이 꺼져있을 수도 있는데, 이곳을 확인해서 어떤 항목들이 책상(desktop)이나 Finder의 옆구리 막대(sidebar)에서 보여지지 않게 설정되어 있는 지를 확인해 보셔야 합니다.

따옴 - MacFixIt

484

(1개의 댓글, 어플리케이션 글에 작성됨)

간혹가다가, 따로 저장해 놓은 mp3 파일들 중에 한글로 된 ID3 꼬리표가 깨져 보이거나 파일 이름이 마음에 안들어서 수정하고 싶은 경우가 생깁니다. 하지만, 그 많은 파일들 하나하나를 수정하려면 귀찮기도 하고 많은 시간과 노력이 필요하게 되지요.

이럴 경우에, 입맞에 맞게 mp3 파일 이름과 ID3 꼬리표를 간편하게 수정해 주는 도구가 바로 TriTag입니다.

TriTag에는 세 가지의 변환 방식(mode)이 있습니다.
[ul][uli]Filename -> ID3 Tag: 파일 이름에는 음악 재생 번호 같은 모든 필요한 정보를 가지고 있으나, ID3 꼬리표에 기록되어 있는 정보가 불충분할 때 선택.[/uli][uli]ID3 Tag -> Filename: ID3 Tag의 정보는 올바르게 기록되어 있으나, 파일 이름이 불충분하거나 통일되어 있지 않을 때 선택.[/uli][uli]Table -> ID3 Tag & Filename: TriTag의 "파일 이름 & ID3-꼬리표 창"에서 편집한 정보를 가지고 새로운 꼬리표와 파일 이름을 동시에 만들 때 선택.[/uli][/ul]
http://appletree.or.kr/forum/files/tritag_small.jpg
그림을 누르시면 더 큰 그림을 보실 수 있습니다.

1. 작업은 우선, 고치고자 하는 파일들을 TriTag의 "파일 이름 & ID3-꼬리표 창"에 떨어뜨립니다. 그러면, 현재 저장되어 있는 꼬리표와 파일 이름들의 정보가 "파일 이름 & ID3-꼬리표 창"에 보여집니다.

2. 그리고, 위에서 설명된 방식들 중에 원하는 변환 방식을 선택합니다.

3. "Pattern builder..." 단추를 누르고, 여기서 변환 방식에 따라 변환될 파일 이름을 어떻게 바꿀 것인지, 혹은 파일 이름 중에서 어느 부분이 꼬리표의 어느 정보에 해당되는지를 지정해 줍니다. 여기서 지정하는 방법은 파일 이름 중에서 해당되는 부분을 선택하고, 선택된 부분의 정의를 "Available descriptions:" 항목에서 선택해 주면 됩니다. 지정한 형태를 저장하고 적용하려면 "Close dialog and adopt pattern" 단추를 누릅니다.

4. ID3 꼬리표 혹은 파일 이름 중에 몇 가지 정보가 빠져 있을 경우에는, "Default values:" 항목에서 해당 정보들을 채워주고 나서, "Force use of the default values" 단추를 눌러서 비어있는 정보에 이곳에서 지정한 정보가 대신 저장되도록 합니다.

5. 다음에, 변환 선택사항들(Options:) 중에서 원하는 항목을 선택해 줍니다. 선택사항들 중에서 "ID3 Tag -> Filename" 혹은 "Table -> ID3 Tag & Filename" 방식을 선택했을 경우에 선택할 수 있는 "Sort into folders" 항목을 선택하면, 새로 만들어진 꼬리표 정보에 의해서 iTunes의 것처럼 새로운 디렉토리 구조(artist/album/song.mp3)로 파일들을 정리해 줍니다.

6. 만약, 파일 이름과 꼬리표가 쓸모 없는 정보들로만 되어 있다면, "FreeDB..." 단추를 눌러서 노래 정보를 FreeDB에서 불러올 수도 있습니다.

7. 마지막으로, "Preview" 단추를 눌러서 결과를 미리 확인하고, 추가 수정이 필요하다면 "파일 이름 & ID3-꼬리표 창"에서 직접 수정해 주고 "Apply" 단추를 눌러서 결과를 적용합니다.

이렇게 해서 지정한 변환 형태는 "Favourite Patterns" 메뉴에 있는 "Add current pattern"을 선택해서 저장해 놓고, 나중에 계속 사용하실 수도 있습니다.

TriTag는 무료이며, 홈 페이지에 가면 TriTag의 source 파일도 받아 보실 수 있답니다.

485

(0개의 댓글, 맥 개발 글에 작성됨)

PHP Function Index (PHPfi)는 필요할 때마다 잽싸게 PHP 함수에 관한 정보를 불러서 참고할 수 있도록 도와주는 간단한 열람 도구 입니다. 또한, 함께 제공되는 AppleScript의 스크립트를 이용해서 BBEdit와 같은 스크립트 지원 글자 편집기 안에서 선택된 함수 관련 설명서를 쉽게 불러 볼 수도 있답니다.
설치는, PHPfi를 하드 디스크로 복사한 후에,
php.net에 있는 "Many HTML files"라고 표시된 최신 php 설명서를 내려받습니다. 그리고, PHPfi의 환경설정(Cmd + ,)에서 내려받은 php 설명서의 위치를 지정해 주고 문서의 색인(index)을 달면, 참고하고자 하는 php 함수를 손쉽게 찾아 볼 수 있게 됩니다. 여기에, 자주 참고하는 부분에는 책갈피를 끼워 둘 수도 있어서 아주 간편합니다.

http://www.artissoftware.com/phpfi/screenshot.jpg

함께 딸려오는 "Search BBEdit Selection in PHPfi.scpt"의 설치는, 이 스크립트를 BBEdit의 스크립트 폴더에 복사하고, BBEdit의 Window>Palettes>Scripts 메뉴를 선택하면 나타나는 창에서, 앞에서 설치한 스크립트를 선택한 후에, "Set Key..." 단추를 눌러서 원하시는 키(제 경우에는, Option + Command + .)를 지정해 놓습니다. 그러면, BBEdit 안에서 찾고자 하는 php 함수를 선택하고 지정된 키를 누르면 해당 함수의 설명서를 불러와서 볼 수 있게 됩니다.

더불어서, BBEdit 이외의 글자 편집기에서 스크립트를 사용하시려면, PHPif의 Go>Scripting your Own Lookup을 선택하면 해당 글자 편집기를 위해 스크립트를 수정하는 방법이 설명되어 있습니다.

Shareware이며(자유 계약자-US$ 8.50/기업 사용자-US$ 16.50), 학생이나 개인 사용자들은 무료로 사용할 수 있습니다.

참고로, 비슷한 기능을 가진 php 설명서 열람 도구인 PHP Help Browser도 있습니다. 이것은 찾기 기능이 함수들에만 제한된 것이 아니고, 문서 전반에 걸친  비슷한 결과들을 찾아내어 보여줍니다.

486

(0개의 댓글, 어플리케이션 글에 작성됨)

간혹, 여러 게임들 중에서 실행을 시키면 원래의 게임 CD를 넣어줄 것을 요구하는 경우가 많아서 번거로우신 적이 많으셨을 겁니다.

이럴 때를 대비해서 CD 이미지를 미리 만들어 둔 것이 있다면, 해당 이미지를 ‘정보 입수’를 통해 “잠그고” 나서 마운트를 하면, 대부분의 경우 게임 실행 시, 더 이상 CD를 요구하지 않게 됩니다.

더 나아가, 그나마 비좁은 하드 디스크의 귀중한 공간을 차지하고 있는, 게임의 CD 이미지 파일 없이도 게임을 즐길 수 있는 방법이 있다면, 그것은 원래의 게임 CD를 똑같이 흉내내는 “No CD” 이미지를 만들어 놓는 것입니다.

“No CD” 이미지를 만드는 방법은, 우선 CD를 집어넣거나 (Toast를 사용해서) 게임 이미지를 마운트 합니다. 그리고 화면에 “올려진” CD를 다시 Toast로 불러들입니다. 여기서, CD 속의 내용들을 모두 지우고 CD 이름만 남겨둡니다. (여기서 CD의 이름은 바꾸지 말고 그대로 놓아두는 것이 중요합니다) 마지막으로, 디스크 이미지로 저장한 후에, 다시 ‘정보 입수’를 통해 이미지를 잠그면, 드디어 “No CD” 이미지를 만드는 과정이 모두 끝납니다.

이제, 게임을 실행할 때마다, 이렇게 해서 생성한 “No CD” 이미지를 화면에 올려놓기만 하면 게임 CD를 일일이 찾아서 넣어주어야 하는 번거로움은 피하실 수 있답니다.

(하지만, 간혹 이렇게 해서 만든 “No CD” 이미지를 마운트 하고서도, 까다롭게 원래의 게임 CD를 또 요구하는 게임이 있을 수도 있습니다. 이것은 아마도 게임 어플리케이션의 실행 과정 중에, Finder에 올려진 게임 CD의 내용 중 어떤 특정 파일을 찾게 되고, 해당 파일이 없을 경우 정식 게임 CD가 마운트 되지 않았음을 확인하게 되면서 생기는 경우입니다. 그래서, 이 특정 파일을 “No CD” 이미지 속에 포함시켜야만 게임 어플리케이션을 제대로 속일 수 있는 고도(?)의 속임수가 덤으로 필요하게 됩니다.)

487

(2개의 댓글, 어플리케이션 글에 작성됨)

자기만의 .Mac 갖기

http://images.apple.com/dotmac/images/features_idisk.gif이제 막 .Mac이 갱신된 시점에서 $100 정도를 지불하고 사용하게 된다면 과연 얼마나 나에게 쓸모가 있을지 고민하시거나, 아니면 .Mac 서비스와 비슷한 기능을 놀고 있는 자신의 서버에서도 구현이 가능하지 않을까하고 기술적으로 궁금해 하시는 분들이 있으실 겁니다.

그래서, 여기에 자기만의 .Mac을 갖는 방법을 소개해 드리겠습니다.

과연 .Mac이 나에게도 쓸모가 있을까?

대부분의 이유들 중에서도 저한테 .mac이 별로 쓸모가 없는 이유는 어쩌면 다른 사람들에게 .mac을 사용해 보라고 궍장하는 이유들과도 비슷합니다. 한 가지 밝혀두고 싶은 것은, 저는 "일반' 컴퓨터 사용자들의 부류에 속하지 않다는 것입니다. 그래서, 제가 얻고자 하는 것들 또한 그들과는 다를 것이며, 저와 같은 사람들을 위해 Apple의 .mac 서비스가 개선되거나 해서 요구사항들을 충족시켜 줄 수 있으리라 바라만 볼 수도 없을 것입니다. 이 글은 .mac을 비하하는 글이 절대 아니며, 단지 저에게 더욱 유용한 서비스들을 구현하고자 실행했던 방법들을 설명하고 그 경험이 다른 사람들에게도 도움이 되었으면 하는 바랩입니다.

나의 .mac 서비스 사용 용도

전자우편: 사용해 봤지만, 넘처나는 쓰래기 전자우편들로 인해서 결국 사용을 그만 뒀습니다. Apple의 쓰래기 전자우편 걸러내기 기능은 기타 다른 서비스들과 비교해 볼 때 많은 문제가 있는 것 같습니다.

주소록: 저는 .mac의 주소록은 쓰질 않습니다. 왜냐하면 이미 주소록이 저장된 PDA와 iPod를 갖고 있고 개인적인 자료를 웹 싸이트에 올려놓는 것이 꺼려지기 때문입니다.

홈페이지: 다른 서비스들과의 조화와 쉬운 사용법은 좋아하지만 제한적인 기능들 때문에 저에게는 거이 쓸모가 없습니다. 현재 저의 개인적 웹 싸이트의 용량은 350 MB 정도며 또한 데이타베이스와 몇몇 유용한 CGI등 .mac에서는 얻을 수 없는 기능들을 필요로 합니다. 그리고 Apple은 일정 데이타 전송량을 초과하면 싸이트를 닫아놓는 것으로 알려져 있으며, 이것 또한 신경이 쓰이는 단점들 중에 하나입니다.

iDisk: 주기적으로 iDisk에 파일을 올려 놓고 필요할 때마다 내려받기는 하지만 접속 속도가 가끔가다 느려지는 관계로 시간상 지체되는 경우도 있습니다. 차라리 같은 파일을 나만의 WebDav 서버에서다 단지 몇 초만에 올려 놓고 빠른 선이 연결되어 있는 어느 곳에서나 단 몇 분만에 받는 것이 편할 겁니다.

중요 파일 따로 보관: 앞에서도 말했 듯이 저는 개인 정보를 공개된 곳에 저장하고 싶지는 않습니다. 만약 사용해야 할 경우라도, 암호화된 상태로 전송되고 저장된 향태가 아니라면 다른 수단을 이용할 겁니다. 현재 1 GB로 그 용량이 늘어났음에도 별로 끌리지 않는 이유는 아까도 말했듯이 바로 속도입니다. 제가 보기엔 지금 상태라면 백업 기능은 별로 쓸모가 없어 보입니다.

iSync: 주로 주소록과 iCal 일정들을 여러 대의 맥들과 PDA 그리고 iPod와 동기시킬 경우 iSync를 사용합니다.

iCal: iCal은 다른 사람들과 일정들을 공유하고자 할 때 애용하는 기능입니다.

기타:  iCards와 같은 기능들은 거이 사용하질 않습니다만 가끔 무료로 제공되는 소프트웨어들은 유용할 때도 있겠지요.

이번 작업의 목표

유용한 기능들을 그대로 구현: iDisk, iSync, iCal 공유 그리고 백업 등과 같은 유용한 기능들은 그대로 재현할 것.

기능 개선: 그냥 유용한 기능들을 그대로 구현만 해 놓는다면 별로 큰 이득이 없겠지요. 그러므로, 위에서 얘기된 기능들의 단점들을 개선하는 것이 이번 작업의 주 목표가 되겠습니다. iDisk의 경우, 속도와 디스크 공간이 주요 제약이었고, iCal 공유도 그 기능은 훌륭하나 발행과 구독시에는 무척이나 느립니다. 또한 Backup은 사용하기에는 iDisk의 공간과 속도 문제로 거이 쓸모가 없었지요.

이런 것들이 과연 가능할까?: 이미 SpyMac과 같은 곳에서 비슷한 기능들을 제공하고 있으니 길이 있다면 못 할 것도 없습니다.

공략법:

먼저, 대부분의 .Mac 서비스들은 WebDAV의 사용을 위주로 이루어지기 때문에, 첫 번째로 해야 할 준비는 우선 WebDAV 서버를 설정하는 것입니다. 이 주제에 관한 문서들은 이미 여러 곳에 많이 나와있지만, 여기서는 우선 WebDAV 서버를 설정하는데 필요한 과정들에 대해 간략한 요점만을 말씀드리겠습니다. 설치 과정들 중에서 드러난 약간 복잡한 문제는 Apple의 WebDAV 서버 대신에 시스템에 설치되어 있는 것을 사용하도록 만드는 과정입니다. 까다로운 문제지만, 이것 또한 결코 해결하지 못 할 문제는 아닙니다.

WebDAV 서버 설치 및 설정

우선, 첫 단계로 WebDAV를 설치하고 올바로 설정하는 일입니다. FreeBSD 상에서 Apache 2를 운용하고 있다면, 이미 mod_dav가 설치된 상태입니다. 그렇다면 이제 올바로 설정하기만 하면 됩니다. 우선 WebDAV가 사용할 두 개의 디렉토리들을 생성합니다. /home/idisk 디렉토리는 webdav 클라이언트들이 사용할 것이고, /var/run 은 Apache가 내부적으로 사용할 디렉토리입니다.

sudo mkdir /home/idisk/html /var/run/webdav
chmod 755 /var/run/webdav
chown www:www /home/idisk/html /var/run/webdav

위에서는 Apache 서버가 www 사용자로 실행될 때의 경우입니다. 만약 Apache 서버가 다른 사용자(일반적으로 nobody)로 되어 있다면, chown 명령으로 적당한 값을 지정해 주셔야 합니다. 다음에는 Apache의 config 파일에 다음과 같은 설정 내용을 더해 줍니다. (Apache 2.2.x 버전에 적용할 경우, AuthDigestFile 대신에 AuthUserFile을 입력해 주어야 합니다):

DavLockDB /var/run/webdav/DavLock
DavMinTimeout 600

<VirtualHost *:80>
     ServerName idisk.cadillac.net
     DocumentRoot "/home/idisk/html"
</VirtualHost>
    
<Directory "/home/idisk/html">
     Dav On
     AuthType Digest
     AuthName iTools
     AuthDigestDomain "/"
     AuthDigestFile /home/idisk/WebDavUsers
     AuthGroupFile /home/idisk/WebDavGroups
     Options None
     AllowOverride None
     <LimitExcept GET HEAD OPTIONS>
          require valid-user
     </LimitExcept>
 
     Order allow,deny
     Allow from All
</Directory>

다음 작업은 Apache가 인증을 위해 사용할 사용자의 암호 정보가 저장되는 digest 인증 파일을 생성하는 일입니다. (아래는 mattsimerson 사용자를 위한 digest 인증 파일을 생성합니다)

sudo htdigest -c /usr/local/www/WebDavUsers iTools mattsimerson

마지막으로, idisk.cadillac.net를 위한 DNS 기록을 추가하고  Apache를 재시동합니다. 그러면 Finder의 "서버로 연결..." 메뉴를 통해 아래의 그림에서처럼 DNS에 등록된 http://idisk.cadillac.net로 직접 연결할 수 있게 됩니다.

http://appletree.or.kr/forum/files/dotMac/Idisk1.jpg

드디어, 자기만의 iDisk를 갖게 되는 첫 단계를 잘 마쳤습니다. 웹 서버가 내부 네트웍으로 연결된 상태라면 Apple의 iDisk를 사용하는 것보다 훨씬 더 빠르게 느껴질 겁니다. 이것으로 WebDAV 사용을 위한 모든 준비과정은 끝났습니다.

할당량(quota)을 지원하기 위한 mod_dav 수정

Apache 2에 포함된 mod_dav 2가 할당량을 지원하도록 하기 위한 수정 파일은 이 곳에 있습니다. 여기에서 받은 patch 파일에 들어있는 수정 내용을 mod_dav.c 파일 안의 해당 내용과 비교해서 추가해 준 후에 다시 컴파일하고 설치하게 되면, 자신의 WebDAV 서버에 연결할 때마다 할당량(빈 공간)이 제대로 표시되는 것을 확인하실 수 있습니다.

http://appletree.or.kr/forum/files/dotMac/Idisk2.jpg

WebDav 계정 설정

이제 WebDav를 사용하실 수 있으니, 다음은 다른 사람들도 접속할 수 있게 만들면 좋겠지요. 아래의 예에서는, 두 개의 사용자 계정을 설정하는 것으로, 하나는 내것이고 또 다른 하나는 나의 아내(Jen)를 위한 것으로 설정해 놓은 것입니다.

home 디렉토리를 만듭니다:

cd /home/idisk/html
mkdir mattsimerson jen
chdir mattsimerson
mkdir Backup Documents Library Movies Music Pictures Public Sites Sites/.calendars
chdir ../jen
mkdir Backup Documents Library Movies Music Pictures Public Sites Sites/.calendars
chown -R www:www /home/idisk/html

대충 방법을 아시겠지요. 다른 사람들도 추가하려면 이와 같은 과정을 반복하면 되겠습니다.

"개별" 디렉토리들로의 접근을 제한하기
Apache 설정 파일에 다음을 추가해 줍니다:

<Directory "/home/idisk/html/*/Public">
     Options +Indexes
</Directory>
 
<Directory "/home/idisk/html/mattsimerson">
     <LimitExcept GET HEAD OPTIONS>
          require user mattsimerson matt
     </LimitExcept>
</Directory>
 
<Directory "/usr/home/idisk/html/jen">
     <LimitExcept GET HEAD OPTIONS>
          require user jen
     </LimitExcept>
</Directory>

물론 나중에 새로 추가할 사용자들에게도 비슷한 방법을 적용해 줍니다.

WebDAV에서 iCal의 달력 일정 공유하기

iCal의 일정을 다른 사람들과 같이 공유하고 싶으시다면, 방금 설치가 끝난 WebDAV를 사용해서 쉽고 빠르게 공유할 수가 있습니다. 방법은 그냥 iCal이 나의 새로운 서버로 일정을 발행하게 하면 됩니다. 일관성을 유지하기 위해서, Apple이 .mac에서 사용하는 것과 같은 곳인 Sites/.calendars에 발행할 것을 권장합니다.
iCal에서의 설정은 "발행(Publish...)" 메뉴를 선택하고 다음과 같이 설정해 줍니다:

http://appletree.or.kr/forum/files/dotMac/ICal-publish.jpg

설정 후에 발행 단추를 누르면, 다음과 같이 성공적으로 발행을 마쳤다는 알림 창이 보일 겁니다:

http://appletree.or.kr/forum/files/dotMac/ICal-published.jpg

모든 달력들을 갱신하고 나서, 내용이 바뀔 때마다 자동적으로 다시 발행될 수 있도록 수정해 줍니다. 이렇게 해 놓으면 .mac을 사용했을 때 보다 훨씬 빠르게 거이 동시에 바뀐 내용들을 같이 공유할 수 있게 됩니다. 이렇게 되면 웹 서버를 통해 PHP iCalendar를 사용해서 달력들의 일정을 발행하는 것도 아주 손쉬워집니다. 자세한 설정 방법은 이 곳을 참고하세요.

www.mac.com 흉내내기

다음에 해야할 일은 Mac이 새로 설치한 WebDAV 서버를 Apple의 iDisk 서버로 믿게 만드는 작업입니다. 약간 복잡한 문제지만 .mac 없이 Apple의 Backup을 사용하는 법을 소개한 Otto씨의 싸이트에서 많은 도움을 얻을 수 있었습니다. 현재 10.4 Tiger에서는, 시스템 환경설정의 .mac 조절판 접근시에 설정 사항들을 모두 네 곳의 각기 다른 서버들에서 가져옵니다:

[uli]configuration.apple.com[/uli]
[uli]syncmgmt.mac.com[/uli]
[uli]idisk.mac.com[/uli]
[uli]www.mac.com[/uli]
그리고, Backup 클라이언트 소프트웨어는 idisk.mac.com과 www.mac.com으로 접속을 시도합니다. 이것으로, 다음 단계로 해야할 작업은 클라이언트가 서버로부터 어떤 정보를 찾는지를 알아내어서 가능한 아주 비슷한 환경을 구축하는 것입니다. 클라이언트의 접속을 나의 Apache 서버로 재전송 되게 하는 가장 손쉬운 방법으로는 네 개의 hostname들을 나의 서버로 여기게끔 DNS를 설정해 주는 것입니다.

- DNS 설정: DNS 서버를 운용하고 있다면 www.mac.comidisk.mac.com에 대한 정식 권한을 서버의 내부 IP로 부여해주기만 하면 간단하게 해결됩니다. 만약에 여러대의 맥들이 LAN에 의해 물려있는 것이 아니고 서버 컴퓨터 한 대에만 적용시키려면, 간단하게 /etc/hosts 파일에 DNS 기록을 추가해 주시기만 하면 됩니다. 추가 후에는 터미널에서 lookupd -flushcache 명령를 실행하십시오. 그리고 난 후에, ping www.mac.com 명령을 쓰면, 트래픽이 자기 호스트로 가는 것을 확인하실 수 있을 겁니다.

- Apache 설정: Apache가 idisk.apple.com의 것처럼 동작하게 하려면, 여기에 있는 Apache의 추가 설정 파일에서 보실 수 있는 것처럼 Apache의 디렉토리들을 여러개 확장해야 합니다. 또, 이것은 www.mac.com을 흉내내기 위해 Apache의 설정 파일에 추가된 내용입니다. 그리고 또, www.mac.com을 위한 SSL 인증서도 생성해야 하고, 이것에 관해서는 Apache 싸이트의 RTFM에 관한 문서에 잘 설명되어 있습니다. 물론, 이미 LAN으로 연결되어 있는 모든 맥들에 의해 인가된 CA key와 함께 새로운 SSL 증명서도 등록해 둡니다.

- 흉내 스크립트 작성: 다음에는 Apple의 .mac 서버의 것과 비슷한 응답을 보내게 하는 스크립트를 작성하는 일입니다. 이것은 그리 어렵지는 않고 더 자세한 내용을 알고 싶으신 분들은 Otto씨의 싸이트에 올려진 글을 참고하시기 바랍니다. 작동 원리는 이렇습니다. 우선 https의 접속 packet을 훔쳐볼 수는 없기 때문에, Apache의 log 파일에서 어떤 URL들이 요청되는지를 확인합니다. 일단, 이렇게 해서 알게된 정보를 가지고, POST 정보를 임시 파일에 토해내는(기록하는) 스크립트를 설치합니다. 이렇게 해서 얻은 임시 파일 속에는 아래와 비슷한 내용이 기록되어 있을 겁니다:

SERVER_SOFTWARE = Apache/2.0.50 (FreeBSD)
SERVER_NAME = www.mac.com
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.1
SERVER_PORT = 443
REQUEST_METHOD = POST
SCRIPT_NAME = /WebObjects/Info.woa/wa/Query/retrieveDiskConfiguration
REMOTE_ADDR = 10.0.1.218
CONTENT_LENGTH = 160

{
   body = {relativePath = Public; }; 
   function = retrieveDiskConfiguration; 
   header = { 
      password = ******; username = mattsimerson; version = 1; 
   }; 
}

{ } 사이에 있는 내용을 복사한 후에, "foo" 파일에 붙이고 나서 lynx 명령을 사용해서 Apple 서버가 어떻게 응답하는지를 다음과 같은 방법으로 알아냅니다:

lynx -source -post_data -useragent="InternetPref/Version-10.2" \ 
https://www.mac.com/WebObjects/Info.woa/wa/Query/retrieveDiskConfiguration < foo

그러면, 아래와 같은 응답을 받게 됩니다:

{
    payload = {
        guestReadEnabled = Y;
        guestWriteEnabled = N;
        hasGeneralPassword = N;
        iDiskQuotaInBytes = 104857600;
        iDiskUsedBytes = 11383808;
        relativePath = Public;
    };
    statusCode = success;
}

이제, 위의 내용으로 스크립트가 어떻게 응답해야 하는지를 알게 되었으로, 다음처럼 스크립트를 작성합니다:

mkdir -p /home/www.mac.com/WebObjects/Info.woa/wa/Query
cd /home/www.mac.com/WebObjects/Info.woa/wa/Query
vi retrieveDiskConfiguration

retrieveDiskConfiguration의 내용은 다음과 같이 입력합니다:

#!/usr/bin/perl -w

# contributed by Dominic Rivera

$idisk_volume = '/usr';

my $output = `df $idisk_volume`;
$output = (split('\n',$output))[1];
my ( $total_disk_size, $used_bytes ) = (split(' ',$output))[1,2];

$total_disk_size *= 1024;
$used_bytes *= 1024;

print <<EOCONF
Content-type: text/plain

{
    payload = {
        guestReadEnabled = Y;
        guestWriteEnabled = N;
        hasGeneralPassword = N;
        iDiskQuotaInBytes = $total_disk_size;
        iDiskUsedBytes = $used_bytes;
        relativePath = Public;
    };
    statusCode = success;
}
EOCONF
;

__END__

# a newer version for per-user disk images

#!/usr/bin/perl -w

my $username;

# Grab the username from the input data.
while(<STDIN>){
 if ( /username\s+=\s+(.*?)\;/ ){
   $username = $1;;
 }
}

# Find the total size and the used size of the volume /idisk/{username}
my $output = `df /idisk/$username`;
$output = (split('\n',$output))[1];
my ( $total_disk_size, $used_bytes ) = (split(' ',$output))[1,2];

$total_disk_size *= 1024;
$used_bytes *= 1024;

print "Content-type: text/plain\n";
print "\n";
print "{\n";
print "    payload = {\n";
print "        guestReadEnabled = Y;\n";
print "        guestWriteEnabled = N;\n";
print "        hasGeneralPassword = N;\n";
print "        iDiskQuotaInBytes = $total_disk_size;\n";
print "        iDiskUsedBytes = $used_bytes;\n";
print "        relativePath = Public;\n";
print "    };\n";
print "    statusCode = success;\n";
print "}\n";

이렇게 해서, 이제 조절판의 iDisk 항목을 열어보면, 아래의 그림에서처럼 방금 전에 생성했던 스크립트에서 생성한 값을 받아 그 정보를 제대로 표시해 주는 것을 확인하실 수 있습니다.

http://appletree.or.kr/forum/files/dotMac/idisk-cp.jpg

이제 Finder의 "Go->iDisk->My iDisk"메뉴 혹은 Cmd+Shift+I 단축키를 사용해서 바로 자기의 iDisk로 접근할 수 있습니다. 물론 접근 후에는 모든 반응 속도가 훨씬 빠르게 느껴지고 디스크의 사용 공간도 더 이상 제약을 받을 필요가 없을 것입니다.

http://appletree.or.kr/forum/files/dotMac/idisk-simulated.jpg

Apple의 Backup 어플리케이션 쓰기

Backup을 실행시키면, URL 주소 "https://www.mac.com/WebObjects/Info.woa/wa/Query/accountInfo"를 확인하는 것을 Apache의 log 파일을 통해 알 수 있습니다. 앞에서처럼, 스크립트를 설치해서 POST 되어지는 정보를 낚아채서 어떤 정보가 요구되는지를 알아낼 수 있습니다. 이렇게 해서 얻게 된 임시 파일 안 내용은 다음과 같습니다.

SERVER_SOFTWARE = Apache/2.0.50 (FreeBSD)
SERVER_NAME = www.mac.com
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.1
SERVER_PORT = 443
REQUEST_METHOD = POST
HTTP_ACCEPT = image/gif, image/jpeg, image/pjpeg, */*
PATH_INFO = 
PATH_TRANSLATED = 
SCRIPT_NAME = /WebObjects/Info.woa/wa/Query/accountInfo
QUERY_STRING = 
REMOTE_HOST =
REMOTE_ADDR = 10.0.1.218
REMOTE_USER =
AUTH_TYPE =
CONTENT_TYPE = text/xml
CONTENT_LENGTH = 165

{
    body = {keys = (iToolsBackupActivated, trialAccountDaysLeft); };
    function = accountInfo; 
    header = {password = *******; username = mattsimerson; }; 
}

이전처럼, 다시 한번 { } 사이에 있는 내용을 임시 파일인 "foo"에 저장하고 Apple의 URL에 다음과 같은 Lynx 명령을 사용해서 전달합니다:

lynx -source -post_data -useragent="Backup 2.0.2" https://www.mac.com/WebObjects/Info.woa ... ccountInfo < foo

그러면 다음과 같은 결과를 얻습니다:

{
   payload = {
      iToolsBackupActivated = Y; 
   }; 
   statusCode = success; 
}

그러면 이제 accountInfo 파일 안에는 Backup에서 요구할 대마다, 위에서 얻은 값을 되돌려주는 스크립트를 설정합니다. 우선 터미널에서 vi를 사용해서 accountInfo 파일을 엽니다:

vi /home/www.mac.com/WebObjects/Info.woa/wa/Query/accountInfo

그리고 나서 다음과 같은 내용을 입력합니다:

#!/bin/sh

echo Content-type: text/plain
echo

cat < < EOT
{
    payload = { 
      iToolsBackupActivated = Y; trialAccountDaysLeft = -1;
    };
    statusCode = success;
}
EOT

그리고 나서, 처음 Backup을 실행시키면, 서버를 검사하고 나서 Backup 기능이 켜져았는지를 확인하고 나서, 드디어 내부 네트웍으로 연결되어 있는 iDisk 서버로 파일들을 저장할 수 있게 됩니다. 이런 확인 과정을 얼마나 자주 거치는지는 정확히 알 수 없습니다만, 아마 Backup의 설정 파일을 지우지 않는 이상은 다시 확인하지는 않는 것 같습니다.

http://appletree.or.kr/forum/files/dotMac/Backup.jpg

여러 .mac 계정을 구입하지 않고서도 iDisk와 Backup의 기능을 충분히 활용할 수 있게 되었습니다. 물론 여러모로 .mac보다 훨씬 훌륭할 겁니다! wink

Proxy 설정

지금까지의 설정으로는 www.mac.com으로의 접속을 내부 서버 주소로 다시 전달하게 되면서 LAN 안에서는 www.mac.com으로 접속할 수 없는 새로운 문제에 부딪히게 됩니다. 아직 .mac 계정을 사용하고 있다면, 접속을 하지 못 하는 문제는 Apache 설정 파일에 약간의 proxy directives를 추가해 주시면 해결될 수 있습니다.

먼저, httpd.conf 파일을 열고 proxy_module, proxy_connect_module (for ssl), 그리고 proxy_http_module 모듈의 주석을 제거합니다. 그리고 다음과 같은 부분을 추가합니다:

<Proxy *>
  Order Deny,Allow
  Deny from all
  Allow from 10.0
</Proxy>

위의 Proxy 선언문은 밖에서 내부 proxy 서버로의 접근을 막습니다. 공개적으로 사용 가능한 proxy 서버들은 모두에게 위험한 취약점을 가지고 있기 때문에 꼭 보안에 신경을 써야 합니다! 나머지, www.mac.com의 가상 호스트 저장 정보에 다음과 같은 명령들을 추가합니다:

ProxyRequests On
ProxyVia On
ProxyPass /WebObjects/Info.woa/wa/Query/accountInfo !
ProxyPass /WebObjects/Info.woa/wa/Query/retrieveDiskConfiguration !
ProxyPass / http://www.mac.com/

다음은 참고를 위해 올려놓은 수정을 마친 저의 mac.com vhost 설정 파일입니다.

마지막으로 남은 일이 있다면, 여러 시스템들 간에 주소록, iCal, 그리고 Safari 책갈피들을 서로 동기화 해주는 iSync의 기능을 구현해 주는 것입니다. 여기에 관해서는 Jeremy Baker씨가 궁리하고 연구하신 결과가 있습니만, 아직은 더 알아내야 할 과제가 남아있는 상태입니다.

알아두실 점

iPhoto의 Homepage 발행과 iSync: 이것은 아직 불가능한 작업으로 남아있습니다. 현재로서는 그 이유를 알 수가 없습니다만, 이것이 크게 중요한 기능은 아니라서 큰 걱정은 안하셔도 될 것 같습니다. 대신에 GalleryiPhotoToGallery plugin 그리고 BetterHTMLExport와 몇 가지 추가된 template만 있다면 훨씬 멋진 개인 사진첩을 꾸미실 수 있을 겁니다. iSync는 .mac 동기화 기능을 꺼놓고 사용하면 작동은 하겠습니다만, 여러 컴퓨터들 간의 동기화 기능은 여전히 사용할 수가 없게 되는 것이 가장 큰 손실이 되겠군요. hmm

따옴 - The Network People, Inc.

수정 - Mac OS X 10.4 Tiger에 적용될 수 있도록 내용을 갱신함.

488

(0개의 댓글, 어플리케이션 글에 작성됨)

이미 아시겠지만 iCal은 달력이 양력 기준이라 음력을 기준으로 하는 휴일은 매년 자동으로 갱신되게 끔 주기를 설정해 줄 수가 없습니다. 그래서 해가 바뀔 때마다 해당 년도의 음력 날짜를 iCal에 다시 일일이 지정해 주어야 하구요. 그래서 한국 애플에서 제공하고 있는 휴일은 양력 휴일들만 표시되어 있는 것 같습니다. 음력 표시 달력도 중국이나 대만의 음력 달력은 보입니다만 모두 한자라...결국은, 벽에 걸려있는 달력을 띠어다가 짬(?) 날때마다 일일이 iCal에 넣게 되었습니다.

아래에 매달아 놓은 파일은 Korean LunarCal.ics와 South Korean Holidays.ics가 들어있습니다.
[ul][uli]South Korean Holidays.ics - 2005년 음력 기준 공휴일이 포함된 달력입니다.(설날 - 음력 1월 1일, 석가탄신일 - 음력 4월 8일, 추석 - 음력 8월 15일)[/uli][uli]Korean LunarCal.ics - 2005년 음력일 및 24절기, 법정 기념일을 추가했습니다. 법정 기념일은 매년 자동 갱신됩니다(해당 월의 주 기준 기념일은 제외: 상공의 날 - 3월 셋째 수요일, 향토예비군의 날 - 4월 첫째 토요일, 성년의 날 - 5월 셋째 월요일, 저축의 날 - 10월 마지막 화요일). 그래서 후년에도 계속 쓰시려면 음력일과 24절기 그리고 특정 기념일을 추가로 넣어주셔야 됩니다.[/uli][/ul]

설치는 위의 파일들을 홈 폴더에 있는 ~/Library/Calendars/ 폴더 안에 넣으시고 iCal을 실행시키거나 iCal 안에서 새로운 달력을 만드신 후에 파일 메뉴에 있는 "가져오기..."를 선택해서 해당 파일을 가져오시면 쓰실 수 있습니다. (더 간단하게, 내려받은 음력 ics 파일을 마우스로 두 번 눌려주셔도 됩니다.)

즐거운 계획들로 채우시길...

매달아 놓음: iCal Korean Lunar Calendar 2005

489

(0개의 댓글, 어플리케이션 글에 작성됨)

여러가지 비행 시뮬레이션 오락들 중에 비행 역학과 사실성 등을 생각해 보면 단연 X-Plane이 매력적이라고 생각합니다. 게임으로는 처음으로 미연방항공국(FAA)으로부터 인증을 받아서, 실제 비행 면장들을 따기 위해 X-Plane을 사용한 훈련 시간도 인정을 받을 수 있답니다. 물론, 실제 log time을 인정받기 위해서는 여러가지 여건이 충족되어야 합니다만, 이 정도면 이미 단순이 즐기기 위한 게임의 수준을 넘어서고 있습니다.

demo를 받으셔서 실제 조종간을 시험해 보실 수도 있습니다만, 대신 컴퓨터에 정식으로 구입한 CD가 삽입되어 있지 않다면 6 분 후에 자동으로 조종간이 꼼짝을 안하게 됩니다.

참고 주소들:
[ul][uli]미국 X-Plane 동호회[/uli][uli]한국 X-Plane 웹 싸이트[/uli][uli]X-Plane 용 추가 전세계 Scenery를 받을 수 있는 곳[/uli][/ul]
재미있는 것은, X-Plane 개발자인 Austin Mayer도 맥 유저라는군요. 여기로 가시면 X-Plane 개발에 절대 필요한 그의 일부 밝혀진 비밀병기들을 보실 수도 있습니다. big_smile

490

(1개의 댓글, Mac OS 글에 작성됨)

bash on Mac OS X

by David Miller
02/24/2004

가져온 글: http://www.macdevcenter.com/pub/a/mac/2 … /bash.html

만약 여러분이 제목을 보시고 이 글에 관심을 가지시게 되셨다면, 그 것은 아마도 OS X의 터미널에 익숙하시거나 혹은 메뉴나 아이콘들을 클릭하기 보다는 명령어들을 직접 입력해서 작업하는 것을 더 편안하게 느끼실 수도 있기 때문일 겁니다.
만약 그렇지 않다면, Chris Stone씨가 쓴 "Learning the Mac OS X Terminal"과 "Learning the Terminal in Jaguar"라는 제목의 글을 읽으시면 많은 참고가 되실 겁니다.

Jaquar에서 Panther로 옮겨 오면서, Mac OS X의 기본 shell이 tcsh에서 bash로 바뀌었음을 다른 글들에서 종종 언급된 것을 보셨을 겁니다. 만약 Jaquar에서 Panther로 업그레이드를 하셨다면, 처음 Panther로 로그 인을 했을 때는 기존의 설정들이 그대로 보존된 상태이기 때문에 계속 tcsh를 사용하게 되며, 새로운 계정을 생성했을 경우에만 기본적으로 bash를 사용되게 됩니다. 대부분의 일반 터미널 사용자들은 일상적인 사용 환경이 전과 비슷하기 때문에 바뀐 점을 아마 전혀 눈치채시질 못 할 겁니다:

  • cd 명령은 여전히 다른 디렉토리로 이동할 때 쓰이며,

  • ls 명령도 여전히 디렉토리의 내용을 보여줄 것 이며,

  • rm 명령 또한 여전히 파일들을 지울 때 사용됩니다.

  • 그리고 화살표 키를 사용해서 전에 입력했던 명령들에 대한 과거 기록들을 동일하게 확인하실 수도 있습니다.

하지만 bash를 사용하시면서 aliases, 환경 변수, 혹은 이전 tcsh에서 사용했던 여러가지 주요 사용환경들이 바뀌었거나 비슷하게 적용되지 않음을 알게 되실 겁니다. 그래서, 이 글이 Jaguar에서 tcsh를 사용하셨던 분들이 Panther의 bash로 전환하는 데 도움이 되었으면 합니다.


Unix 개론: Shell이란 무엇인가?

이쯤 와서 여러분은 아마도 shell이란 바로 컴퓨터의 가장 깊고도 어두우며, 아주 으슥한 곳에 숨어있는 커다란 털복숭이 괴물과 여러분 사이를 연결해 주는 것 정도로 알고 계실 겁니다. 이 커널(kernel)이라고 알려진 괴물은 우연치 않게 컴퓨터 먹이 사슬의 가장 꼭대기에 있어서, 각각의 작업들에 사용되는 자원들(메로리, 프로세서, 그리고 디스크)을 관리하면서 모든 것들이 원래대로 올바로 수행될 수 있도록 지원합니다.

그래서 만약 커널이 제대로 동작을 안하게 된다면 어떤 일들이 일어날 지는 상상하실 수 있으실 겁니다: 프로그램들이 갑작스레 죽기 시작하고, 두렵고 지긋지긋한 바람개비가 돌기 시작하며, 컴퓨터가 서서히 이상한 징후들을 나타내기 시작할 겁니다. 여러분은 아마도 이러한 상황을 이전에도 마추치신 경험이 있을 것이며, 모르시는 분들도 계시겠지만, Windows 사용자들에게는 아주 친숙한 그 "죽음의 퍼런 화면"과도 비슷한 커널 패닉을 Mac OS X 태생 이전의 다양한 시스템들을 사용해본 분들이라면 여기저기서 가끔식 맞닥뜨린 경험도 있으실 겁니다.

이쯤에서는 이미 알고 계시겠지만, 이 괴물을 통제하는 수단인 shell은 그 종류가 여럿이 있습니다. 어떤 것들은 대략 40 여년 전 Unix시절에 만들어진 것들도 있으며, 이 것들 모두는 같은 일은 하지만, 제공되는 기능들이나 지원하는 용법들을 보면 각각의 고유한 특징들을 가지고 있습니다.


간략한 Shell의 역사

맨 처음의 shell(sh)은 개발자 Stephen Bourne의 이름을 따서 명명된 Bourne Shell로 AT&T Bell Labs에서 개발된 첫 Unix 운영 시스템에 함께 내장되어 있었습니다. 이후에, 만들어진 모든 shell들은 처음 개발된 Bourne Shell을 기초로 하게 되었습니다.

모태의 이름에서 비롯된 Bourne Again Shell(bash)은 Bourne Shell과는 완전하게 호환되며 작업 제어, command-line 편집, 그리고 개선된 scripting 지원 등과 같은 추가 기능들로 인해, Bourne Shell의 공식적인 후임의 shell로 여겨저 오고 있습니다. Free Software Foundation에 의해 개발되고 관리되어온 bash 소스는 무료로 사용 가능하며, 어떠한 Unix 호환 시스템에서도 쉽게 컴파일 될 수가 있습니다.

그래서 만약 여러분이 Linux*BSD 환경에서 Konsole 혹은 Gnome Terminal을 열게 되신다면 곧바로 bash가 여러분의 명령을 받기 위해 대기하고 있을 겁니다.


나는 차이점을 모르겠는데, 댁은 차이점을 말해줄 수 있겠소?

Aqua, KDE, 그리고 Gnome과 같은 창 구현(Windowing) 시스템들은 사용자의 명령을 컴퓨터의 하부 시스템에 전달하기 위해 공통적으로 메뉴, 아이콘, 창 그리고 커서 등을 사용합니다. 하지만 각각의 것 들을 서로 비교해 보면 단지 피상적인 것 말고도 (더 좋던 혹은 더 나쁘던) 각기 고유의 특징들을 가지고 있습니다. 예를 들어, Aqua의 쉬트(sheet - 예를 들어, 도큐멘트를 저장할 때 밑으로 내려오는 창과 같은)는 웹 브라우저나 워드 프로세서와 같은 다중 도큐멘트 어플리케이션에서 대화 상자(dialog box)의 기능을 구현하는데 있어서 해당 도큐멘트의 대화 상자가 열려 있어도 다른 창의 도큐멘트를 계속 사용할 수 있게 하는 수단을 제공하고 있습니다.

마찬가지로, shell들도 같은 기능을 수행함에 있어서도 서로를 구별짓게 하는 각자 고유의 특징들을 가지고 있습니다. 여기서의 같은 기능이란 바로 여러분의 명령을 컴퓨터 속 커다란 털복숭이 괴물에게 전달해서, 그 결과를 다시 여러분에게 보고하는 일이 주일 겁니다. 이런 이유로 ~/.tcshrc에 저장되어 있는 대부분의 명령들을 bash 안에서 실행시키면 실패되고 마는 것은 바로, bash가 상응하는 대부분의 명령들을 다른 용법으로 사용하기 때문입니다.


없는 것 빼고 다 있다

Panther는 운영 시스템 속의 여러 Unix 구성 파일들과 함께, 다섯 가지의 shell들을 대부분의 다른 실행 파일들처럼 Mac OS X의 /bin 폴더에 설치 저장합니다:

http://www.macdevcenter.com/mac/2004/02/24/graphics/bin.jpg
그림 1: Panther에 포함된 shell들은 sh, bash, csh, tcsh, zsh가 있습니다.

파일들의 크기로만 살펴본다면, bash와 sh 그리고 tcsh와 csh는 실제적으로 똑 같게 보입니다만, tcsh가 csh와 호환되는 것 처럼 bash도 sh와 완전한 호환성을 가지고 있으며, 이것은 앞에서 논의되었던 서로 다른 shell들의 등장에서 서로가 맞물려 있음을 짐작하게 합니다.

한 가지 알아두셔야 할 것은 위에 나열되어 있는 shell들만을 사용할 수 있는 것은 아니라는 점입니다. Korn shell(ksh)처럼 몇몇 기타 shell들은 내려받아서 Mac OS X (혹은 기타 다른 Unix 시스템)에서 바로 컴파일 하실 수도 있습니다. 하지만, 대부분의 Panther 사용자들은 기본적으로 제공되는 shell들만으로도 충분하고, 만약 원하는 shell이 포함되어 있지 않다고 생각하시는 분은, 이미 설치 파일을 받아서 컴파일 하셨으리라 믿습니다.


bash로 이사 가기

Mac OS X에는 로그 인 시의 기본적으로 사용되는 shell을 바꾸는 방법으로 몇 가지가 있습니다. OS X는 Unix 워크스테이션과 친숙한 일반 컴퓨터를 위한 운영 시스템이라는 서로를 달리하는 성격을 모두 가지고 있다는 점을 생각해 보면, 기본 shell을 바꾸는 것이 shell 자체 내에서 수행될 수도 있고, 또 다른 방법으로 마우스 하나 만 가지고도 가능하다는 것은 그리 놀랄 만한 일이 아닐 겁니다.

- 마우스를 가지고 전환

이상하게 들릴지도 모르겠지만, shell이란 무엇인지를 전혀 모르고 있어도 기본 로그인 shell을 다른 것으로 바꿀 수는 있습니다. 이것이 좋은 것 인지 나쁜 것 인지는 저도 장담을 못 하겠지만, 그냥 터미널의 환경설정 창을 열고 "다음 명령 실행(Execute this command)" 항목을 선택 후, 글 입력 란에 아래 처럼 shell의 절대 경로를 입력하시면 됩니다.

http://www.macdevcenter.com/mac/2004/02/24/graphics/preferences.jpg
그림 2: bash로 전환하기 위해 터미널의 환경설정 창 사용.

그리고 나서 터미널을 종료하고, 다시 켜면 새로 설정했던 효과가 적용됩니다.

- Shell에서 전환

위에 설명된 기본 shell을 바꾸는 법은 Apple에서 제공한 또 하나의 편의 수단입니다. 하지만, Mac OS X의 내제된 Unix에 적용되는 여러 설정 사항들처럼, 이것은 단지 터미널에서 실행될 수 있는 Unix 명령이 그래픽 인터페이스로 표현된 것 뿐입니다.

창과 마우스가 존재하지 않던 시절에는, 어쩌면 끔직하게 들리실지도 모겠지만, 모든 작업들은 명령어 입력(command-line)을 통해 이루어 졌었답니다. 대부분의 Unix 시스템들에서는, shell을 bash로 바꾸기 위해서는 chsh bash 명령을 사용합니다. 하지만, Apple은 OS X의 chsh 명령을 약간 수정해 놓아서 현재는 같은 작업을 수행하려면 chsh -s bash 명령을 사용해야 합니다.

http://www.macdevcenter.com/mac/2004/02/24/graphics/chsh.jpg
그림 3: shell 전환의 결과(성공적인 전환과 존재하지 않는 shell로의 전환 시도로 인한 실패를 같이 보여줌).

다시 한번, 터미널을 껐다 켜서 제대로 전환이 되었는 지 확인하십시오.


bash에서 작업하기

이제, 전에 사용하시던 shell을 bash로 바꾸셨거나 혹은 Panther에 의해 자동으로 설정된 상태라면, bash에서 작업하실 수 있게 되었습니다. 다시 한 번 확인을 위해서, 터미널에 echo $SHELL 명령을 입력하시면 결과(/bin/bash)를 보실 수 있습니다.

bash가 가지고 있는 크기와 복잡성 때문에, 여기서 모든 기능들을 다 다루어 볼 수는 없습니다. 대신, tcsh에서 bash로 전환하신 분들이 종종 범하시기 쉬운 일반적 실수들에 중점을 두어 살펴보겠습니다. 자, 이제 시작합니다.

- 사용 환경 길들이기

매번 컴퓨터로 로그 인 할 때마다, bash는 기타 다른 shell들 처럼 사용 환경을 구현하기 위해 초기화 파일들을 찾게 됩니다. 그래서, 로그 인 할 때마다 매번 같은 명령들을 일일이 실행하는 대신, 이런 명령들을 초기화 파일에 담아 두면 bash가 이런 단조로운 작업들을 대신 처리하게 할 수 있습니다. bash가 이런 파일들을 찾는 위치는 각각의 고유 사용 목적에 따라 아래처럼 달라집니다.

/etc/profile - bash와 sh shell의 시스템 전반에 관련된 설정 파일.
~/.profile - 새로운 터미널 창을 열 때처럼, 새로운 shell이 생성될 때 실행됨.
~/.bash_logout - shell에서 로그 아웃 할 때 실행됨.

그래서, 매번 여러분이 터미널을 열 때마다 실행되어야 할 명령들은 ~/.profile(만약 이 위치에 없다면 새로 만드셔야 합니다)에 위치한 설정 파일에 저장되어야 합니다. 그리고, 만약 명령들이 컴퓨터에 있는 모든 계정의 bash 사용자들에게 적용되게 하시려면 대신 /etc/profile 파일에 저장하십시오.

아래는 초기화 파일에 있는 내용의 한 예입니다:

# shell variables
PS1="\n$PS1 "
PS2=": "

# environment variables
export CVSROOT=/usr/local/cvsroot
export CVS_RSH=/usr/bin/ssh
export JAVA_HOME=/Library/Java/Home
export ANT_HOME=/usr/local/ant
export CLASSPATH=/Users/dave/FVL/xerces.jar

# the path is initially set to "/bin:/sbin:/usr/bin:/usr/sbin"
export PATH=$PATH:/usr/local/bin:/usr/local/mysql/bin

# aliases
alias l="ls -l"
alias ll="ls -al"
alias mckoi="java com.mckoi.runtime.McKoiDBMain"

만약 이전에 tcsh에서 shell 변수들이나 aliases 등과 작업하신 경험이 있으시다면, 위에 보이는 명령들은 무척이나 친숙하게 보이실 겁니다. 매번 설정 파일을 변경할 때마다 최근에 변경한 사항들을 적용되게 하기 위해서는 항상 "새롭게 인식시키는" 작업이 필요합니다.(웹 브라우저가 가장 최신의 웹 페이지 정보를 가져오게 하기 위해 "새로 고침" 버튼을 누르는 것과 비슷하게 생각할 수 있습니다) 이 작업은 source filename 명령을 이용하면 되고, 로그 아웃 스크립트의 경우에는 source ~/.bash_logout 명령을 사용하시면 됩니다.

- Shell에서의 변수 쓰임새

프로그래밍 언어에서 사용되는 변수의 기능을 살펴보면 프로그램의 실행 중, 어떤 정해진 시점에서 숫자나 글, 혹은 날짜와 같은 정보를 나중에 다시 꺼내서 사용하기 위한 임시 저장 공간으로 쓰입니다. 이것을 shell에 적용해 보면 (실제로 shell은 프로그래밍 언어이기도 합니다) 변수에는 사용중인 디렉토리나, 터미널 창에 표시될 문장, 혹은 사용할 도구나 프로그램들이 사용하게 될 여러 종류의 정보들을 담아 둘 수 있습니다. bash에서는 두 가지 유형의 변수들을 가지고 있는 데, "일반" 변수와 환경 변수(environment variables)가 있습니다.

- 일반 변수

일반 변수는 통상적으로 자주 사용되는 정보를 담는데 사용됩니다. C나 Java에서와는 달리 shell에서 사용되는 변수들은 유형의 제약을 덜 받기 때문에, 거이 아무것이나(예를 들어, 숫자, 문장, array나 hash 같은 합성 값) 담아둘 수 있습니다. 새로운 변수를 만드는 것은 비교적 간단합니다: name=value와 같은 형식을 사용해서 생성하고 나중에 다시 불러올 때는 $name 형식을 사용하면 됩니다.

그래서, 만약 새로운 터미널 창을 열 때마다 현재의 날짜를 보고 싶으시면, 다음과 같은 줄을 초기화 파일에 추가해 주시면 됩니다:

mydate=`date "+%H:%M:%S %m/%d/%y"`
echo "반갑습니다! $USER님, 현재 시간은 $mydate입니다"

shell 스크립팅에 대한 더 자세한 정보는 처음에 소개된 Chris Stone씨의 글을 참고하시기 바랍니다.

- 환경 변수

환경 변수는 shell 변수들 중에서도 본질적으로 특별한 경우입니다. 이것은 shell로부터 실행되는 모든 하위 처리 작업들에게도 적용이 됩니다. 쉽게 말하면, shell 안에서 실행되는 모든 어플리케이션들과 스크립트들이 shell의 환경 변수 값을 읽고 사용할 수 있다는 뜻입니다. 이런 결과로, 명령어 입력(command-line) 프로그램들에서는 일반적으로 환경 변수들을 설정과 관련된 작업에 사용합니다.

사용 관례를 따르면, 환경 변수의 이름은 모두 대문자를 사용합니다. OS X에서 사용되는 환경 변수들로는 다음과 같은 것들이 있습니다:
PATH - shell의 실행 파일들이 저장되어 있는 콜론으로 분류된 디렉토리들의 목록: /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
CLASSPATH - Java Runtime Environment을 사용하는 JAR 파일들과 Java class 파일들이 저장되어 있는 콜론으로 분류된 디렉토리들의 목록: /Users/dave/FVL/Java/xerces.jar:/Users/dave/FVL/mckoi.jar
JAVA_HOME - Java가 설치되어 있는 기본 디렉토리: /Library/Java/Home
PWD - 파일 시스템의 현재 디렉토리: /Applications
USER - 로그 인 이름: dave

shell에 현재 지정되어 있는 환경 변수들을 확인해 보기 위해서는, env 명령을 사용하게 되면 아래의 그림처럼 모든 환경 변수들을 터미널에 표시해 줍니다.

http://www.macdevcenter.com/mac/2004/02/24/graphics/env.jpg
그림 4: 저자의 shell에 지정되어 있는 모든 환경 변수들의 예.

새로운 환경 변수를 만드는 방법은 아주 쉽습니다. bash에서는 export VAR_NAME=value 형식의 문법을 사용합니다. 그래서 모든 shell 변수들은 export 명령과 함께 사용되면 환경 변수로 정의될 수 있습니다:

# JAVA_HOME 환경 변수 생성
export JAVA_HOME=/Library/Java/Home

#두 개의 줄을 사용해서 명시적으로 같은 효과를 나타낼 수도 있습니다
JAVA_HOME=/Library/Java/Home
export JAVA_HOME

그렇다면, 만약에 필요한 환경 변수가 존재하지 않는다면 어떻게 될까요? 결론적으로, 커널 패닉이 일어나거나 컴퓨터가 연기를 뿜어낸다는 등의 별로 놀랄만 한 일들은 발생하지 않습니다. 물론 shell이나 관련 도구들은 어떤 특정의 정의되어진 변수들을 필요로 할 수도 있겠지만, 어떤 도구들은 그들 만의 환경 변수를 사용할 수도 있습니다. 그래서, 만약 필요한 변수가 존재하지 않는다면, 관련 프로그램은 안전하게 그냥 작업을 중단할 것이며 어떤 변수가 필요한 지를 Apachefop 형식으로 표시해 줄 겁니다.

http://www.macdevcenter.com/mac/2004/02/24/graphics/fop.jpg
그림 5: 필요한 환경 변수가 없을 때의 대표적인 결과의 예.

아래의 표에서는 OS X의 tcsh와 bash 간의 작업하면서 서로 구별되는 변수들(shell 그리고 환경 변수들 모두)을 보여줍니다.
모든 shell 변수 표시 - tcsh: set, bash: set
shell 변수 생성 - tcsh: set name=value, bash: name=value
shell 변수 삭제 - tcsh: unset name, bash: unset name
모든 환경 변수 나열 - tcsh: env, bash: env
환경 변수 생성 - tcsh: setenv name value, bash: export name=value
환경 변수 삭제 - tcsh: unsetenv name, bash: unset name

- Aliases

Aliases는 지금까지 오랫 동안 Mac OS의 일부분으로서 사용되어 왔습니다. 하지만, 전통적으로 두 가지의 서로 다른 뿌리(Unix와 Mac OS)에서 이어져 온 것이기 때문에 Mac OS X에 와서는 용어상으로 상당히 혼란스런 상황을 맞이하게 되었습니다.

  • Finder에서는, 가상본(alias)은 하드 드라이브의 다릇 곳에 위치하는 파일에 쉽게 접근할 수 있도록 하는 기능으로 사용되며, 여러 곳에서 같은 하나의 파일에 접근할 수 있도록 합니다.

  • shell에서의 alias도 비슷한 목적으로 사용되지만, 오직 글자만 사용되는 환경에 존재하는 이유로, 그 용법은 조금 다릅니다 (Finder의 가상본에 해당하는 것은 대신 link가 사용됩니다); shell의 alias는 거이 모든 Unix 명령을 또 다른 이름의 것으로 대치할 수 있게 해서, 원래의 명령을 새로운 이름으로 대신 불러서 사용할 수 있게 합니다.

Alias는 변수들과 비슷한 방법으로 선언문 앞에 alias 단어를 붙여서 선언합니다: alias name=command. 만약 명령에 공간도 포함된다면, 따옴표 안으로 같이 싸주셔야 됩니다. 현재 어떤 alias들이 정의되어 있는 지를 확인하시려면, 간단하게 alias를 입력하시면 됩니다 (그리고 alias를 삭제하려 할 때는, unalias name 명령을 사용합니다):

alias l="ls -l"
alias ll="ls -al"
alias ~="cd ~"
alias md=mkdir
alias mckoi="java com.mckoi.runtime.McKoiDBMain "

# md 이름의 alias 삭제 (사용 본보기)
unalias md

아래의 그림은 위에서 만든 처음 두 개의 alias를 사용한 예를 보여줍니다:

http://www.macdevcenter.com/mac/2004/02/24/graphics/l.jpg
그림 6: 간단한 alias들 만으로도 키보드에서 입력하는 시간을 간편하게 절약해 줄 수 있다는 것을 보여줍니다.

- 터미널 화면의 명령 대기 메시지(Prompt) 설정하기

터미널을 열면 그 날의 메시지가 표시되고 나서, 가장 처름 보게 되는 것은 여러분의 모든 소원을 들어주기 위해 대기하고 있는 명령 대기 메시지입니다. 만약 Jaguar의 tcsh 명령 대기 메시지를 보아 오셨던 분이라면, 아래의 그림처럼 표시되는 Panther의 기본 명령 대기 메시지를 보고는 실망을 하셨을 겁니다:

http://www.macdevcenter.com/mac/2004/02/24/graphics/defaultPrompt.jpg
그림 7: Panther에 있는 bash의 기본 명령 대기 메시지.

하지만 tcsh에서처럼, bash의 명령 대기 메시지를 바꾸는 일은 두 개의 특별한 shell 변수인, PS1 그리고 PS2의 값을 설정하는 것으로 해결됩니다. 여기서 왜 꼭 두 개일까요? -- PS1는 기본 명령 대기 메시지로, 매번 새로운 명령어가 입력될 때마다 표시되지만, PS2는 제 2의 명령 대기 메시지로, 명령어 길이가 한 줄 이상이라서 다음 줄로 줄바꿈 할 때마다 표시됩니다:

http://www.macdevcenter.com/mac/2004/02/24/graphics/ps1ps2.jpg
그림 8: bash의 기본 PS1와 PS2 사용의 예.

아래의 표는 명령 대기 메시지에 넣을 수 있는 정보들의 목록입니다.
\a - ASCII bell 글자
\d - 현재 날짜: Sun Feb 08
\H - 호스트 이름(hostname): Ginger.local
\h - 단축 호스트 이름(hostname): Ginger
\u - 사용자 이름: dave
\w - 현재 작업 디렉토리: /Applications/Network
\W - 현재 작업 디렉토리의 기본 이름: Network
\T - 현재 시간 (12-시간 HH:MM:SS 형식): 01:16:49
\t - 현재 시간 (HH:MM:SS 형식): 13:16:49
\@ - 현재 시간 (12-시간 AM/PM 형식): 1:16 PM
\n - 새 줄
\\ - 뒤로 누운 슬래쉬(backslash) 인쇄: \

위에 나열된 정보를 참고해 보면, Panther의 기본 명령 대기 메시지는 다음과 같은 명령을 사용해서 만들어진 것 임을 알 수 있습니다:

PS1="\h:\w \u$ "
PS2="> "

마 무 리

여기서는 tcsh에서 bash로 전환하는데 필요한 과정에 대해서 대략적으로만 설명하였습니다. 여기까지 읽으셨으면 Panther의 기본 환경을 원하시는 것으로 꾸미실 수 있을 만큼 bash에 대해 충분하게 아셨으리라 생각됩니다. 하지만, 여기서는 몇몇 주요 기능들의 표면적인 것들만 다뤘고, 명령의 과거 기록, 작업 관리, 스크립팅 등의 기타 기능들은 언급을 안했습니다. 그래서 기타 필요하신 추가 정보는 아래를 참고하시기 바랍니다:

491

(1개의 댓글, Mac OS 글에 작성됨)

사용자의 짧은 이름(Short Name) 혹은 홈 디렉토리 이름 바꾸는 법

Tiger의 발표와 더불어서 갱신된 내용으로 다시 올립니다.

Mac OS X는 사용자의 짧은 이름을 쉽게 바꿀 수 없게 되어 있으며, 또한 이전 버전에서는 홈(Home) 폴더의 이름도 바꿀 수도 없었습니다. 그리고 비록 v10.3 이후에 와서는 홈 폴더의 이름을 바꿀 수는 있습니다만, 권장사항은 절대 아닙니다. 그래도 만약 이 이름을 정 바꾸고 싶으시다면, 다름에 설명되어 있는 과정을 잘 따라하시기 바랍니다.

사용자의 이름을 바꾸려고 할 때

만약 자기 계정의 짧은 이름을 시스템 환경설정의 계정 항목에서 바꾸려고 하면, 해당 항목은 선택이 안되어서 바꿀 수가 없을 겁니다.

또한 10.2.8 이전의 시스템에서는, Users 폴더 안에 있는 사용자의 짧은 이름에 해당하는 사용자의 홈 디렉토리 이름을 Finder에서 수정할 수 없습니다.

짧은 이름에 관해서

Mac OS X 안 각각의 사용자들은 시스템 환경설정의 계정 항목에서 정의된 대로 "이름(Name)"과 "짧은 이름(ID 이름/Short Name)"을 갖게 됩니다. 여기서, 짧은 이름은 8 글자(v10.1.5 이전) 혹은 255 글자(v10.2 이후)까지 허용되며 공백없이 소문자이어야 합니다. 이것이 바로 사용자의 홈 디렉토리에 위치한 사용자 폴더의 이름으로 쓰입니다.

주의: 시스템 v10.3 이후에서는 이 폴더의 이름을 Finder에서 바로 바꿀 수도 있지만, 이로 인한 결과는 대부분의 사용자들이 바라는 바가 아닌 의외의 결과를 초래할 것입니다. 그러므로, 짧은 이름을 바꾸려면 아래에 설명된 과정을 따라야 합니만, 혹 실수로 이 짧은 이름을 고쳐서 예전 계정의 설정들이 초기화되고 그 밑에 위치하는 폴더들(도큐먼트, 사진 등)이 비워진 상태라면 다음과 같이 원래대로 복구하십시오.

1. Finder에서 /Users 폴더로 이동하십시오.
2. 새로 생성된 사용자의 짧은 이름으로 된 홈 디렉토리를 선택합니다.
3. 새로운 홈 디렉토리의 이름에 "_new"를 추가합니다.
4. 예전의 홈 디렉토리 이름을 원래의 올바른 사용자의 짧은 이름으로 고칩니다.
5. 로그 아웃하고 다시 원래의 사용자 계정으로 로그인합니다.

짧은 이름 바꾸기

비록 전문가라면 짧은 이름과 관련 정보들을 고쳐주는 방법을 고려해 볼 수도 있겠지만, 더 쉽고 안전한 편법은 원하는 이름으로 된 새로운 사용자를 만들고 새로운 사용자의 폴더에 예전의 사용자 홈 디렉토리 내용을 복사하는 방법이 있습니다. 과정은 다음과 같습니다:

1. 우선 만약을 대비해서 시스템 환경설정 안 계정 항목에서 자동 로그인 선택을 해제하고 중요 자료들을 따로 보관합니다. Mac OS X 10.1.5 이전의 시스템에서는 자동 로그인을 로그인 설정 항목에서 찾을 수 있고, Mac OS X 10.2 이후에서는 계정 설정 항목에 있습니다.
2. Mac OS X 10.3 이후 버전을 사용하고 FileVault가 켜져 있다면, 시스템 환경설정의 보안 항목에서 이것을 잠시 꺼줍니다. 이렇게 하면 로그아웃 되는데, 주의할 것은 FileVault를 꺼줄 때 자기 홈 폴더의 공간 만큼의 여유 공간이 디스크에 남아 있어야 합니다.
3. root 사용자를 활성화해서, 다시 root 권한으로 로그인 합니다. root 사용자 활성화 방법은 이 곳의 관련 글 혹은 Apple 관련 문서를 참고하십시오.
4. Mac OS X 10.2 이후: 시스템 환경설정의 계정 항목을 엽니다.
Mac OS X 10.1.5 이전: 시스템 환경설정의 사용자 항목을 엽니다.
5. 이름 항목에서, 바꾸고자 하는 짧은 이름으로 된 사용자를 확인합니다. 이것을 앞으로 "원래 사용자"로 부르겠습니다.
6. 원래 사용자가 관리자(Admin)로 되어 있는지 확인하십시오.
7. 새로운 사용자를 누릅니다. 10.3 이후에서, 이것은 더하기 (+) 단추입니다.
8. 이름과 짧은 이름(ID 이름) 항목을 원하는 것으로 입력합니다. 이곳의 짧은 이름이 사용자 폴더 이름과 같게 됩니다.
9. Mac OS X 10.2 이후: 새로운 암호와 암호 확인 항목을 원하는 것으로 채웁니다.
Mac OS X 10.1.5 이전: 암호 단추를 누르고, 새로운 암호와 암호 확인 항목을 채웁니다.
10. 만약, 대체하려는 사용자가 관리자(Admin)라면, "사용자를 이 컴퓨터의 관리자로 허용"이라고 되어 있는 네모 단추를 선택합니다. 10.3에서는, 이것이 보안 항목에 위치하고 있습니다.

참고: 이 네모 단추는 또 다른 관리자가 없을 경우에는 미리 선택되어져 있고 수정이 불가능할 것입니다. Mac OS X에서는 적어도 한 명 이상의 관리자가 있어야 합니다.

11. 저장 단추를 누릅니다.(10.3에서는 이 과정을 건너 뜁니다.)
12. 시스템 환경설정을 종료합니다.
13. 파인더의 가기 메뉴에서 컴퓨터를 선택합니다.
14. Mac OS X가 설치되어 있는 디스크에 있는 사용자 폴더를 엽니다.
15. 방금 전에 만든 새로운 사용자의 이름으로 된 폴더를 엽니다.
16. 이 폴더 속의 내용들을 휴지통으로 버립니다.

주의: 만약을 대비해서 아직 휴지통을 비우지는 마십시오.

17. Finder에서 새로운 창을 엽니다.
18. 새 창에서 원래 사용자 폴더를 엽니다.
19. 원래 사용자 폴더 속 내용물을 옵션(Option)키를 누른 상태에서 아까 16 단계에서 비워두었던 새로운 사용자의 폴더 속으로 끌어 놓습니다. 이렇게 해서 내용물을 복사합니다.
20. Finder에서 열어두었던 창을 닫습니다.
21. /어플리케이션/유틸리티/ 폴더 속에 있는 터미널(Terminal) 어플리케이션을 엽니다.
22. 터미널에서 다음과 같이 입력합니다:

chown -R <새로운 사용자 이름> /Users/<새로운 사용자 이름>

주의: 여기서 <새로운 사용자 이름> 부분을 방금 전에 새로 만든 사용자의 실제 짧은 이름으로 대치해서 입력하십시오.

23. 리턴키를 누룹니다.
24. 터미널을 종료합니다.
25. 사과 메뉴에서 로그 아웃을 선택합니다.
26. 새로운 사용자로 로그 인 하십시오. 그러면 계정 폴더와 화면 위에 떠 있는 파일들을 제대로 사용하실 수 있을 겁니다.

주의: 만약 원래의 파일들을 사용할 수가 없다면, 로그 아웃 해서 다시 root 권한으로 로그 인 하시고, 21 단계부터 다시 시도해 보십시오. 또한, 16 단계에서 휴지통에 엉뚱한 파일들을 넣어두었는지도 확인하기 바랍니다.

27. 가기 메뉴에서 홈(Home)을 선택하십시오.
28. 라이브러리(Library) 폴더 안에 있는 키체인(Keychains) 폴더를 여십시오.
29. 아직 원래의 사용자 이름으로 되어 있는 기체인을 선택하십시오.
30. 키체인 이름을 새로운 사용자의 짧은 이름으로 바꿉니다.
31. 유틸리티 폴더에 있는 키체인 접근(Keychain Access)을 엽니다.
32. 편집 메뉴에 있는 "<새로운 사용자 이름> 키체인에 대한 암호 변경..."을 선택합니다.
33. 원하시는 암호를 입력하신 후에 확인 단추를 누릅니다. 여기에는 전에 쓰던 암호를 다시 입력하거나 혹은 새로 생성한 사용자의 로그 인 암호를 사용하셔도 됩니다.
34. 키체인 접근을 종료합니다.
35. 루트 계정을 비활성화 합니다. 방법은 유틸리티 폴더에 있는 NetInfo 관리자를 여시고, 자물쇠를 누릅니다. 계정 이름과 암호를 입력한 후에, 보안 메뉴에서 "루트 계정 비활성"을 선택합니다.

참고

이렇게 해서 모든 것이 정상적으로 작동한다면, 예전 사용자 계정을 환경 설정의 계정 항목에서 지워주고, 이렇게 해서 생성된 /Users/Deleted Users/ 폴더에 있는 디스크 이미지를 휴지통으로 옮겨서 비워주시면 됩니다.

그리고, 이미 예전에 설치되어 있던 프로그램들에 따라 예전의 사용자 이름으로 되어 있는 파일이나 폴더들이 있다면, 새로 생성한 사용자의 이름으로 바꾸어 주셔야 합니다.

따옴 - Apple 문서

:idea: 여기에 소개된, 짧은 사용자 계정 이름(Short Username)을 바꾸는 과정을 손쉽게 할 수 있도록 도와주는 Unix shell 스크립트인 ChangeShortNameMac OS Power Tools에서 무료로 배포하고 있습니다.

사용은 디스크 이미지를 위의 웹 페이지에서 내려받으시고, 이미지 내용을 화면에 올린 상태에서 "ChangeShortName Helper" 어플리케이션을 실행시킵니다. 그리고 나서, 새로운 계정 이름에 관한 정보를 입력하시면 (여기서 "Repair" 항목은 선택하지 마십시오) 자동으로 터미널 창이 뜨면서 shell 스크립트가 실행이 되며, 사용자 계정 이름을 자동으로 바꿔주게 됩니다.

터미널 스크립트의 자세한 실행 내용은 같이 첨부되어 있는 설명서를 참고하시길 바랍니다.

492

(2개의 댓글, 어플리케이션 글에 작성됨)

Inside Samba: Windows Sharing for the Mac

by Jason Deraleau

03/18/2003

원문: http://www.macdevcenter.com/pub/a/m...mba.html?page=1

10.1을 시작으로 애플은 Mac OS X 안에 SMB 프로토콜을 지원하기 시작했습니다. SMB는 내부 네트워크 안에서 Windows 피씨들 간의 파일과 프린터 공유에 사용되는 규약입니다. Mac OS X 10.1에서는 제한적인 클라이언트 기능 만을 지니고 있었으나, 10.2에 와서는 OS에 더욱 개선된 클라이언트와 서버 기능들이 추가되었습니다. 서버 기능은 Samba라고 불리우는 Unix 데몬(daemon)에 의해 구현됩니다. Samba는 오픈 소스 프로젝트들 중에서 가장 성공적인 것들 중의 하나로 이미 Linux, 여러 BSD, 그리고 Darwin/Mac OS X 용으로 이식되어 사용되고 있습니다. Andrew Tridgell의 지휘 아래 시작된 Samba 개발팀은 Windows 서버 제품에서 사용되는 기능들을 가능한 한 많이 제공하기 위한 연구를 진행중이며 현재 Samba는 디스크 공유, 프린터 공유, WINS 서버 기능, 그리고 NT4의 기본 도메인 콘트롤러(primary domain controller)의 작업을 수행할 수 있습니다.

기본적 Windows 공유 기능 사용하기

Mac OS X 10.2에서 Windows 파일 공유 기능을 사용하는 것은 무척 쉽습니다. 기본적으로, 여러분의 컴퓨터는 "WORKGROUP" 이름의 SMB 워크그룹 안에 소속되어 있고 SMB hostname은 여러분의 컴퓨터 이름으로 이미 설정되어 있을 겁니다. Windows의 '네트워크 환경'(Network Neighborhood)에 여러분의 컴퓨터가 잘 보이게 하시려면 위의 설정을 올바로 해주어야 합니다.

Workgroup 설정

http://www.macdevcenter.com/mac/2003/03/18/graphics/fig1.jpg

맥이 사용할 워크그룹(workgroup)을 변경하려면 /Applications/Utilities/ 폴더에 있는 디렉토리 접근(Directory Access)을 여십시오. 그리고 왼쪽 밑의 구석에 있는 좌물쇠를 누르시고 암호를 입력한 후에 서비스 항목에 있는 SMB를 선택하고 '설정...' 단추를 누릅니다. 그러면 workgroup을 지정하는 창이 뜨는 데, 여기에 Windows 컴퓨터에서 사용하고 있는 workgroup의 이름을 넣고 '승인' 단추를 누르면 디렉토리 접근에서의 모든 설정은 끝나게 되고 다음 단계로 넘어갑니다.

Hostname 설정

http://www.macdevcenter.com/mac/2003/03/18/graphics/fig2.jpg

SMB hostname을 바꾸려면 시스템 환경설정의 '공유' 항목을 선택하십시오. 여기서 컴퓨터의 이름과 Rendezvous 이름을 설정하실 수 있습니다. 이곳에서 쓰일 이름은 사용하는 네트웍 안에서 중복되지 않는 것이어야 합니다. 또한, hostname은 한 단어로 된 것(단어 사이에 빈 공간이 없는)을 사용하시고 Rendezvous 이름도 같은 이름의 것으로 사용하실 것을 권합니다. '공유' 항목에 있는 몇 가지 사용가능한 서비스들 중에 '윈도우즈 파일 공유 (Windows File Sharing)' 항목 단추를 눌러주면 선택한 workgroup과 hostname을 사용해서 Samba가 시동됩니다.

개별 사용자의 접근 설정

http://www.macdevcenter.com/mac/2003/03/18/graphics/fig3.jpg

이제 Samba가 실행되었으면, Windows에서 Mac으로 개별적인 사용자 계정을 사용하여 접속을 가능하게 할 수 있습니다. 접속 계정을 설정하려면 시스템 환경설정의 '계정' 항목을 열고 접속을 허용할 사용자를 선택하거나 새로 생성하실 수 있습니다. 아래 부분에 '윈도우즈로부터 사용자 로그인 허용(Allow user to log in from Windows)' 이라는 항목이 보이실 겁니다.(Mac OS X 10.3 Panther에서는 이 항목이 제거되었으며 기본적으로 모든 사용자가 인증을 통해 Windows에서 접근할 수 있게 되었습니다.) 이것의 버튼을 누르면 기본적으로 사용자의 홈 디렉토리가 자동적으로 공유되게 설정이 되며 Windows로부터 접근 시 해당 사용자의 홈 디렉토리로 접근할 수 있게 됩니다. Windows 탐색기 안에서 주소란에 \\호스트이름(HOSTNAME)\사용자이름(USERNAME)을 입력하면 "네트워크 환경(Network Neighborhood)"에서 홈 디렉토리를 보실 수 있습니다.

공유 항목 추가 하기

Mac OS X와 함께 설치되는 Samba는 오직 홈(home) 디렉토리 만을 공유하게 설정되어 있습니다. 이것은 smb.conf 설정 파일 안의 특별한 [homes] 공유 기능을 사용하게 됩니다. 만약 여러분의 홈 디렉토리 만을 공유하고 싶을 경우는 괜찮겠지만 공유하고자 하는 파일들이 다른 폴더에 위치하는 경우에는 어떻게 할까요? 가령 Windows에서 Mac의 /Users/Shared 폴더로 접근하게 할 수 있는 방법이 있을까? 하고 궁금해 하실 수도 있을 겁니다. 물론 이것은 smb.conf 파일을 조금만 수정하면 가능하게 됩니다.

Samba의 설정 관련 정보는 /etc 디렉토리 안의 smb.conf라 불리우는 파일 안에 저장되어 있습니다. 이 파일 안에는 Samba가 사용하는 일반 지시자들(directives)이 있는 [global] 항목과, 사용자의 홈 디렉토리를 공유하기 위한 설정 지시자들이 나열되어 있는 [home] 항목이 있습니다. 공유 항목을 추가하는 법의 한 예로, Windows 사용자와 /Users/Shared 폴더를 공유하기 위한 과정을 알려드리겠습니다. 우선 해야할 것은 원본 파일을 백업하는 것입니다. 이것을 위해 Mac OS X의 터미널을 열어서 약간의 기초적인 유닉스 명령어들을 사용하겠습니다.

Samba 설정 파일 백업하기

/Applications/Utilities/ 폴더에 위치한 터미널(Terminal)을 열어서, cd /etc라고 입력해서 /etc 디렉토리로 이동합니다. 그리고 나서, 명령어 ls를 치면 /etc 디렉토리 안에 위치한 모든 파일들과 폴더들이 보이실 겁니다. 이 중에 smb.conf 파일을 sudo cp smb.conf smb.conf.back라고 입력해서 백업을 합니다. 이 곳의 파일들은 root 권한 만 접근이 가능하기 때문에 백업을 위해서는 우선 root 권한을 획득해야 하기 때문에 앞에서 sudo 명렁어를 사용했으며, 시스템은 일시적으로 root 권한을 부여하기 위해 사용자 암호를 물어오게 되고, 암호를 입력하면 백업 파일이 생성됩니다. 이제, 확인을 위해 ls 명령어를 다시 입력해서 smb.conf.back 파일이 보이면 성공적으로 백업 파일이 생성된 것입니다.

새로운 공유 항목 추가하기

이제 smb.conf 파일을 백업하셨다면 pico 편집기를 사용해서 원래의 smb.conf 파일을 열 차례입니다. 변경사항을 저장하려면 root 권한이 필요하기 때문에, 권한 획득을 위해 다시 한 번 sudo 명령어와 함께 sudo pico /etc/smb.conf라고 입력하고 암호를 넣습니다. 이렇게 하면 smb.conf 파일의 내용을 보실 수 있으며 위에서 언급한 [global]과 [homes] 항목을 포함해서 [public]과 [printers] 항목의 예가 보이실 겁니다. 여기서 사용된 pico 편집기는 무척이나 사용이 쉽습니다. 이동을 위해서는 자판의 화살표 키들을 사용하고 파일의 수정은 여타 다른 텍스트 편집기들과 그 사용법이 비슷합니다. 새로운 공유를 설정하기 위한 첫 단계로 우선 제목을 붙여주는 것입니다. 여기서의 제목은 실제 사용되어질 공유의 이름이 됩니다. 아래에 사용될 보기에서는 "shared"라는 이름을 사용하겠습니다. [homes] 항목이 끝나는 부분 바로 밑으로 커서를 이동한 후에 리턴 키를 몇 번 눌러서 약간의 공간을 주고 아래와 같이 입력하십시오.

[shared]
  comment = Shared Directory
  path = /Users/Shared 
  read only = no
  browseable = yes
  create mode = 755

[shared]라고 쓰인 줄은 Samba에게 "shared"라는 이름의 새로운 디스크 공유가 정의되었음을 알려줍니다. comment로 시작되는 줄은 Windows 탐색기에서 "Shared Directory"라는 글자를 표시하게 합니다. 다음 줄은 공유 항목이 위치하는 경로를 설정해주며 보기의 경우에는 /Users/Shared 폴더가 됩니다. 그리고 이곳에서 공유될 파일들은 변경 사항들도 저장할 수 있어야 하기 때문에 read only 값으로 no를 설정해 주었습니다. browseable이란 항목은 공유 항목이 Windows 탐색기에 보여질 지를 결정해 줍니다. 여기에 no의 값이 주어저도 사용자가 폴더가 위치한 절대 경로(이번 보기의 경우는 \\HOSTNAME\SHARED)를 알고 있다면 접근은 가능합니다. 마지막 줄의 create mode는 공유 항목에 생성되는 파일들이 가지게 될 권한을 설정하는 곳 입니다. 여기에는 Unix에서 사용되는 숫자로 표시되는 권한 값을 입력하게 됩니다. 위의 보기의 경우, 소유자(owner)는 읽기/쓰기/실행의 권한이, 그리고 그룹(group)이나 기타 사용자(others)는 읽기/실행의 권한이 주어지게 됩니다.

위의 설정사항들을 수정한 후에, 콘트롤(Ctrl)+O 키를 누르고 나서 엔터키를 처서 파일을 저장하고, 콘트롤(Ctrl)+X 키를 눌러서 pico를 종료합니다. 모든 것이 성공적으로 잘 저장되었는 지를 확인하시려면 cat /etc/smb.conf 명령을 사용해서 파일의 내용을 다시 확인해 보실 수 있습니다. 여기서의 변경 사항을 Samba에 적용시키기 위해, 터미널에서 sudo killall -HUP smbd라고 입력하면 Samba 데몬(daemon)을 다시 시동해서 설정 정보를 다시 가져게 됩니다.

이제, Windows의 "네트워크 환경"에서 "shared"라는 이름의 공유 항목과 사용자 이름으로 된 공유 항목을 보실 수 있습니다. 사용자 이름으로 된 공유 폴더에는 사용자의 홈 디렉토리를 포함하며 앞에서 설명한 Samba 설정 파일 안의 [homes] 항목을 통해 공유된 것입니다.

[homes] 공유

http://www.macdevcenter.com/mac/2003/03/18/graphics/fig4.jpg

[homes] 공유는 특별한 지시자들이 사용됩니다. 이것은 위에서 사용된 [shared] 공유와 비슷한 어느 특정 공유 폴더를 나타내기는 하지만 Samba에게 사용자의 홈 디렉토리를 공유하라는 내부적인 적용의 지시에 더 가깝습니다. 아래는 [homes] 항목의 기본 선언문입니다:

[homes]
   comment = User Home Directories
   browseable = no
   read only = no
   create mode = 0750

보시면 아시겠지만, 위의 선언문은 [shared] 선언문 처럼 공유 이름을 포함하는 괄호로 시작합니다. 여기서 왜 "homes"라는 제목의 공유 항목이 Windows의 "네트워크 환경"에서는 안보이는 지 궁금해 하실 수도 있을 겁니다. 이유는 바로, browseable 값이 no로 설정되어 있기 때문입니다. 나머지 설정은 기본 생성 모드(create mode)가 틀린 것 말고는 이전의 [shared] 항목과 비슷합니다. 이번 경우에는, 모든 새로 생성되는 파일들은 소유자에게는 읽기/쓰기/실행의 권한이, 그리고 그룹에게는 읽기/실행의 권한이 주어지며 나머지 기타 사용자는 파일에 접근할 수 없게 됩니다. 이것은 사용자의 홈 디렉토리에 대해서는 더 엄격한 권한이 주어지는 것이며 반면에, [shared] 공유의 경우에는 공개적인 사용의 성격으로 인해 한편으로는 덜 엄격한 접근 권한을 주게 된 것 입니다.

일반적 Samba 지시자들

지금까지 여러분은 SMB 설정, Windows 공유 기능 켜기, 그리고 추가로 디스크 공유를 생성하는 법을 보셨습니다. Samba 설정을 위해 사용되는 지시자들로는 많은 종류가 있습니다. 어떤 지시자들은 Samba 전체에 영향을 미치는 것들도 있고, 어떤 것 들은 디스크 공유나 프리터 공유에 한정되어 사용되는 것들도 있습니다. 다음에는 추가로 몇 가지 일반적으로 사용되는 지시자들과 그 사용법을 알려드리겠습니다.

Samba의 보안

SMB는 결코 가장 안전한 규약은 아닙니다. 처음에는 내부 네트워크 안에서 사용되도록 설계되었으며 사용자 인증 절차에 의한 보안이 이루어 집니다. 이것은 만약 컴퓨터가 직접적으로 인터넷에 연결되어 있다면 보안상의 취약점을 보일 수도 있으며 악의적인 의도로 컴퓨터의 공유 항목들로의 접근을 가능하게 할 수도 있습니다. 그래서 몇 가지 보안상 취약점을 보완하기 위해, 단지 특정 호스트들만 Samba에 접속할 수 있게 할 수는 있습니다. 이것을 위해서는 "hosts allow" 지시자를 [global] 항목에 추가해 주면 됩니다:

[global]
   hosts allow = localhost 192.168.1.

위의 예에서는 컴퓨터 자신을 포함해서 단지 192.168.1의 IP 주소를 가지고 있는 내부 네트웍에 존재하는 컴퓨터들 만이 접속이 허용됩니다. 여기서 더 나아가 "interfaces"와 "bind interfaces only" 지시자를 사용해서 Samba 데몬을 LAN interface로만 묶어 줄 수도 있습니다:

[global]
   interfaces = 192.168.1.29/255.255.255.0
   bind interfaces only = yes

위에서 사용된 interface 방법은 만약 DHCP 만을 사용하는 경우라면, interface의 IP 주소가 수시로 변할 것이기 때문에 설정파일을 항상 환경에 맞게 변경해 주어야 하므로 관리하기는 어려울 겁니다. 그러므로 hosts allow/hosts deny 방법이 관리는 훨씬 쉽습니다. 그리고 많은 ISP들은 보안상의 이유로 SMB가 사용하는 포트를 막아놓았을 수도 있으며 만약, 인터넷을 통해 SMB를 사용하려고 할 때 제대로 동작을 안 한다면 이것이 이유가 될 수도 있음을 알아두시기 바랍다.

파일 감추기

Windows 컴퓨터에서 Mac에서 공유된 항목에 접근할 때, 마침표로 시작되는 파일들이 보이실 겁니다. Unix에서는 이름을 마침표로 시작해서 파일이나 폴더들을 일반적인 디렉토리 표시 목록에서 감추려고 할 때 사용됩니다. 하나의 좋은 예로, Mac OS X의 숨겨진 .DS_Store파일에는 Finder의 보기 설정 사항들이 저장되어 있습니다. 이런 파일들을 안보이게 하기 위해서는 smb.conf 파일에 "hide dot files" 지시자를 추가해 주시면 됩니다.

[global]
   hide dot files = yes

이렇게 하면 이름이 마침표로 시작되는 모든 파일들이나 폴더들을 감추어 줍니다. 또한 "hide files" 지시자를 패턴(*)과 함께 사용하면 특정 파일들을 감출 수도 있습니다. 예를 들어 .log 확장자를 포함하는 모든 파일들을 숨기기 위해서는 다음과 같이 추가합니다:

[homes]
   hide files = /*.log/

한 가지 주의해야 할 것은, 이런 파일들은 단지 보이지만 않을 뿐, Windows 컴퓨터에서 접근은 가능합니다. 이런 파일들은 FAT 파일 시스템의 "숨겨짐 속성(hidden attribute)"과 같은 특성을 가지고 있게 되어서 Windows 탐색기의 "숨겨진 파일 보기" 혹은 "숨겨진 시스템 파일 보기" 기능이 켜저 있다면 계속 보일 수는 있습니다. 만약 파일의 접근을 완전히 차단하고 싶다면, "veto files" 지시자를 사용하면 됩니다:

[homes]
   veto files = /*passwd*/

이렇게 등록하면 파일 이름에 "passwd"가 포함된 모든 파일들은 전혀 보여지질 않게 됩니다. 물론 "hide files" 지시자를 사용한 경우와는 달리, Windows 사용자는 이런 파일들이 존재하는 지를 확인할 방법이 없게 됩니다.

디렉토리 접근 막기

Samba는 또한 공유 항목 안의 특정 디렉토리 접근을 제한할 수도 있습니다. 예를 들어, [shared] 공유 항목 안에 위치한 mp3 폴더로의 접근 만을 막고 싶을 경우, "dont descend" 지시자를 사용해서 Windows 사용자가 이 폴더로 접근하는 것을 막을 수도 있습니다:

[shared]
   dont descend = mp3

이 폴더는 계속 보이기는 하겠지만, Windows 사용자가 이 폴더를 열려고 하면 접근이 거부될 것 입니다. 하지만 공유 항목 안의 다른 폴더들은 영향을 받지 않습니다.

파일과 디렉토리 접근

앞에서 "create mode" 지시자에 관해서 말씀드렸었습니다. 이 지시자는 파일을 생성할 때 어떤 권한이 사용될 것인가를 결정하는 데 사용됩니다. 또 다른 비슷한 지시자인, "directory mask"도 디렉토리 생성 시 같은 기능을 합니다. 한 가지 분명히 알아두어야 할 것은 어떻게 mask가 생성되는가 입니다. mask는 4 개의 위치로 구분될 수가 있습니다. 하나의 숫자는 각각의 위치에 표시됩니다. 처음 위치는 종종 완전하게 생략될 수도 있습니다. 다음의 세 위치들은 각각 소유자(owner), 그룹(group), 기타(others)를 나타내며, 소유자는 파일을 생성한 사용자에 해당되고, 그룹은 사용자가 속한 기본 그룹, 그리고 기타는 기타 모든 사용자들을 의미합니다.

어떤 숫자를 사용할 것인지는, 여러 환경에서 어떤 접근 권한을 줄 것인지를 생각해서 결정해야 합니다. 세 가지의 접근 권한 형식으로 읽기, 쓰기, 그리고 실행이 있습니다. 대부분의 경우, 소유자에게는 읽기/쓰기 권한이면 충분할 것이고, 그룹과 기타를 위한 권한의 경우에는, 그 밖의 다른 사용자가 파일에 어떤 권한으로 접근해야 할 필요성이 있는지로부터 생각해 보셔야 합니다. 일단 어떤 접근 권한이 필요한지를 결정하게 되면, 다음의 과정을 따라해 보십시오: 0으로부터 시작해서, 읽기 접근 권한은 4를, 쓰기 권한은 2를, 그리고 실행 권한에는 1을 더하십시오. 그래서 만약 소유자는 읽기와 쓰기의 접근 권한을 갖게 하고, 소유자가 속한 그룹은 읽기 권한, 그리고 기타 사용자들의 접근을 막으려면, 640을 사용하시면 됩니다. 또는, 소유자와 그룹은 읽기와 쓰기 권한을, 하지만 기타 사용자들은 단지 읽기 권한 만을 주고 싶으시면 664를 사용하시면 됩니다.

디렉토리의 경우에도 같은 절차가 사용되지만, 디렉토리를 열기 위해서는 언제나 실행의 권한이 필요합니다. 그래서 만약, 소유자 만 읽기와 쓰기의 권한을 가지고 있는 디렉토리를 생성하고 싶다면 0700을 사용하게 됩니다. 만약에 실행의 권한을 승인하게 되면, 또한 사용자는 읽기 권한도 필요하게 될 것 입니다. (당연하겠지만, 읽을 수 없는 것을 실행할 수는 없겠지요.). 파일과 디렉토리의 접근 권한은 최상위의 공유 항목에서만 지정해 줄 수 있으며, 공유 항목 안의 폴더가 다른 접근 권한을 가지게 할 수는 없습니다. 또한, Windows에서 접근 권한을 변경할 수는 없겠지만, Finder에서 "정보 입수"를 사용하거나 터미널에서 chmod 명령어를 사용해서 권한을 변경할 수는 있습니다.

프린터 공유하기

Samba는 또한 Unix 기반의 프린터를 Windows 컴퓨터와 공유하는 기능을 지원합니다. 다행스럽게도, 이제 Mac OS X는 인쇄를 위해 Common Unix Printing System(CUPS)을 사용하며, "프린터 설정 유틸리티(Print Center)"에서 추가한 프린터와 함께 lpr, lpq, 그리고 기타 Unix 인쇄 명령어들을 사용할 수 있습니다. 또한, 웹 브라우저에서 URL 주소 http://localhost:631를 입력해서 CUPS 설정 도구에 접근할 수도 있습니다. 프린터를 공유하는 것은 비교적 쉬우나, 가장 어려운 부분은 적당한 드라이버를 가지고 Windows 컴푸터를 설정하는 일일 겁니다. 기본적으로, Generic/Text 프리터 드라이버는 정상적으로 작동하였지만 Apple Color LaserWriter 드라이버를 사용해서 PostScript 문서를 인쇄할 경우에는 약간의 문제가 있음을 발견했습니다. 이런 문제는 밑에서 설명된 약간의 쉘 스트립트(shell script)와 ESP Ghostscript 패키지를 사용하면서 해결되었지만, 여러분의 경우에는 환경에 따라 상황이 틀려질 수도 있습니다.

[printers] 공유

[printers] 공유는 [homes] 공유와 무척 비슷합니다. 두 공유 모두 Samba에게 다른 항목을 기초로 한 공유를 생성할 것을 지시한다는 점에서 특별한 경우 입니다. [homes] 공유의 경우, 이 다른 항목이란 바로 사용자 이름이 되며 [printers] 공유의 경우에는 바로 프린터가 됩니다. Samba는 프린터들의 목록을 바로 /etc/printcap 파일에서 가져옵니다. 이 파일에는 현재 컴퓨터가 알고 있는 모든 프린터들의 목록을 저장하고 있습니다. 이것은 보통 Mac OS X에서는 모든 내부 네트워크에 연결되어 있거나 혹은 Rendezvous를 통해 발견된 프린터에 해당됩니다. Mac에 직접 연결되어 있지 않은 프린터를 공유할 수도 있겠지만, 가장 좋은 결과를 얻기 위해서는 컴퓨터에 바로 연결되어 있는 프린터를 공유하도록 하실 것을 권합니다.

Samba 지시자들 중에서 디스크 공유와 프린터 공유의 구별을 도와주는 것이 바로 "printable" 지시자 입니다. 만약에 printable 속성이 true(혹은 yes)로 설정되어 있다면, Samba는 이것을 프린터 공유로 취급하게 됩니다. 프린터 공유에서, "path" 지시자는 임시 프린터 파일이 저장될 위치를 결정하는 데 사용되고 기본 위치는 /tmp로 설정되어 있으며 Mac OS X에서는 다시 수정할 필요는 없답니다. Samba는 인쇄할 때 다른 컴퓨터로부터 문서 자료를 받을 경우, path 지시자에 의해 지정된 폴더로 파일을 임시 저장하게 됩니다. 다음에, "print command" 지시자에 설정된 명령을 사용해서 파일을 인쇄 대기 목록에 추가하게 됩니다. 밑에 인용된 보기에서는 모든 인쇄 파일의 임시 저장소로 /temp 디렉토리를 사용하며 /etc/printcap 파일에 있는 모든 프린터들을 위한 각각의 공유 항목을 생성해 줍니다:

[printers]
   comment = All Printers
   path = /tmp
   browseable = no
   printable = yes
   guest ok = yes

위에 보이는 프린터 공유 설정은 디스크 공유의 것과 많이 비슷한데, printable 지사자는 앞에서도 설명되었 듯이, Samba에게 공유를 어떻게 취급할 것인 지를 결정해 줍니다. 그리고 browseable 속성은 no로 설정되어 있으며, 이것은 [homes] 공유에서처럼 허상의 공유(ghost share)가 보이는 것을 방지하기 위한 설정입니다. 인쇄 작업을 처리하는 데 사용되는 명령을 무엇으로 할 지의 지정은 "print command" 지시자에서 이루어집니다.

print command 지시자는 어떤 프로그램을 사용해서 인쇄 시스템으로 인쇄 작업을 보낼 지를 결정해 줍니다. Mac OS X에서는 /user/bin 디렉토리에 있는 lpr 명령을 사용하게 되는데, lpr을 사용하기 위해서는 어떤 프린터가 작업을 처리할 지, 그리고 어떤 파일이 인쇄될 지를 지정해 주어야 합니다. 올바른 프린터와 파일 이름을 lpr에 전달하기 위해서 Samba는 %p와 %s의 두 가지 변수들을 사용며 각각의 변수는 프린터와 파일을 나타냅니다. 실제 Samba에서는 /usr/bin/lpr -P%p -r %s와 같은 print command 지시자가 사용되며 Samba는 변수를 실제 프린터와 파일 이름으로 대치시켜서 명령을 실행하게 되고, 다음에 lpr는 작업을 받아서 인쇄 시스템에 전달하게 됩니다. 아래는 print command 지시자의 한 사용 예입니다:

[global]
   print command = /usr/bin/lpr -P%p -r %s

Windows에서의 프린터 설정

http://www.macdevcenter.com/mac/2003/03/18/graphics/fig5.jpg

이제 여러분은 프린터를 공유할 수 있게 Samba 설정을 마첬으며 Windows 탐색기에서 다른 공유 항목들과 함께 보실 수 있습니다. Windows 컴퓨터에 프린터를 설치하려면, 탐색기에서 프린터를 더블 클릭하고, 그러면 서버에 프린터를 열 수 있는 드라이버가 없다는 경고 창이 뜨게 됩니다. 일단 창을 닫게 되면, 시스템에서 사용 가능한 프린터 드라이버들의 목록들을 보여줍니다.

기본적인 글자 인쇄기능을 원하신다면, Generic manufacturer(일반 제조업체)의 Generic/Text Only 드라이버를 선택하십시오. 이 드라이버는 거이 대부분의 프린터들이 일반 글자들을 쉽게 처리하기 때문에 실험 목적으로도 아주 적합합니다. 만약 Postscript 인쇄를 원하시면, Apple의 Apple Color LaserWriter 드라이버를 선택하시면 됩니다. 이 드라이버는 가장 문안하면서 기초적인 Postscript 기능을 가지고 있습니다. 이제 드라이버를 선택한 후, '승인' 단추를 누르면 Windows 컴퓨터에서 Macintosh에 연결된 공유 프린터를 사용해서 인쇄를 하실 수 있게 됩니다.

한 가지 말씀드릴 것은, 가끔은 Windows에서 Postscript 형식의 파일을 보낼 때 어떤 이유에서인지 프린터를 통해 인쇄를 못 할 경우도 있습니다. 이것은 운영 시스템들이 인쇄 작업을 서로 다르게 처리하는 데서 생기는 문제라고 생각되는데, 이 문제는 GIMP Print 패키지를 설치하고 짧은 쉘 스크립트(shell script)를 써서 해결할 수가 있었습니다. 우선, Samba가 이 쉘 스크립트를 print command로 사용할 수 있게 설정을 해줘야 합니다. 아래는 스크립트 내용:

#!/bin/sh
#
# /usr/local/bin/printsmb
#
# Print script for Postscript files.
#

/usr/local/bin/ps2pdf13 /tmp/$2
rm /tmp/$2
/usr/bin/lpr -P$1 -r /tmp/$2.pdf

이 스크립트는 GIMP Print 패키지의 ps2pdf 도구를 사용해서 Windows 컴퓨터의 Postscript 파일을 PDF 파일로 변환해 줍니다. 그리고 나서 임시 저장되었던 Postscript 파일을 삭제한 후에 lpr을 사용해서 PDF 파일의 결과물을 프린터로 보내주게 됩니다. 스크립트를 /usr/local/bin 폴더에 위치시킨 후에 터미널에서 chmod 명령어를 사용해서 0755 권한을 주십시오. 그리고 이 스크립트를 Samba와 함께 사용하려면, 다음과 같이 [printers] 부분을 변경해 줍니다:

[printers]
   print command = /usr/local/bin/printsmb %p %s

이제 Samba는 스크립트를 불러서 필요한 프린터와 임시 저장 파일의 경로를 변수 값으로 사용할 수 있게 설정되었으며, 스크립트는 파일을 변환해서 인쇄를 합니다. Postscript 인쇄는 바로 여러분의 Mac에서 인쇄하는 것과 같은 기능을 제공하게 될 겁니다. 더욱이 이들의 인쇄 작업들은 '프린터 설정 유틸리티(Print Center)' 혹은 'CUPS' 조절판에서 쉽게 관리할 수도 있답니다.

The Samba Web Administration Tool

이제 여러분은 디스크와 프린터 공유 시 사용되는 일반적인 설정 사항들과 친숙해 지셨을 겁니다. 이번에는 Samba 설정 파일을 가지고 더욱 쉽고 빠르게 작업할 수 있는 방법을 소개해 드리겠습니다. Samba 배포 파일에는 Samba 설정을 쉽게 관리할 수 있게 해 주는 웹 기반의 도구를 포함하고 있습니다. Mac OS X 또한 이런 도구를 포함하고 있으나, 사용하기 위해서는 먼저 그 기능을 켜주어야 합니다.

SWAT 기능 추가하기

Samba 웹 관리 도구(Samba Web Administration Tool)를 사용하기 위해서는, Mac OS X에 포함된 인터넷 수퍼데몬(Internet superdaemon) 중 하나를 설정해 주어야 합니다. Mac OS X에는 inetd와 xinetd를 포함하고 있으나 오직 xinetd만 사용되는 경향이 있습니다. 참고로, 이것은 FTP 공유 기능에 사용되는 수퍼데몬 입니다.

SWAT을 시동하기 위한 xinetd의 설정은 몇 가지 간단한 단계가 필요합니다. 우선 /etc/services 파일이 SWAT 접근 포트를 포함하고 있는 지를 알아봐야 합니다. 확인을 위해서 다음과 같은 명령을 터미널에 입력합니다: cat /etc/services | grep swat. 이 명령은 901/tcp 포트를 사용하는 swat 서비스가 실행 중 임을 보여줄 것 입니다. 만약 이런 결과를 얻을 수 없다면, 루트 권한을 가지고 pico를 사용해서 /etc/services에 추가 등록을 해 주어야 합니다. 위의 정보(swat 901/tcp #swat)를 항목에 추가 등록하고 변경사항을 저장하십시오.

이제 여러분의 컴퓨터는 데몬의 TCP 정보를 얻을 수 있게 설정되었고, /etc/xinetd.d 폴더에 있는 swat이라는 이름의 파일을 열어서 다음과 같이 수정하십시오:

service swat
{
    port        = 901
    socket_type    = stream
    wait        = no
    only_from    = localhost
    user        = root
    server        = /usr/sbin/swat
    log_on_failure    += USERID
    groups        = yes
    disable        = no
}

xinetd 설정과 관련한 정보는 xinetd.conf를 위한 설명문(터미널에서 man xinetd.conf라고 입력)을 참고하시기 바랍니다. 상황에 따라 변경되어야 할 설정으로는 "only_from" 등록 사항일 겁니다. 위의 예에서는, 단지 서버가 실행되는 컴퓨터 만이 접근이 허용됩니다. 이곳에 IP 주소 혹은 네트워크 주소를 입력해서 접근의 범위를 더 넓힐 수도 있습니다. 일단 등록 사항을 저장하셨으면, 컴퓨터를 재시동 하십시오. (터미널을 실행시키고 sudo killall -HUP xinetd라고 입력하셔도 됩니다.)

SWAT 사용하기

http://www.macdevcenter.com/mac/2003/03/18/graphics/fig6.jpg

일단, swat을 사용하기 위한 xinetd 설정을 마치셨으면, 웹 브라우져를 열고 주소 http://127.0.0.1:901/ 을 입력하십시오. 사용자 이름과 암호를 물어오게 되면, root 사용자의 이름과 암호를 입력하시면 됩니다. (참고로, Mac OS X에서는 기본적으로 root 사용자가 비활성화 되어 있습니다. 터미널에서 sudo passwd root라고 입력하면 다시 활성화 됩니다.) 그러면 위의 그림처럼 SWAT 초기 화면을 보실 수 있습니다. 여기에는 몇 가지 종류의 사용 가능한 도구 항목들이 있습니다. Home 항목에는 Samba 관련 문서들을 볼 수가 있으며, Globals 항목에서는 smb.conf 파일의 [global] 항목에 해당하는 여러 지시자들을 보실 수 있습니다. 더욱이, SWAT에서는 smb.conf 파일의 여러 항목들을 쉽게 직접 수정, 저장하실 수 있습니다.

대부분의 항목들은 이름으로 그 기능을 짐작하실 수 있겠습니다만, 맨 윗 부분에 변경사항들을 저장하기 위한 Commit Changes 버튼이 보이고 몇 몇 항목에서는 Advanced 버튼을 눌러서 고급 Samba 지시자들을 추가로 보실 수 있습니다. Satatus 항목에는 smdb 그리고 nmbd 데몬을 시작, 재시동, 그리고 멈추게 하는 버튼들이 있습니다. 한 가지 알아두셔야 할 것은 SWAT을 사용해서 smb.conf 파일을 수정하셨거나, 혹은 직접 편집을 하셨을 경우에는 데몬을 다시 시동한 후에야 효과가 제대로 적용된다는 것 입니다. 데몬의 조정 버튼들 아래에는, 현재 접속 실행중인 네트워크 목록과 각각의 접속을 차단하는 버튼들이 있습니다.

마지막 두 개의 SWAT 항목들은 Mac OS X에서는 많이 사용되지는 않는 것들입니다. View 항목에서는 smb.conf 파일의 내용을 보실 수 있으며 SWAT에 의한 변경 사항들을 직접 확인하실 수도 있습니다. Password 항목은 가장 최근의 Windows 버전에서 요구하는 암호화된 사용자 이름과 암호를 생성할 수 있게 합니다. 이것은 시스템 환경설정에서 Windows 공유기능을 사용하면 필요한 정보를 자동으로 생성하기 때문에 여기서 사용할 필요는 없습니다.

보시다시피, SWAT은 Samba 데몬을 관리하거나 Samba 설정 작업에 아주 유용합니다. 또한 xinetd 설정 파일을 수정하면 웹 브라우저를 통해 원격에서 SWAT에 접근할 수도 있습니다. SWAT의 여러 항목들은 smb.conf 파일을 더욱 쉽게 관리할 수 있게 해주며, 여기서 더 많은 관련 용법들을 함께 배울 수도 있습니다. 일단 smb.conf 항목들과 친숙해지면, 직접 손으로 필요한 설정들을 수정할 수도 있겠지만, 급한대로 SWAT 또한 언제든 용이하게 접근할 수 있는 편한 방법이 될 수도 있답니다.

맺음말

이제, 여러분은 Samba의 설정과 많이 친숙해 지셨을 것이고, Apple에서 제공하는 GUI 도구들 보다도 더욱 향상된 공유 기능들을 사용하실 수 있을 겁니다. SWAT 인터페이스를 사용하면 환경에 적합한 설정 사항들을 오류 없이 관리하는데 도움이 될 것이며, 수정 결과를 바로 확인하기 위해서 쉽게 Samba를 다시 시동시킬 수도 있습니다. 결론적으로, Apple은 Windows 공유에 있어서는 가장 훌륭한 Unix 도구를 Mac OS X에 포함시켰으며 또한, 여러가지 환경에 적합한 설정을 구현하는 데 필요한 모든 도구들을 제공하고 있습니다. Samba는 Mac이 Windows 네트워크 환경에 접근할 시에는 중계자로서 아주 귀중한 도움이 될 수 있을 것이며, 옆의 Windows 사용자는 아무런 차이점을 눈치챌 수도 없을 겁니다.

-- 원문의 글이 씌여진 지 조금 오래 되었고 또한 설명도 10.2 Jaguar 기준이지만 적용은 10.3 Panther 에서도 거이 비슷하게 하실 수가 있습니다. 그리고 참고로, 이 글에서 소개된 Samba의 여러 공유 관련 설정은 무료로 배포되고 있는 SharePoints로도 많은 부분 쉽게 설정/관리하실 수 있을 겁니다.

493

(0개의 댓글, 어플리케이션 글에 작성됨)

Panther에서의 일정 관리

James Duncan Davidson씨가 쓴 글을 옮김.

컴퓨터에 관해서 얘기를 할 때면 자동화를 빼놓을 수는 없을 것이고, 여기에 Mac OS X는 정해진 날짜와 시간에 일정한 작업을 반복해서 실행할 수 있도록 도와주는 몇 가지 쓸모있는 도구들을 제공하고 있습니다. 그렇다면, 어떤 정해진 시간에 파일을 다른 곳으로 복사를 해야 하거나, 혹은 꼭 정각 새벽 5 시 반에 웹 페이지를 내려받아야 한다고 해서 컴퓨터가 대신 처리해 줄 수도 있는 일을 마다하고 잠자리에서 박차고 일어나야 될 이유는 없을 겁니다.

여러가지 많은 작업들을 처리하기 위해서, 시스템은 cron과 periodic이라 불리우는 도구를 사용합니다. 사용되어지는 작업들에는 로그 파일들을 정리하거나 locate 명령에 사용되는 시스템 데이타베이스를 갱신하는 것 등이 있습니다. 먼저, 이런 도구들을 어떻게 사용하는 지를 보여드리기 전에, 매번 정확한 시간에 모든 작업들이 절로 실행될 수 있도록 컴퓨터의 시계를 올바로 맞추는 방법부터 설명해 드리겠습니다.

시간 맞추기

컴퓨터의 시계가 정확하게 맞추어져 있지 않다면 작업 일정을 제대로 짜기란 무척이라 어려울 것입니다. 컴퓨터의 시간과 날짜는 시스템 환경설정의 '날짜 & 시간' 항목에서 맞추실 수 있습니다. 그리고, 오랜 시간 동안 인터넷에 연결되어 있는 상태라면 (물론 요새는 누구나 그렇겠습니다만), 모든 것을 생략하고 그냥 네트웍 시간 서버의 시계와 시간이 저절로 같아지도록 설정하실 수 있습니다. 간단하게 아래 그림처럼 '날짜 & 시간'에 있는 "자동으로 날짜와 시간 설정" 항목의 선택 상자를 누르시고 가까운 곳의 적당한 시간 서버를 선택하시면 됩니다.

네트웍 시간 서버란 그냥 정확한 시계를 가지고 있으면서, 많은 수의 컴퓨터들이 정확한 시간에 맞게 동기될 수 있도록 도와주기 위해 설계된 네트웍 시간 규약(NTP)을 사용하는 장치입니다. 일반적으로 가장 정확한 시간을 표시해주는 원자 시계를 가지고 있습니다.

기본적으로, 환경설정의 '날짜 & 시간'에서는 Apple에서 제공하는 세 개의 서버들 중 하나를 선택하실 수 있습니다. 하나는 미국에 있으며, 나머지는 아시아 그리고 유럽에 있습니다. 또한 인터넷을 통해 공개되어 있는 시간 서버들도 있으며, 사용 가능한 네트웍 시간 서버들의 목록은 아래의 주소에서 확인하실 수 있습니다.
http://www.eecis.udel.edu/~mills/ntp/servers.html

http://www.macdevcenter.com/mac/2004/03/05/graphics/DateAndTimePanel.jpg
그림 1. 시스템 환경설정의 날짜 & 시간

시간 서버를 설정하게 되면, 시스템은 다음과 같은 작업들을 합니다:

[uli]/etc/ntp.conf에 저장되어 있는 시간 서버 설정.[/uli]
[uli]ntpd 작업이 실행되고 있는 지 확인. 이 작업은 주기적으로 시간 서버를 검사해서 시계가 올바로 맞추어져 있는 지를 확인하게 됩니다.[/uli]
[uli]/etc/hostconfig에 있는 TIMESYNC의 값을 -YES-로 설정해서 시스템 재시동 후에도, ntpd가 시작되도록 합니다.[/uli]

iCal을 이용한 일정 관리

iCal은 이미 아신 것처럼 Mac OS X안에 함께 들어있는 개인용 일정 관리 어플리케이션입니다. iCal은 다른 컴퓨터들과 함께 연결해서 같이 사용하거나 .Mac과 동기될 수 있는 다중의 달력들을 가지고 있습니다. iCal에서 일정 관리를 하려면 우선, 특정 시간과 기간이 정해진 행사(event)를 달력에 등록하게 됩니다. 행사는 일시적일 수도, 혹은 반복되는 것일 수도 있습니다.

각각의 행사는 미리 알림 기능을 설정해서 사용할 수도 있고, 파일을 열거나, 혹은 어떤 행사의 정해진 시간 이전에 어플리케이션을 실행시켜 놓을 수도 있습니다. 더불어서, 미리 알림 기능은 iCal이 실행되고 있지 않아도 작동이 됩니다. iCal은 iCal Helper 어플리케이션(/어플리케이션/iCal.app/Contents/Resources 폴더에 저장되어 있음)을 사용해서 iCal이 실행되고 있는 지에 상관 없이 행사를 주시하고 있다가 정해진 시간에 미리 알림 기능을 수행합니다.

iCal의 미리 알림 기능과 함께 AppleScript를 사용하면 원하시는 거이 모든 작업들을 처리할 수도 있습니다. 이것은 먼저 다음 세 가지의 간단한 준비가 필요합니다:

1. 원하는 기능을 가진 AppleScript 어플리케이션을 만들고 저장합니다.

요령: 스크립트를 저장하기에 가장 알맞은 장소는 /Library/Scripts 폴더 안 입니다. 여기에 저장된 모든 것들은 '스크립트' 메뉴에 포함이 되고, 이 '스크립트' 메뉴를 보이게 하려면 /Applications/AppleScript 폴더 안에 있는 'Install Script Menu'를 두 번 눌러주시면 됩니다. '스크립트' 메뉴에는 AppleScripts, shell scripts, 그리고 어플리케이션의 가상본들도 넣어두실 수 있습니다. (이것은 예전, Mac OS 9의 Apple 메뉴와 많이 닮았습니다.)

2. iCal에서 한 번 혹은 여러번 반복이 되는 행사를 만듭니다.

3. 행사의 미리 알림 기능에서 저장했던 AppleScript 어플리케이션을 열도록 설정합니다.

한 가지 예를 들면, 여러분의 홈 디렉토리에 있는 모든 파일들의 목록을 매주 이메일을 통해서 받아보시고 싶다면, Script Editor(/Applications/AppleScript)를 사용해서 아래의 보기-1에서 보여지는 것과 같이 홈 디렉토리를 검사해서 결과를 이메일로 보내게 하는 AppleScript를 만드실 수도 있습니다.

보기-1. 홈 디렉토리를 검사해서 결과를 이메일로 보내게 하는 AppleScript

set listing to (do shell script "/bin/ls -l $HOME")
tell application "Mail"
    set the newMessage to (make new outgoing message with properties ¬
        {subject:"Home dir ls output", content:listing})
    tell newMessage
        make new to recipient with properties {address:"you@somewhere.com"}
    end tell
    send newMessage
end tell

위의 스크립트를 ListHomeDir라는 이름의 AppleScript로 저장하고, 관련 행사 일정에 맞추어 실행되게 하면 됩니다. 행사의 예정된 시간에 어플리케이션이 실행되게 하기 위해서는, 아래의 그림-2에서 보이는 것처럼 "미리 알림(alarm)"을 "파일 열기(Open file)"로 설정하고 해당 어플리케이션을 실행될 파일로 선택하시면 됩니다. 이렇게 설정해 놓으면, 행사가 예정된 시간에 사용자가 컴퓨터에 로그 인 되어 있는 상태라면 AppleScript 어플리케이션이 절로 실행되게 됩니다. 이런 방법의 일정 관리는 대부분의 경우에 효과적이지만, 만약 작업을 매 시간 실행해야 하거나, 혹은 컴퓨터에 로그인 되어 있지 않을 경우를 생각한다면, Unix의 일정 관리 도구들을 사용하는 것을 생각해 보셔야 될 겁니다.

http://www.macdevcenter.com/mac/2004/03/05/graphics/ch0802.jpg
그림-2. iCal에서의 반복되는 행사 설정하기

periodic 쓰기

periodic 도구는 정기적으로 매번 실행되어야 하는 시스템 관리 작업들을 계획하고 준비하기 위해서 설계되었습니다. periodic이 쓰는 시간 간격으로는 daily, weekly 그리고 monthly가 있습니다. Mac OS X 안에서 periodic 시스템을 써서 수행하는 작업들에는 다음과 같은 것들이 있습니다:

[uli]매일 로그 파일들을 정리하고 임시 스크래치(scratch) 파일을 지움[/uli]
[uli]매주 locate 데이타베이스를 다시 갱신하고 로그 파일을 순환[/uli]
[uli]매월 로그 파일을 순환하고 계정의 로그인 관련 정보를 계산[/uli]
periodic에서 관리하는 작업들은 /etc/periodic/daily, /etc/periodic/weekly, 그리고 /etc/periodic/monthly 디렉토리에 있는 스크립트들에 의해 수행됩니다. periodic을 사용하는 자기만의 스크립트를 실행시키려면, 간단하게 앞에서 얘기된 적당한 디렉토리에 추가만 해주시면 됩니다. 예를 들어, 판매 보고서 자료를 매일 일별로 따로 저장하는 경우는, 보기-2와 같은 스크립트를 /etc/periodic/daily 디렉토리에 추가해 주시면 됩니다.

보기-2. periodic 스크립트의 예

#!/bin/bash

echo Making daily backup of sales reports

DATE=`/bin/date +%Y-%m-%d`
/bin/mkdir -p /SalesBackups/$DATE
/bin/cp -R /Users/Shared/SalesData/* /SalesBackups/$DATE

periodic은 또 스크립트의 실행 순서를 조정할 수 있는 방법도 가지고 있습니다. /etc/periodic/daily 디렉토리를 열어보시면 시스템이 사용하고 있는 스크립트들의 이름이 숫자로 시작되는 것을 확인하실 수 있을 겁니다. 그래서, 스크립트가 특정 순서로 실행되길 원하신다면, 이름 앞에 숫자만 추가해 주시기만 하면, periodic은 아래의 보기-3과 같이 스크립트의 실행 순서를 알아서 처리해 줍니다.

보기-3. /etc/periodic/daily 디렉토리의 목록

$ ls -l /etc/periodic/daily/
total 24
-r-xr-xr-x  1 root  wheel  1389 30 Aug 20:36 100.clean-logs
-r-xr-xr-x  1 root  wheel  3529 30 Aug 20:36 500.daily

여기서, 파일 이름 앞의 숫자는 스크립트의 실행 순서를 정해줍니다. 그래서, 숫자가 작을 수록 같은 디렉토리 안의 다른 스크립트들 보다 먼저 실행됩니다. 예를 들아, 앞의 보기-2에서 저장한 보고서 저장 스크립트를 다른 daily 스크립트들 보다 가장 나중에 실행되게 하려면, /etc/periodic/daily/700.salesbackup 처럼 저장을 하시면 됩니다.

periodic의 실행 결과 보기

periodic은 실제 보이지 않게 뒤에서 실행되기 때문에, 스크립트의 실행 결과도 감추어져 있습니다. 그래서, 어떤 작업이 수행되었는지를 확인하시려면, periodic의 실행 결과가 저장되어 있는 /var/log 디렉토리를 열어 보시면 됩니다. Daily 스크립트의 경우는 /var/log/daily.out, weekly는 /var/log/weekly.out, 그리고 monthly는 /var/log/monthly.out 파일에 저장됩니다.

cron

Unix에서는 오래전부터 일정을 관리하는 기본 도구로 cron을 사용해 왔습니다. cron은 시동할 때, SystemStarter에 의해 절로 실행이 되며 계속 뒤에서 작동을 합니다. 그리고, 매분 깨어나서 실행되어야 할 작업이 있는 지를 작업 일람표를 통해 확인을 하고 해당 작업을 처리하게 됩니다. crontab 파일로 알려진 이 일람표는 다음의 두 곳에 위치합니다:

/etc/crontab
- 시스템 전체를 위한 crontab 파일. 이 일람표 안 각각의 목록들은 root 사용자에 의해 실행되는 명령들과 실행될 시간을 가지고 있습니다. 누구든지 이 파일을 읽을 수는 있지만 오직, root 사용자만이 수정할 수 있습니다.
/var/cron/tabs/
- 이 디렉토리에는 cron을 사용하는 시스템의 모든 사용자들을 위한 사용자 crontab 파일들이 들어 있습니다. 이 파일들은 감추어져 있고, 오직 root 사용자에게만 보입니다. 그래서 다른 사용자의 crontab 파일은 서로 볼 수가 없습니다.

시스템 crontab 파일

아래의 보기-4는 처음 설치 후의 시스템 crontab을 보여줍니다. 이 파일은 시스템 관련 작업들만을 위한 것이기 때문에, 여러분은 언제나 사용자를 위한 crontab 파일을 사용하셔야 합니다.

보기-4. 시스템 crontab 파일

# /etc/crontab
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#
#minute hour    mday    month   wday    who     command
#
#*/5    *       *       *       *       root    /usr/libexec/atrun
#
# Run daily/weekly/monthly jobs.
15      3       *       *       *       root    periodic daily
30      4       *       *       6       root    periodic weekly
30      5       1       *       *       root    periodic monthly

이 crontab 파일은 다른 많은 Unix 도구들과 그 형식이 비슷합니다. 해쉬 글자(#)로 시작되는 줄은 모두 설명문이 됩니다. 그리고 설명문 다음에 있는 세 개의 줄은 cron이 실행되는 환경을 설정해 줍니다. 각각의 줄은 특정 작업이 실행하게 될 시간을 정의해 주는 다섯 개의 번호로 구성되어 있으며, 줄의 마지막 부분에는 실행되는 명령이 포함되어 있습니다. 시스템 crontab의 경우에는, 명령을 실행시킬 수 있는 권한을 가진 사용자의 이름도 함께 포함되어 있습니다. 그리고 위에서 보실 수 있는 것과 같이 다섯 개의 숫자들은 작은 것부터 큰 순서로 서로 다른 시간의 간격을 나타냅니다. 아래의 그림-3에서는 각 항목들에 대한 설정 사항들을 설명해 주고 있으며, 여기에 사용된 숫자들 외에 별표 모양의 글자(*)는 해당 항목이 가질 수 있는 모든 가능성을 포함하고 있음을 의미합니다.

위의 보기-4에 나와있는 crontab 파일을 풀이할 때는 각 줄의 항목들을 왼쪽부터 오른쪽으로 읽으시면 됩니다. 예를 들어, 설명문 다음의 periodic daily라고 표시되어 있는 첫 번째 항목은 15 분, 3 시, 매주, 매달 그리고 요일에 상관없이 실행됨을 나타냅니다. 이 것은 periodic daily가 매일 오전 3:15에 실행된다는 뜻입니다. 그리고, 두 번째 줄은 periodic weekly 명령이 30 분, 4 시 매주 일요일에 실행된다는 것을 나타냅니다. 간단하게, 매주 일요일 오전 4:30에 실행이 됩니다.

또한 각 항목에는, 시간을 나타내는 숫자들을 쉼표 사이에 여러개 늘어놓아서 시간을 정해주실 수도 있습니다. 가령, 명령이 매 15 분마다 실행되기를 원하신다면, 다음과 같은 줄을 쓰시면 됩니다:

0, 15, 30, 45, 60 * * * * command

http://www.macdevcenter.com/mac/2004/03/05/graphics/ch0803.jpg
그림-3. crontab 파일의 형식

혹은, 명령이 오직 주중 오전 5:00에만 실행되게 할 경우는 다음과 같이 합니다:

0 5 * * 1-5 command

사용자 crontab

사용자가 직접 자신만의 작업들을 예약하기 위해서는 개별 사용자의 crontab을 사용해야 합니다. 사용자의 crontab 파일에 어떤 작업들이 등록되어 있는 지를 보려면 아래와 같이 crontab 명령을 써서 보실 수 있습니다:

$ crontab -l
crontab: no crontab for duncan

위에서 보여지는 결과는 어떠한 작업 일정도 아직 등록되어 있지 않음을 나타냅니다. 기본적으로, 처음 사용자의 계정을 만들었을 때에는 사용자의 crontab은 비어 있습니다.

사용자 crontab 고치기

crontab을 고치는 방법에는 두 가지가 있습니다. 첫 번째 방법은 터미널 환경에 설정되어 있는 편집기(에를 들어, vi, Emacs, 그리고 pico)를 사용하는 것이고, 두 번째 방법으로는, 사용자의 crontab 파일을 원하시는 글자 편집기(TextEdit 혹은 BBEdit 같은)를 가지고 고치는 것입니다. 터미널에서 고치실 경우에는, 다음과 같은 명령을 쓰십시오:

$ crontab -e

우선, 본보기로 첫 crontab을 등록하기 위해, 매분 컴퓨터가 "hello"라고 말하도록 하는 작업을 등록하려면, 다음과 같은 줄을 여러분의 crontab 파일에 더해줍니다:

* * * * * osascript -e 'say "hello"'

참고: 만약 사용하고 계신 편집기가 익숙치를 않아서 막히는 것이 있다면, vi의 경우 :q!라고 입력하시면 빠저나오실 수 있고, Emacs의 경우에는 Cotrol-X를 치고나서 Control-C를 누르시면 됩니다.

이제, 매분마다 여러분의 컴퓨터가 켜저 있다면 "hello"라고 말을 하게 될 겁니다. 실제로는 계속 써보면 무척이나 번거고 별 쓸모는 없는 것입니다만, 이번 작업의 과정에는 몇 가지 알아두셔야 할 것들이 있습니다.
- osascript -e 'say "hello"' 명령은 실행 주기를 나타내는 앞의 다섯 개 별표에 의해서 매분마다 시스템에 의해서 실행이 됩니다.
- 이 명령은 시스템 환경설정의 "말하기" 항목에 설정되어 있는 기본 음성을 사용하고, 정해진 시간에 "hello"라는 단어를 말하게 됩니다.

이제, 여러분은 crontab 파일의 설치를 마치셨기 때문에, crontab 파일에 등록되어 있는 작업의 목록을 보실 수 있습니다:

$ crontab -l
* * * * * osascript -e 'say "hello"'

crontab 파일을 만드는 또 다른 방법은, TextEdit나 BBEdit롸 같은 글자 편집기를 사용하는 것입니다. 편집기로 crontab 파일을 생성하고 편집한 후에, 하드 디스크에 (예를 들어, mycrontabfile이라는 임의의 이름으로) 저장하고 다음과 같은 명령어를 사용하면 사용자 crontab 파일의 원래 장소에 올바로 저장이 됩니다:

$ crontab mycrontabfile

주의: 위에서 mycrontabfile 부분에는 파일이 저장되어 있는 절대 경로를 입력하셔야 합니다. 그리고, 여기서 사용된 crontab 명령은 이미 저장되어 있는 사용자의 crontab 파일을 지우게 되는 결과를 가져오기 때문에, 새로운 crontab 파일을 불러들이기 전에, 꼭 이전의 crontab 파일을 확인하시는 것도 중요합니다.

다시 crontab파일을 고치기 위해서 다시 불러들이려면, 다음과 같은 명령을 쓰시면 됩니다:

$ crontab -l > mycrontabfile

이렇게 하면, 사용자 crontab 파일의 설정 내용이 담긴 mycrontabfile이라는 이름의 파일이 사용자의 홈 디렉토리에 생기게 됩니다.

덤으로 있는 설정 항목들

Mac OS X에서 사용하는 cron 명령은 기타 Unix 계열의 시스템에서 사용되는 것들과 비교해서 개선된 것들이 있습니다. 예를 들어, 시간 지정 항목에 아래와 같이 더 읽기 편한 형식을 가질 수도 있습니다:

[uli]주 중의 요일은 줄인 이름이 대신 사용될 수 있습니다: sun, mon, tue, wed, thu, fri, sat.[/uli]
[uli]월 이름을 줄인 이름으로 대신 사용할 수 있습니다: jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec.[/uli]
[uli]간격 수치는 8-17/2와 같은 분수 표기법이 사용될 수 있습니다. 여기서 쓰인 8-17/2는 만약 시간 항목에 썼다면, "오전 8 시에서 오후 5 시 사이 매 두 시간"의 간격을 나타냅니다.[/uli]

또한 crontab파일에는 아래의 도표에 나와있는 것들과 같은 몇몇의 특수한 단어들을 사용하실 수도 있습니다. 맨 마지막의 것을 제외하고는 모두 시간 항목에서 대신 사용될 수 있고, 마지막의 @AppleNotOnBattery는 명령어 앞에 넣어서, 노트북이 AC 전원에 연결되어 있지 않을 때는, 해당 명령이 실행되지 않게 하실 수 있습니다. 예를 들어, ~/Documents 폴더 안의 모든 파일들을 안전한 장소로 복사하는 스크립트가 PowerBook이 전원에 연결되어 있을 때에만 실행되게 하려면 다음과 같은 crontab 명령을 사용하실 수 있습니다:

0 * * * * @AppleNotOnBattery ~/bin/copyfiles

[table][caption]도표. crontab에서 쓰이는 특수한 단어들[/caption][tr][td]단 어[/td][td]설 명[/td][td]같은 뜻의 숫자 표기[/td][/tr][tr][td]@ reboot[/td][td]시스템이 재시동 될 때 실행[/td][td] [/td][/tr][tr][td]@ yearly[/td][td]매년 1월 1일 자정에 실행[/td][td]0 0 1 1 *[/td][/tr][tr][td]@ monthly[/td][td]매월 첫 날 자정에 실행[/td][td]0 0 1 *[/td][/tr][tr][td]@ weekly[/td][td]매주 일요일 자정에 실행[/td][td]0 0 * * 0[/td][/tr][tr][td]@ daily[/td][td]매일 자정에 실행[/td][td]0 0 * * *[/td][/tr][tr][td]@ hourly[/td][td]매시 정각에 실행[/td][td]0 * * * *[/td][/tr][tr][td]@ AppleNotOnBattery[/td][td]시스템이 전지를 사용하고 있을 경우, 명령의 실행을 막음[/td][td] [/td][/tr][/table]

at, batch, atq, 그리고 atrm에 관하여
- 다른 Unix 시스템에서 Mac OS X로 이주해 오셨다면 일정관리를 위해 at, batch, atq, 혹은 atrm 명령어를 자주 쓰셨을 겁니다. 이런 명령어들은 Mac OS X에도 포함되어 있지만, 전원 관리의 이유로 Apple에서 사용을 막아 놓았습니다. 꼭 이 명령어들을 쓰시고 싶으시면, /etc/crontab 파일 안에 있는 atrun 명령을 켜주시면 됩니다만, 권장해드리고 싶은 일은 아닙니다.

잠자기와 cron

cron 시스템은 컴퓨터가 잠을 자고 있을 때는 실행이 안됩니다. 이때는 CPU의 전원이 꺼져있고 시스템이 깨어날 때 사용하게 되는 메모리의 내용만을 보존하는 정도의 작업만이 이루어지기 때문입니다.

그래서, 중요 작업을 실행해야 할 경우에는, 시스템이 평소 잠자고 있지 않은 시간에 실행되도록 하는 것도 중요할 것입니다.

periodic의 실행 시간 바꾸기

기본적으로, periodic은 일간 작업을 오전 3:15, 주간 작업을 오전 4:30, 그리고 월간 작업을 오전 5:30에 실행합니다. 이렇게 설정된 이유는, 여러분이 편히 주무시는 동안 시스템이 실행해야 할 작업들이 비교적 적은 한가한 시간이기 때문입니다. 만약에 시스템이 하루 24 시간 항상 켜져있지 않다면, Mac이 켜져있는 시간 중에서 비교적 한가한 시간에 작업이 실행될 수 있도록 수정하실 수는 있습니다. 예를 들어, 점심 시간에 일간 작업이 실행되고, 월요일 오전 10:00에 주간 작업을 실행하며, 회의가 있는 오전 10:30에 월간 작업이 실행되게 하시려면, 아래의 보기-5에서처럼 /etc/crontab파일을 수정해 주시면 됩니다. 시스템 crontab은 어느 한 사용자에게만 적용되는 것이 아니기 때문에 crontab -e 명령을 사용하실 수는 없고, 직접 열어서 수정을 해주셔야 합니다.

보기-5. 적당한 시간으로 고쳐진 시스템 crontab의 periodic 작업들

15      12       *       *       *       root    periodic daily
0       10       *       *       2       root    periodic weekly
30      10       1       *       *       root    periodic monthly

더 캐내기

여기서 설명된 AppleScript에 관해 더 자세하게 알고 싶은 분들은 아래를 캐시기 바랍니다:
- AppleScript: The Definitive Guide, by Matt Neuburg (O'Reilly & Associates, 2003)

또, 아래의 명령들에 관해서는 터미널에서 불러 보실 수 있는 설명서도 많은 도움이 되실 겁니다:
[uli]periodic[/uli][uli]cron[/uli][uli]crontab[/uli]

James Duncan Davidson is a freelance author, software developer, and consulting focusing on Mac OS X and related technologies. He is the author of Learning Cocoa with Objective-C, co-author of Cocoa in a Nutshell, and a contributor to Mac OS X Hacks. He is busy writing his next book, Running Mac OS X Panther, which is designed to be the power user's guide to the system. In a previous life, he was the original creator of Apache Ant and Apache Tomcat, authored two versions of the Java Servlet API, and served as one of the architects of the J2EE platform.

-- 참고로, 앞에서 얘기된 Unix의 Cron 작업 일정을 쉽게 더하고 고칠 수 있는 도구로 CronniX라는 프로그램이 있습니다.

http://www.koch-schmidt.de/cronnix/docs/screenshot.jpg

그리고 덤으로, 시스템 crontab 파일에 등록되어 있는 Mac OS X의 유지보수와 관련한 모든 일정들의 관리를 대신 도맡아 절로 실행시켜 주는 Macaroni라는 이름의 아주 쓸모있는 도구도 있습니다. Macaroni는 일간, 주간, 월간 Unix 유지보수 작업들 뿐만이 아니라 권한 복구와 쓸모없는 언어 파일들을 지우는 일들도 절로 하실 수가 있답니다. wink

494

(1개의 댓글, 어플리케이션 글에 작성됨)

Dave Hyatt가 자신의 blog에 쓴 글을 보면 Safari가 웹 페이지의 내용을 표시하기 전에 이루어지는 여러가지 준비 과정들에 대한 설명의 글이 올라와 있습니다. 내용 중에는 Safari가 웹 페이지를 읽어드릴 때, cMinimumLayoutThreshold 변수에 지정된 시간(250ms) 안에 모든 내용들을 다 긁어오지 못했을 경우, cTimedLayoutDelay 변수에 지정된 시간(1000ms)만큼 대기한 후에 다시 주기적으로 계속해서 내용을 화면에 뿌려준답니다. 여기서 사용하는 일종의 대기 시간(timer)의 값을 줄이면 결과적으로 Safari의 페이지 읽는 속도를 증가시킬 수 있다는 내용이 있습니다.

이 대기 시간을 줄이는 방법으로는, 우선 Safari를 종료하고 ~/Library/Preferences/ 폴더에 있는 com.apple.Safari.plist 를 텍스트 편집기로 열어서 아래의 두 줄을 <dict> 태그 안의 아무 곳에나 추가하시면 됩니다.

<key>WebKitInitialTimedLayoutDelay</key>
<real>0.25</real>

혹은, 간단하게 터미널을 여시고 다음과 같이 입력하고 return키를 누르셔도 같은 효과를 보실 수 있습니다.

defaults write com.apple.Safari WebKitInitialTimedLayoutDelay 0.25

원래의 기본 값은 1.0 입니다만, 이 값을 낮추면 Safari가 페이지를 표시하기 전에 대기하는 시간을 줄이는 효과를 나타낸다고 합니다. 약간의 부작용이라고 할 수 있는 것은, 느린 라인을 사용하거나 붐비는 웹 페이지를 읽어들일 때 생길 수 있는 "잠깐의 백지 상태" 입니다만, 이것은 표시하려는 영역의 데이타를 Safari가 설정된 대기 시간 전에 가져오질 못 해서 일시적으로 해당 영역이 그냥 흰 색으로 표시되는 현상이며, 실제로 체감 반응 속도는 더 빠르게 느껴질 겁니다.

이것은 Mac OS X Hints에 소개되었던 요령입니다.

495

(0개의 댓글, Mac OS 글에 작성됨)

Panther에서 글자 부드러움 처리(text smoothing) 기능을 끌 수 있는 최대 글꼴 크기는 12로 설정되어 있으며, 이 최대 크기 값의 설정은 ~/Library/Preferences/.GlobalPreferences.plist에 저장되어 있습니다. 그래서 부드러움 처리 기능을 완전히 꺼버리는 방법은 아니고 비슷한 효과를 볼 수 있게, 이 최대 크기 값을 12 이상으로 설정하실 수는 있습니다.

방법은 위의 파일을 TextEdit로 열어서 다음과 같은 부분을 찾습니다:

<key>AppleAntiAliasingThreshold</key>
<string>128</string>

위와 같이 숫자 부분에 원하시는 최대 글꼴 크기 값을 써 주시면 됩니다.

간단히, 터미널을 사용해서:

defaults write -g AppleAntiAliasingThreshold 128

라고 입력하셔도 됩니다.

참고로, 이 방법을 사용하면 Adobe PhotoShop이 실행이 안될 수도 있다고 합답니다.