1. 기능 : 리눅스 기본 명령어들의 심볼릭 링크를 관리

2. option
-- config : 현재 심볼릭 링크를 변경하고자 할 때
-- list : 입력한 명령어 대신에 쓸 수 있는 다른 명령어들을 찾아준다.

3. 활용 예

# update-alternatives --config gcc


출 처 : http://blog.naver.com/yukino4u?Redirect=Log&logNo=98940260

from : http://ubuntuguide.net/how-to-install-and-setup-gcc-4-1g4-1-in-ubuntu-10-0410-10


The default gcc version in Ubuntu 10.04 LTS and 10.10 is gcc 4.4. However some programs depend on gcc 4.1.1 or gcc 4.1.2. Here’s how to install and setup gcc 4.1.3 in Ubuntu 10.04/10.10 which also works if one program need gcc 4.1.1/4.1.2 to run.

Install Gcc 4.1

gcc 4.1.3 is available default in Ubuntu 10.04/10.10 official repository, just run the command in Applications -> Accessories -> Terminal:


sudo
apt-get install gcc-4.1
 

If you absolutely want gcc 4.1.1, refer to ubuntuforums.org.

Set gcc 4.1 as default version

After that, use this command to list installed gcc in your Ubuntu:


ls /usr/bin/gcc*


and use this command to check which is default:


gcc -v


1.)
 Now, add alternatives for gcc:


sudo
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 40 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 30


run this command which lists available versions, then type a number to set default.


sudo update-alternatives --config gcc
 

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

Selection Path Priority Status
————————————————————
0 /usr/bin/gcc-4.4 40 auto mode
* 1 /usr/bin/gcc-4.1 30 manual mode
2 /usr/bin/gcc-4.4 40 manual mode


2.)
 add alternatives for g++, i486-linux-gnu-gcc, and i486-linux-gnu-g++ and set 4.1 as default:


update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 40 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.1 30 update-alternatives --config g++

update-alternatives --install /usr/bin/i486-linux-gnu-gcc i486-linux-gnu-gcc /usr/bin/i486-linux-gnu-gcc-4.4 40 update-alternatives --install /usr/bin/i486-linux-gnu-gcc i486-linux-gnu-gcc /usr/bin/i486-linux-gnu-gcc-4.1 30 update-alternatives --config i486-linux-gnu-gcc

update-alternatives --install /usr/bin/i486-linux-gnu-g++ i486-linux-gnu-g++ /usr/bin/i486-linux-gnu-g++-4.4 40 update-alternatives --install /usr/bin/i486-linux-gnu-g++ i486-linux-gnu-g++ /usr/bin/i486-linux-gnu-g++-4.1 30 update-alternatives --config i486-linux-gnu-g++
sudo 명령어에 대한 설정을 하려면 /etc/sudoers 파일을 수정 하면 된다. 이 파일은 기본적으로 read-only 파일이며, root로 접속해서 수정 시에도 강제로 write 해야만 된다.

#

# This file MUST be edited with the 'visudo' command as root.

#

# Please consider adding local content in /etc/sudoers.d/ instead of

# directly modifying this file.

#

# See the man page for details on how to write a sudoers file.

#

Defaults    env_reset


# Host alias specification


# User alias specification


# Cmnd alias specification


# User privilege specification

root    ALL=(ALL:ALL) ALL


# Members of the admin group may gain root privileges

%admin ALL=(ALL) ALL


# Allow members of group sudo to execute any command

%sudo   ALL=(ALL:ALL) ALL


#includedir /etc/sudoers.d




이 설정은 root 유저에게 모든 호스트에서 모든 유저의 권한을 모든 명령어를 실행시킬 수 있다는 뜻이다.

root ALL=(ALL) ALL



sudo 명령어를 사용할 때 특정 사용자에게는 비밀번호를 묻지 않도록 한다.
/etc/sudoers에 아래와 같은 문구를 추가한다.

userID ALL=(ALL)NOPASSWD: ALL













This post will show how to upgrade from Debian 5.0.x “Lenny” to the latest stable Debian release 6.0 “Squeeze”. One of the reasons I’ve liked Debian in the first place was the advantage of being able to do a live, in place updates from one major release to another, usually in a safe way. As always, if you do this, please take some time to backup your system if you care of your data, as this is a major upgrade and things can go wrong. Squeeze brings in a few big changes and I will outline some of them, but I would recommend to read the release notes and look for any incompatibilities (hardware or software) or changed things that could affect your particular setup.

