0. 쉘에서 Icon^M 파일 생성 방법
리눅스 쉘에서 아래처럼
touch $'Icon\r'
혹은
touch Icon Ctrl+v Ctrl+m Enter
--> 컨트롤+V와 컨트롤+M 은 타이핑하는게 아니고 펑션키처럼 누른다.
캐리지리턴(carriage return)파일 생성 ==> touch Ctrl+v Ctrl+m Enter
쉘에서 Ctrl+v Ctrl+m 을 입력하면 ^M 이 나타난다.
ls로 보면 ? 로 보인다.
해당 파일을 지우려면 rm Ctrl+v Ctrl+m 하면 된다.
1. Icon^M 파일 특성
Icon^M 파일은 afp 프로토콜을 사용하는 Mac OS에서 아이콘이 포함된 폴더를 업로드 할 때 리소스포크 형태의 파일인 Icon^M이 딸려 올라오면서 생성되는 것이다. Icon^M 파일이 해당 폴더의 아이콘 리소스인 것이다.
Icon^M 파일은 Mac OS X 쉘에서 확인해 보면 1개의 빈 파일형태로만 존재하고, netatalk를 통해 리눅스 서버에 올라오면 1개의 빈파일과 .AppleDouble 디렉토리내에 용량이 있는 Icon^M 파일 1개가 각각 존재한다.
그런데 같은 공유볼륨을 AFP와 FTP 프로토콜을 통해서 데이터 입출력이 일어나게 되면 문제가 발생을 하게 되는데, FTP를 통해서 해당 Icon^M 파일을 지울 수가 없는 원인 때문이다.
ftp 서버 프로그램(proftpd, vsftpd)은 파일명에 캐리지리턴이 포함되면 해당 파일을 액세스하지 못하기 때문에 그렇다.
따라서 Icon^M 파일을 지우기 위해서는 proftpd 와 같은 ftp 서버프로그램의 소스를 일부(파일을 지우는 소스코드 부분)를 수정해야만 한다.
만약 수정 코드가 적용되지 않은 일반적인 FTP서버프로그램을 통해 Mac OS에서 업로드한 아이콘이 포함된 디렉토리를 지우면 디렉토리가 비워져 있지 않다는 메시지와 함께 삭제가 되지 않는다. - 실제론 Icon^M 파일을 제외한 파일들은 모두 지워지고, Icon^M 파일이 포함된 빈디렉토리만 남게되는 것이다.
그렇지만 캐리지리턴 파일명을 가진 파일까지 핸들링 할 수 있는 smb 프로토콜을 통해서는 클라이언트가 Mac OS 이던 Windows든 해당 파일을 지울 수 있다.
2. AFP 프로코톨 특성
AFP는 Apple Filing Protocol의 약자이며, Mac OS 9(Classic)과 OS X를 위한 네트워크 파일전송 프로토콜이다.
리눅스 afp프로토콜 지원 Netatalk 프로그램은 파일리스트를 별도의 DB(버클리DB)를 통해 관리하고, 액세스한다. 예를 들어 10개의 하위 디렉토리와 100개의 파일(각가의 디렉토리에 분포)로 이루어진 파일을 AFP를 통해 지우면 해당 파일과 디렉토리는 FTP처럼 최하위 파일과 디렉토리가 순차적으로 상위로 올라오면서 지워지는 구조가 아니다.
그리고 각종 리소스포크 파일들이 부수적으로 존재하고, 리소스포크 파일에 문제가 생기면 이상한 증상(매킨토시에서 파일전송 불안정, 서버연결 끊김, 파일이나 폴더가 통째로 안보이거나 일부 안보이는 등등..)이 발생된다. 운영하기엔 까다로운 독특한 프로토콜이지만 나름 장점도 많다.