Unix/Linux 와 Windows 의
개행문자처리방식이 달라서 CGI 프로그램을 설치할때 종종 귀찮은 문제가 발생하곤 합니다. 원인과 대책을 정리해보죠.
문제 원인 ¶
- 아래의 도표에서처럼 OS에 따라서 개행문자처리방식이 다르다.
| OS | 개행문자 | 특수문자표시 |
| Unix/Linux | <NL> | \n |
| DOS/윈도우계열 | <CR> <NL> | \r\n |
| Mac OS 계열 | <CR> | \r |
LF(line feed)보다 NL(new line)이라는 기호를 사용합니다.
FTP 사용시 ¶
- FTP 프로그램으로 소스코드를 전송할때, Binary 모드로 하지 말고, Ascii 모드로 전송해야한다.
- 윈도우에서 다음과 같은 프로그램을 이용하여 FTP 로 저장.(텔넷접속이 불가능할때도 유용.)
텔넷 접속시 ¶
- 윈도우에서 zip 으로 압축해서 전송해서 그곳에서 압축을 푼다.(unzip)
- col -b < old_filename > new_filename
- vi 혹은 VimEditor 에서 : :%s/^M//g ^M 은 Ctrl-V + Ctrl-M or Ctrl+V + Enter 으로 입력해야 함. 직접 ^M 을 입력해서는 안됨.
- VimEditor 에서 :set ff=unix
참고 ¶
Unix에서의 다양한 텍스트 변환 방법 DeadLink
Perl과 쉘을 이용한 변환 스크립트 (인터넷을 뒤져서 퍼왔구먼요^^)
dos2unix : 변환식 = perl -pi -e 's/\r//' $*
#!/bin/sh
##############################################################
#
# * DOS to Unix * File Converter
#
##############################################################
# 도스형 파일을 유닉스형으로 변환하는 도구
##############################################################
# 1999. 9. 6. by lawwal@way.co.kr
##############################################################
EXEC_NAME=`echo $0 | awk -F/ '{print $NF;}'`
## 도움말
if [ $# -lt 1 ]
then
echo " USAGE: $EXEC_NAME File [ Files... ]"
echo
echo " Example : $EXEC_NAME waycgi.html way-board.cgi"
echo
exit
fi
## 실행
perl -pi -e 's/\r//' $*
unix2dos : 변환식 = perl -pi -e 's/\n/\r\n/' $*
#!/bin/sh
##############################################################
#
# * Unix to DOS * File Converter
#
##############################################################
# 유닉스형 파일을 도스형으로 변환하는 도구
##############################################################
# 1999. 9. 6. by lawwal@way.co.kr
##############################################################
EXEC_NAME=`echo $0 | awk -F/ '{print $NF;}'`
## 도움말
if [ $# -lt 1 ]
then
echo " USAGE: $EXEC_NAME File [ Files... ]"
echo
echo " Example : $EXEC_NAME waycgi.html way-board.cgi"
echo
exit
fi
## 실행
perl -pi -e 's/\n/\r\n/' $*
Q: Win2000에서 텍스트파일을 만든다음..FTP 전송을 Ascii모드와 Binary모드 두가지로 해서 리눅스 머신에 전송한다음 Vi에디터로 읽었는데, Binary 모드 전송인 경우에두 이상한 문자(\r) 없이 잘 보이네요? 이상하다 내가 실험을 잘못했나?
A:리눅스에서 많이 사용하는
VimEditor 의 경우 DOS 포맷을 인식해서 캐리지리턴이 있어도 이상한 문자 없이 보여줍니다. 한 번 vi -b filename 해서 binary 모드로 열어보세요. 줄마다 캐리지리턴이 붙어있는 것을 보실 수 있을 겁니다. 그런데, 버전따라 설정따라 보이는게 다를때가 있는 것 같더군요. 알맹이는 똑같아도. 그리고, 파일 열어서 첫 화면 떴을 때 잘 보시면 아래쪽에 &
dos format& 이라고 나와있습니다.
VimEditor를 이용해서
개행문자처리방식의 변환을 할 수 있습니다. 글을 읽은 후에 저장하기 전에
:set ff=dos나
:set ff=unix,
:set ff=mac 명령을 내리면 해당 OS의 방식으로 저장할 수 있습니다.
VimEditor는 Mac/Unix/Windows에서 모두 돌아갑니다.
Unix형식의 파일을 MS윈도의
NotePad 대신 WordPad로 읽어서 저장하면 도스 윈도계열의 파일형식으로 저장된다.