1. Update apt sources.list

The first thing we will do (after the backup of course) is to edit the /etc/apt/sources.list file and replace “lenny” with “squeeze“. Originally, this might look like this (for a system using the main US mirrors; your file might use a different local one):

deb http://ftp.us.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.us.debian.org/debian/ lenny main contrib non-free

deb http://security.debian.org/ etch/updates lenny contrib non-free

after replacing lenny with squeeze the file will look like this:

deb http://ftp.us.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.us.debian.org/debian/ squeeze main contrib non-free

deb http://security.debian.org/ squeeze/updates main contrib non-free

2. Perform the system upgrade

After updating the sources file, you will have to refresh the indexes with:
aptitude update

Next let’s manually upgrade the core apt packages (this will pull in some extra dependencies, and this is perfectly fine):
aptitude install apt dpkg aptitude

And finally we will perform the bulk of package upgrades with:
aptitude safe-upgrade
this will take a while depending on what packages you have installed (that will need to be upgraded) and on your internet connection speed.

Here are some changes that you might want to pay special attention during the upgrade:
- dash: squeeze uses dash instead of /bin/sh as the default system shell. This is the recommended way and it is supposed to be faster and improve the system overall performance. I recommend to use it and accept this change.
- grub2: is the default in squeeze and the upgrade will recommend to upgrade from your existing grub. This is a major change and for this reason initially the boot loader will be chainloaded in the existing menu.lst to verify it works fine. If you want to upgrade I would recommend to do the chainload and test it with at least one reboot before removing grub legacy.
- sysv-rc: to improve the boot process the upgrade will offer to move to dependency-based sequencing. This is irreversible but highly recommended. I had no problem with it and don’t see why anyone would not want this.
- UUIDs: the installer will recommend to switch from regular disk devices (aka /dev/sda*) to disk IDs (aka UUID=c6ecae74-6754-4ad0-986d-98dd9cbfd293) in various configuration places like /etc/fstab, /boot/grub/menu.lst. I personally don’t like that, but didn’t want to take the risk for the device to change its name with the new kernel and went with the change. If you do the same pls. doublecheck the changed files before rebooting.

Now it is time to reboot your system for the first time into squeeze. Fingers crossed and in a few minutes you will be running squeeze (as always an out of band impi console is handy when doing such upgrades)

3. Complete the upgrade

If you upgraded to grub2 and want to remove the chainloaded grub-legacy you can remove it completely from the system with:
upgrade-from-grub-legacy
and the output will look like this:
0
Installation finished. No error reported.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-5-amd64
Found initrd image: /boot/initrd.img-2.6.32-5-amd64
Found linux image: /boot/vmlinuz-2.6.26-2-amd64
Found initrd image: /boot/initrd.img-2.6.26-2-amd64
done

You can now run:
aptitude full-upgrade
and this will complete some extra packages that were not straitforward and not seen as safe by the normal upgrade process (there might be none, depending on the state of your existing system). Evaluate them before moving forward. And finally once you are done reboot once more (to see that grub2 is working fine by itself) and you will be running the latest uptodate squeeze system.

4. (Optional) Convert your ext3 filesystems to ext4

This step is optional and if you are happy with the ext3 filesystem then you can safely skip it. Myself, I’ve done this most of the time so I thought it might be useful to add it here for anyone else interested to do the same.

First doublecheck if you are running the 2.6.32 squeeze kernel:
uname -a
Linux srv01 2.6.32-5-amd64 #1 SMP Wed Jan 12 03:40:32 UTC 2011 x86_64 GNU/Linux

Older than 2.6.28 kernels (like lenny 2.6.26 for example) don’t have native support for ext4, so this will fail for an older kernel. Because ext4 is backwards compatible with ext3, all we have to do is to change the mount definitions to ext4 in fstab:
vim /etc/fstab
and change the filesystem from ext3 to ext4 for any devices you might have. Make a note on the devices you change, and reboot the machine. After the reboot the machine will use the ext4 driver for the old filesystem even though it doesn’t take full advantage of the ext4 capabilities. To complete this and enable the extra ext4 features we will need to run for each filesystem:
tune2fs -O extents,uninit_bg,dir_index <device>
like, for example for /dev/sda1:
tune2fs -O extents,uninit_bg,dir_index /dev/sda1
this will only be activated when the filesystem is unmounted and we can achieve this with yet another reboot (especially for the root filesystem), and the system will auto fsck them (as the last command marked the filesystem as dirty) and perform the upgrade. I would highly recommend for this to have a remote console on the system as in most of the cases the auto fsck will fail and you will have to run it manually from the console.

Hopefully this howto will help you upgrade your debian system to squeeze with ext4. If you have encountered anything special during the upgrade feel free to share it with others using the comment box bellow.

 

출처 : http://www.ducea.com/2011/02/05/howto-upgrade-from-debian-lenny-to-squeeze/

umask

- 새로운 파일이나 디렉토리에 대한 허가권 지정 명령어

- chmod와 반대로 해당 그룹 및 다른 사용자들에게 쓰기 권한을 박탈하는 것

- 일반 파일의 경우 666, 디렉토리인 경우 777에서 umask 값을 뺀 값으로 허가권 지정

- .profile, .cshrc, .bashrc, .login과 같은 사용자 프로파일에서 설정

 

 umask

 디렉토리 허가권 

 파일 허가권

002 

 775

 664

 007

 770

 660

 020

 757

 646

 070

 705

 604

 022

 755

 644

 


모든 사용자에서 적용할 umask 값은  /etc/login.defs 에서 UMASK 값을 설정함으로써 정할 수 있다.


출 처 : http://gimbonggu.blog.me/90100567367 

위키 피디아 : 

In Unix-like operating systems, a loop devicevnd (vnode disk), or lofi (loopback file interface) is a pseudo-device that makes a file accessible as a block device.
파일을 블럭 디바이스 처럼 엑세스 할 수 있게 해주는 가상의 장치라고 되어 있다.

이미지 등의 파일들을 하나의 장치처럼 사용하도록 마운트 하는 옵션.

예를 들어 CD의 iso 이미지나 플로피 디스크파일을 다룰 때 
하나의 파일안에 파일시스템 전체가 들어있는 경우( ex: 부트이미지 등)
loop device를 통해 해당 파일 시스템안의 파일등을 다룰 수가 있게 된다.

#mount -t ext2 -o loop,ro root.img /mnt/floppy의 형식으로 사용할 수 있으며

ro(readonly)의 옵션은 그 외에도 rw 등을 사용할 수 있다. 

그외에도 loop장치가 명시되지 않으면 ( -o loop라는 옵션만 주면) mount 는 사용하지 않은 loop장치를 찾아서 사용한다.

ftp> ! [command]

잠시 셸로 빠져나간다.

셸을 종료하면 다시ftp로 돌아간다.

 

?, help

ftp> ? [command-name]

help 내용을 본다.

?만 입력하면 모든 명령어 목록이 출력되며명령어를 파라미터로 주면 해당 명령어의help 내용을 출력한다.

 

account

ftp> account [passwd]

remote 서버로account 정보를 보낸다.

 

append

ftp> append [local-file [remote-file]]

remote 서버에 파일이 존재할 경우 이어붙인다.

remote-file 명을 입력하지 않으면local-file 명으로 지정된다.

 

ascii

ftp> type ascii

전송 모드를ascii로 설정한다.

 

binary, image

ftp> type [binary/image]

전송 모드를binary로 설정한다.

 

bell

ftp> bell [on/off]

명령어 실행 완료 시 삐 소리 출력 여부 설정한다.

 

bye, quit

ftp 연결을 끊고 종료한다.

case

mget 명령 시의 원격 서버 파일명 대소문자 구분을 설정(on/off toggle, default: off)

(on이면) remote 서버의 파일들을mget으로 가져올 때대소문자 구분없이 모두 소문자로 가져온다.

 

 

cd

ftp> cd [remote-directory]

서버의 디렉토리를 변경

 

cdup

서버의 디렉토리를 한단계 전으로 변경(cd .. 와 동일)

 

chmod

ftp> chmod [mode remote-file]

파일의 권한을 변경

 

close, disconnect

ftp 연결을 끊는다.

ftp 연결만 끊으며ftp를 종료하지는 않는다정의한 매크로는 모두 삭제된다.

 

cr

텍스트 파일 전송시 엔터코드(Carriage Return) 유무를 조정. (on/off toogle, default: on)

 

delete

ftp> delete [remote-file]

remote 파일을 삭제한다.

빈 디렉토리도 삭제할 수 있다.

 

debug

디버깅 모드를 설정한다. (on/off toggle debug 레벨 설정)

 

dir, ls

ftp> dir [remote-directory] [local-file]]

디렉토리를 출력한다.

local 파일을 파라미터로 줄 경우, dir 명령의 결과를 파일로 저장할 수 있다.

 

form

파일 전송 포맷을 설정한다.

(non-print 포맷만 지원)

 

get, recv

ftp> get [remote-file [local-file]]

remote 파일을local 서버로 전송받는다.

local 파일명을 파라미터로 줄 경우전송받은 파일의 파일명을 지정할 수 있다.

 

glob

local 파일이름의 메타문자 확장을 설정한다. (on/off toggle, default: on)

 

hash

1024 바이트 전송 시마다'#' 기호를 출력한다.

hash 기능 사용 시 퍼포먼스 저하

 

idle

ftp> idle [seconds]

remote 서버 연결의 비활성화 시간을 설정/확인한다.

초 단위로 파라미터를 줄 경우비활성화 시간을 설정하며파라미터가 없는 경우 현재 설정 상태를 출력한다.

설정된 시간이 지나면ftp 접속이 끊어진다. (30~7200초 설정 가능)

 

lcd

ftp> lcd [local-directory]

local 디렉토리를 변경한다.

파라미터로 주어진 디렉토리로local 디렉토리를 변경하며파리미터가 없는 경우local home 디렉토리로 변경

 

macdef

ftp> macdef [macro-name]

매크로를 정의

명령어 실행 후 다음 라인부터의 내용이 매크로로 저장

빈 라인(내용없이 엔터 입력)이 입력되면 매크로 저장이 종료

최대4096개의 문자로 된16개의 매크로를 정의할 수 있으며정의된 매크로는close 명령어로 종료될 때까지 유지

 

$

ftp> $ [macro-name]

매크로를 실행한다.

 

macdef 명령어로 먼저 매크로를 정의해 놓은 후해당 매크로를 실행

반복적인 작업이나 일괄작업 등에 쓰임

 

mdelete

ftp> mdelete [remote-files]

다수의 파일을 삭제한다.

 

mdir

ftp> mdir [remote-files local-file]

다수의 디렉토리/파일의 출력 결과를local 파일로 저장한다.

 

mls

ftp> mls [remote-files local-file]

다수의 디렉토리/파일의 간단한 출력 결과를local 파일로 저장한다.

 

mget

ftp> mget [remote-files]

다수의remote 파일을 전송받는다.   

 

mkdir

ftp> mkdir [directory-name]

서버에 디렉토리를 생성한다.

  

mode

파일 전송 모드를 설정한다.

제공되는 모드는stream 뿐이다.

 

modtime

ftp> modtime [remote-file]

파일의 최종 수정시각을 출력한다.

 

mput

ftp> mput [local-files]

다수의local 파일을 서버로 전송한다.

 

newer

ftp> newer [remote-file [local-file]]

파일을get 하되, local 파일보다 나중인 경우에만 가져온다.

local 파일이 없는 경우 그냥get 한다.

 

nlist

ftp> nlist [remote-directory] [local-file]

디렉토리의 파일 목록을 출력한다.

디렉토리명을 지정할 수 있으며지정하지 않으면 현재 디렉토리가 출력된다.

 

open

ftp> open [server-host] [port-number]]

서버에 접속한다.

ftp 접속이 끊어졌을 경우ftp를 종료하지 않고open 명령어로 재접속 가능

 

prompt

multiple 명령어 실행 시 응답 여부를 설정한다. (on/off toggle, default: on)

off로 설정할 경우, multiple 명령어(mget, mput 실행시y/n 선택없이 강제로 진행된다. (모두y)

 

sendport

data 연결을 위해PORT 명령어 사용 여부를 설정한다. (on/off toggle, default: on)

off로 설정할 경우 명령어 실행에delay가 생길 수 있다.

 

passive

passive 모드 설정을 변경한다. (on/off toggle, default: off)

 

put, send

ftp> put [local-file] [remote-file]]

서버로local 파일을 전송한다.

파일명을 파라미터로 줄 경우, remote 서버로 전송되는 파일명을 지정할 수 있다.

 

pwd

서버의 현재 디렉토리를 출력한다.

 

reget

ftp> reget [file-name]

파일의 끝에 이어서get 한다.

파일을get 하던 중 중지된 경우처음부터 다시 받지 않고reget 명령어를 이용해 이어받을 수 있다.

 

rstatus

ftp> rstatus [file-name]

서버의 상태를 출력한다.

 

rhelp

ftp> rhelp [command-name]

서버로부터help 정보를 얻어온다.

ftp 프로그램 상의 명령어가 아닌 순수ftp 프로토콜의 명령어에 대한help 정보이다.

 

rename

ftp> rename [from-name [to-name]]

서버의 파일디렉토리의 이름을 변경한다.

 

rmdir

ftp> rmdir [directory-name]

빈디렉토리를 삭제한다.

 

runique

local 파일의unique 저장 설정을 변경한다. (on/off toggle, default: off)

만약remote 파일을get/mget으로 가져올 때, local 서버에 같은 이름의 파일이 존재하는 경우

해당off로 설정되어있으면 덮어씌기하고, on으로 설정되어있으면 파일명 끝에.1 과 같이 숫자 붙는다.

 

size

ftp> size [file-name]

파일의 사이즈를 출력한다.

 

status

현재ftp 접속 상태 정보를 출력한다.

 

struct

ftp> struct [struct-name]

파일 전송struct를 설정한다.

 

system

서버의OS 타입을 출력한다.

 

tenex

파일 전송 모드를tenex로 설정한다.

 

type

ftp> type [type-name]

파일 전송 모드를 설정

 

umask

ftp> umask [newmask]

서버의umask를 설정

 

verbose

verbose 모드를 설정한다. (on/off toggle, default: on)

on일 경우파일 전송 완료 시 전송 통계 내역(전송size, 소요시간초당 속도 등)을 출력한다.

출처 : 
http://blog.bntpidc.com/60109402564

[출처] ftp 명령어정리|작성자 BNTP IDC

일단 ftp 명령 파일을 작성한다.
 ftp_cmd 파일

verbose
open 접속할주소
user ID PASSWORD
bi
ha
cd 디렉토리
put 업로드할파일
bye

접속할주소 : 접속 할 ftp 서버 주소
ID : 접속 할 ftp 서버의 계정명
PASSWORD : 계정에 대한 패스워드
디렉토리 : 작업할 디렉토리

위와 같이 파일을 만든 후

$ ftp -n < ftp_cmd 

명령을 내리면 저 명령들이 순차적으로 실행된다.

팁이라기 보다는 문제 제기에 가깝습니다. 

리눅스에서 wget의 용도는 참 다양합니다. 
다른 홈페이지의 뭔가를 가져오고(때로는 긁어오고...) 제 경우는 내부에서 php를 실행할때로 자주 사용합니다. 

근데 man wget 하고 여러 옵션을 구경하다가 
-r 
--recursive 
라는 놈이 있어서 한번 실행을 해봤습니다. 
아예 홈페이지의 내용을 디렉토리채 긁어오는군요. 

테스트해보시려면 
wget http://www.phpschool.com -r  해보십시요. 

www.php.school.com 이라는 폴더가 하나 생기고 그 하위 폴더들이 주루룩 나오는군요. 
디렉토리 스트럭처가 적나라하게 보입니다. 
banner    community  guild    index.html  survey 
biznbaza  company    html_sub  index.php    title_image 
class    gnuboard4  images    menu_images  ttrend 

물론 php 소스가 아니고 출력된 html의 형태로 저장되기는 하지만 기타 css, js, 이미지등등은 그대로 가져오는군요. 

저만 모르고 있었던 것인가요? 
뒷북이라면 죄송합니다만.... 

여기서 하나... 
남의 홈페이지 긁어오는 데는 그만이지만 
반대로 누군가 내 홈페이지를 긁어가는 것은 기분이 엄청 나쁠 것같습니다. 

해서~~ 
아무리 생각해봐도 wget을 막기는 막아야할 것같습니다만.. 
이놈이 
-U agent-string 
--user-agent=agent-string 
옵션까지 무장을 하고 있어서 agent로 차단하는 것은 불가능해보입니다. 

혹씨나해서 살펴보니 robots.txt가 먹히는군요. 

User-agent:* 
Disallow:/ 

하니까 못 긁어가네요. 

더좋은 방법이 있는지 모르겠습니만... 
참고하시기를...

 

====================

오늘도 wget 여러 옵션들을 테스트해봤습니다. 
그동안 제일 궁금했던 것이 
--user-agent=agent-string 
등으로 user-agent를 속이는데 서버에서는 어떻게 인식하는지가 제일 궁금해서 
http://browsers.garykeith.com/tools/your-browser.asp 
에 접속해봤습니다. 

 wget  --user-agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"  http://browsers.garykeith.com/tools/your-browser.asp 
했더니 튕기더군요. 
---------------------------------- 
Access Denied 
You do not appear to be using this form in accordance with my Terms of Use. 
Continued abuse will eventually result in you losing access to this server! 
It's also possible you are using security software that modifies the HTTP_REFERER header. 
If I can't confirm the referrer is valid then you can't have access to my forms. 
-------------------------------- 

그래서 이번에는 --referer 옵션까지 설정을 해서 다시 시도해봤습니다. 
wget  --user-agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"  --referer="http://browsers.garykeith.com/tools/property-docs.asp" http://browsers.garykeith.com/tools/your-browser.asp 
이번에는 성공!!! 
------------------------------- 
Your Browser 
User Agent 
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) 
.... 이하 생략 
-------------------------------- 

어찌보면 당연한 결론이지만  --user-agent, --referer 두가지다 제대로 작동합니다. 

더 무서븐것은 --save-cookie, --load-cookies,  --post-data=string, --post-file=file 입니다. 

--save-cookie "cookie.txt" --post-data "user_id=myid&password=mypassword" 
옵션을 주니까 멋있게 로그인까지 하고 쿠키를 저장해두더군요. 

다시 
 --load-cookies "cookie.txt" 하니까 회원만 가능한 곳 어디든지 정상접속됩니다. 

post.dat라는 화일에 게시판에 필요한 변수를 입력해두고 
 --load-cookies "cookie.txt"  --post-file "post.dat" 하니까 게시판에 글도 씁니다. 

잘만 활용하면 좋겠는데 
까딱하면 스팸로봇이 따로 필요없습니다...헐~~

 

출처

http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=62537&page=1

http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=62631&page=1

UTF-8 캐릭터셋으로 변경하기위한 방법은 여러가지 작업을 거쳐야하는 까다로운 작업이다. 

새로운 사이트를 구축하는데는 별다른 어려움이 없지만

기존사이트를 이전하기 위해서는 알게 모르게 많은 수작업이 

들어간다. 

만일 HTML 파일내용을 EUC-KR에서 UTF-8로 변경해야 할 

경우라면 다음과 같은 명령을 사용한다.

iconv -c -f euc-kr -t utf-8 a.html > a.html.utf8

iconv 명령은 여러개의 파일을 동시에 변환할 수 가 없다. 따라서

여러개의 파일 혹은 디렉토리상의 HTMl을 변경하고자 할때는

다음과 같이 크립트를 작성하여 변환을 해야 한다. 


#!/bin/bash
for DIR in `find . -type f `
do
echo "$DIR done............................"
iconv -c -f euc-kr -t utf-8 $DIR > aa
rm -f $DIR ; mv aa $DIR


done


iconv옵션중에 "-c"를 붙여주는 이유는 간혹 잘못입력된 한글 혹은

특수문자의 경우 UTF-8 변환이 되지 않는다. 이와같은 경우로

파일이 삭제되는 경우를 방지하기 위해 -c를 주면 변환할 수 없는

파일이 있더라도 강제로 변환하기 위함이다.

위처럼 파일의 내용을 변경했으면 meta 태그를 변경하는

과정이 필요하다. 아무리 실제 파일 내용이 UTF-8일지라도 

이걸 표현하는 Explorer 나 Firefox에서는 태그가 제대로 

표현되어 있지 않으면 UTF-8로 표현되지 못한다. 

따라서 다음과 같은 명령으로 meta의 character-set을 변경해야

한다.


find . -name '*.html' -exec perl -pi -e 's/euc-kr/utf-8/g' {} \;


다음으로 간혹 개념없는 유저들이 올리는 한글이름으로 된

파일을 UTF-8파일명으로 변경해야 한다. iconv는 파일의

실제 내용을 utf-8로 변경했을뿐 파일명은 다른 문제라서

다음과 같은 명령으로 파일명을 변경해야 한다.


convmv -r -f euc-kr -t utf-8 --notest *

convmv의 경우 리눅스상의 기본 명령어가 아니므로 www.rpmfind.net 등에서 rpm을 검색하여 설치해야 한다. 




주의사항 : UTF-8로 변경하는 작업은 생각만큼 쉬운 작업이


아니다. 지금 완전히 정착된 것도 아니고 해서 변환에 신중신중을

기해야 한다.

출처 : http://blog.naver.com/ssik425?Redirect=Log&logNo=10088230675


+ Recent posts