'분류 전체보기'에 해당되는 글 150건
- 2009.11.27 네트워크 관련 볼것
- 2009.11.24 27. CentOS 에서의 한글 설정 3
- 2009.11.23 26. ethtool 사용하기 spped 와 duplex 변경 6
- 2009.11.05 25. sort 명령어 2
- 2009.11.05 13. 파일 비교 스크립트 4 2
- 2009.10.21 12. 파일 개수 비교해서 삭제하는 스크립트 3
- 2009.09.19 11. SSH 접속 차단 스크립트 ( 5번 패스워드 틀리면 자동 차단) 2
- 2009.09.18 10. 파일비교 스크립트2 3
- 2009.09.15 24. tar 압축파일에 관해서
- 2009.09.10 9. 여러 파일 하나의 txt 파일로 합치기 스크립트 3
- 2009.09.10 8. 파일 내용 비교1 3
- 2009.08.13 [노을의시집] 10. 낮은 계단으로 2
- 2009.08.13 [노을의시집] 9. 기다림
- 2009.08.13 [노을의시집] 8. 그대 한번의 웃음이.......
- 2009.08.13 [노을의시집] 7. 새로움.......
- 2009.08.13 [노을의시집] 6. 그대가 나에게 ...
- 2009.08.12 [노을의시집] 5. 소중한 것은 ...
- 2009.08.12 [노을의시집] 4. 조지윈스턴
- 2009.08.12 [노을의시집] 3. 천년의 사랑이 아니어도 ...
- 2009.07.29 [노을의시집] 2. 전 지금까지 2
2009. 11. 27. 17:00
네트워크 관련 볼것
2009. 11. 27. 17:00 in 네트워크 기초
http://stone.backrush.com/sunfaq/d00003.html
'네트워크 기초' 카테고리의 다른 글
FTP 이란? File Transfer Protocol (2) | 2010.09.27 |
---|---|
공유기 기능 - 고급기능4 ( WOL ) (0) | 2010.04.21 |
공유기기능 - 고급기능3 TwinIP (0) | 2010.04.06 |
공유기 기능 - 고급기능2 ( DMZ ) (0) | 2010.03.17 |
공유기 기능 - 고급기능1 ( 포트포워딩 ) (0) | 2010.03.03 |
공유기 - 기본지식편 (0) | 2010.02.25 |
브리지와 스위치의 차이점 (1) | 2009.12.18 |
OSI 7 layer 설명 (2) | 2009.12.18 |
2009. 11. 24. 13:21
27. CentOS 에서의 한글 설정
2009. 11. 24. 13:21 in 내가쓰는리눅스 강좌
일단 기본적으로 CentOS 를 설치하게 되면
기본 언어를 영어로 설정했다면 쉘 역시 영어로 설정이 된다.
이것을 아예 한글로 변경하거나 또는 로그인쉘에서만 따로 한글로 사용하도록 설정하는 방법이 있다.
1. 시스템 전체의 언어를 한글로 변경
root 로 로그인 이후 /etc/sysconfig/i18n 파일을 아래와 같이 수정한다.
만약을 위해 다른 이름으로 백업을 해둔다음에 진행하자.
2. 로그인쉘 상에서의 특정 유저만 한글로 표현 ( 나머지 유저는 영어로 그대로 )
일단 그 유저의 특정유저로 로그인하고 나서 hidden file ( 숨김파일은 파일이름 앞에 점하나가 붙는다 ) 인
.bash_profile 안에 다음과 같은 라인을 추가시킨다.
( 숨김파일의 리스트를 보기 위해서는 ls -al 로 확인한다 )
그러면 그 유저로 로그인했을 때는 터미널 상에서 한글이 제대로 표현된다.
파일명이 한글인 경우 잘 표현되는지 확인하면 되겠다.
3. 파일질라 ( Filezilla ) 로 접속시 한글이 보이지 않거나 깨지는 현상
기본 언어를 영어로 설정했다면 쉘 역시 영어로 설정이 된다.
이것을 아예 한글로 변경하거나 또는 로그인쉘에서만 따로 한글로 사용하도록 설정하는 방법이 있다.
1. 시스템 전체의 언어를 한글로 변경
root 로 로그인 이후 /etc/sysconfig/i18n 파일을 아래와 같이 수정한다.
만약을 위해 다른 이름으로 백업을 해둔다음에 진행하자.
[root@localhost ~]# more /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
SUPPORTED="en_US.UTF-8:en_US.en:ko_KR.UTF-8:ko_KR.eucKR:ko_KR:ko"
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
SUPPORTED="en_US.UTF-8:en_US.en:ko_KR.UTF-8:ko_KR.eucKR:ko_KR:ko"
2. 로그인쉘 상에서의 특정 유저만 한글로 표현 ( 나머지 유저는 영어로 그대로 )
일단 그 유저의 특정유저로 로그인하고 나서 hidden file ( 숨김파일은 파일이름 앞에 점하나가 붙는다 ) 인
.bash_profile 안에 다음과 같은 라인을 추가시킨다.
( 숨김파일의 리스트를 보기 위해서는 ls -al 로 확인한다 )
그러면 그 유저로 로그인했을 때는 터미널 상에서 한글이 제대로 표현된다.
파일명이 한글인 경우 잘 표현되는지 확인하면 되겠다.
export LANG=ko_KR.eucKR
3. 파일질라 ( Filezilla ) 로 접속시 한글이 보이지 않거나 깨지는 현상
사이트관리자에서 <문자셋> 탭에서
<사용자정의문자셋 사용>을 클릭하고
아래 칸에 CP949 로 설정을 하고 다시 접속하면 한글이 잘 보이게 된다.
참고 : 파일질라 다운받는 곳은 www.filezilla-project.org
<사용자정의문자셋 사용>을 클릭하고
아래 칸에 CP949 로 설정을 하고 다시 접속하면 한글이 잘 보이게 된다.
참고 : 파일질라 다운받는 곳은 www.filezilla-project.org
'내가쓰는리눅스 강좌' 카테고리의 다른 글
리눅스 VNCSERVER 설정 방법 (3) | 2010.07.14 |
---|---|
텍스트 파일을 잘라보자. split (0) | 2010.05.31 |
리눅스 시스템의 부팅시 파일무결성 체크 강제로 하기 (0) | 2010.04.19 |
리눅스 dmesg 를 통한 eth 포트의 down / up 구분 (0) | 2010.03.30 |
28. CentOS 에서 yum 수행시 repo 사이트 추가 (0) | 2009.12.23 |
26. ethtool 사용하기 spped 와 duplex 변경 (6) | 2009.11.23 |
25. sort 명령어 (2) | 2009.11.05 |
24. tar 압축파일에 관해서 (0) | 2009.09.15 |
23. man 페이지 내용을 파일로 보자. (2) | 2009.04.23 |
22. lame : mp3 인코더 (0) | 2009.01.30 |
2009. 11. 23. 00:17
26. ethtool 사용하기 spped 와 duplex 변경
2009. 11. 23. 00:17 in 내가쓰는리눅스 강좌
ethtool 을 사용해서 네트워크 포트의 speed duplex autonego 를 조정할 수 있다.
[root@localhost ~]# ethtool eth1
Settings for eth1:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: No
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: off
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: no
[root@localhost ~]# ethtool -s eth1 speed 10 duplex full autoneg on
[root@localhost ~]# ethtool eth1
Settings for eth1:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Full
Advertised auto-negotiation: Yes
Speed: 10Mb/s
Duplex: Half
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: no
Settings for eth1:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: No
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: off
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: no
[root@localhost ~]# ethtool -s eth1 speed 10 duplex full autoneg on
[root@localhost ~]# ethtool eth1
Settings for eth1:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Full
Advertised auto-negotiation: Yes
Speed: 10Mb/s
Duplex: Half
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: no
여기서 ethtool 은 해당되는 네트워크 포트가 리눅스 커널에서 어떻게 인식되어서 동작하는지를 확인할 수 있다.
위의 방법은 임시로 적용이 된 것이고 OS가 리부팅되면 다시 초기화되어버리므로
아예 /etc/sysconfig/network-scripts 밑에 있는 ifcfg-eth0 파일에 아래 라인을 넣어줘서
OS가 리부팅되도 계속 적용이 되도록 할 수 있다.
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
ETHTOOL_OPTS="speed 100 duplex full autoneg off"
ETHTOOL_OPTS 의 안의 필드를 보면
speed 뒤의 숫자는 100 이면 100M 를 지정하고
1000 이면 1000M 즉 1G 를 정해준다.
네트워크 인터페이스 드라이버에 따라 저 옵션이 적용될 수도, 안 될 수도 있다.
그럴땐 mii-tool 이란 명령어로 되는지 확인 필요.
Duplex 값은 half 와 full 이 있는데 한국말로는 반이중 / 전이중 이런 어려운 용어가 있다.
하지만 Full 이 좋은 것은 당연지사.
마지막의 autoneg 는 auto-nego 를 스위치와 하지 않도록 off 한다는 의미이다.
보통 저렇게 리눅스 서버에서 자동협상 기능을 끈다면 스위치쪽에서도 동일한 speed 와 duplex 를 맞쳐서 사용하는 것이 정석이다.
저 서버에 연결된 상위의 스위치 ( 시스코이든 3COM 이든 ) 에서도 해당 포트에 static 으로 고정되게 speed 와 duplex 를 서버에 설정해준것과 동일하게 맞춰야 한다.
'내가쓰는리눅스 강좌' 카테고리의 다른 글
텍스트 파일을 잘라보자. split (0) | 2010.05.31 |
---|---|
리눅스 시스템의 부팅시 파일무결성 체크 강제로 하기 (0) | 2010.04.19 |
리눅스 dmesg 를 통한 eth 포트의 down / up 구분 (0) | 2010.03.30 |
28. CentOS 에서 yum 수행시 repo 사이트 추가 (0) | 2009.12.23 |
27. CentOS 에서의 한글 설정 (3) | 2009.11.24 |
25. sort 명령어 (2) | 2009.11.05 |
24. tar 압축파일에 관해서 (0) | 2009.09.15 |
23. man 페이지 내용을 파일로 보자. (2) | 2009.04.23 |
22. lame : mp3 인코더 (0) | 2009.01.30 |
21. 부팅시 실행레벨설정 ( X-window 로 또는 터미널으로) (2) | 2009.01.21 |
2009. 11. 5. 21:55
25. sort 명령어
2009. 11. 5. 21:55 in 내가쓰는리눅스 강좌
sort 는 파일을 정렬하거나 중복을 제거 할 수도 있는 강력한 명령어이다.
1. sort a.txt
2. sort -r a.txt
역순(오름차순) 으로 정렬
3. sort -k 2 a.txt
두번째 필드를 기준으로 내림차순으로 정렬
4. sort -u a.txt
내림차순으로 정렬하면서 중복된 라인을 제거
응용
5. sort -u -k 2 a.txt
두번째 필드 기준으로 내림차순 정렬하면서 중복라인 제거
6. sort -u -r -k 2 a.txt
두번째 필드 기준으로 오름차순 정렬하면서 중복라인 제거
'내가쓰는리눅스 강좌' 카테고리의 다른 글
리눅스 시스템의 부팅시 파일무결성 체크 강제로 하기 (0) | 2010.04.19 |
---|---|
리눅스 dmesg 를 통한 eth 포트의 down / up 구분 (0) | 2010.03.30 |
28. CentOS 에서 yum 수행시 repo 사이트 추가 (0) | 2009.12.23 |
27. CentOS 에서의 한글 설정 (3) | 2009.11.24 |
26. ethtool 사용하기 spped 와 duplex 변경 (6) | 2009.11.23 |
24. tar 압축파일에 관해서 (0) | 2009.09.15 |
23. man 페이지 내용을 파일로 보자. (2) | 2009.04.23 |
22. lame : mp3 인코더 (0) | 2009.01.30 |
21. 부팅시 실행레벨설정 ( X-window 로 또는 터미널으로) (2) | 2009.01.21 |
20 . SSH 터미널의 프롬프트에서 절대경로 표시법 (0) | 2009.01.20 |
2009. 11. 5. 21:31
13. 파일 비교 스크립트 4
2009. 11. 5. 21:31 in 쉘스크립트
원본 파일(a.txt)에서 특정한 파일의 숫자들(b.txt) 을 뺀 나머지 라인들을 구하는 것
우선 원본 파일 변경되므로 원본파일은 다른 이름으로 변경시켜 놓는다.
반복문이 몇번 실행되었는지 체크하기 위한 count 변수 지정
원본 a.txt 파일을 a.txt_org 으로 백업한다.
(2) for mdn in `cat /home/bjh/homepcssn/test/b.txt | awk -F, '{print $1}'`
for 반복문을 사용
mdn 이란 변수에 b.txt 파일에서 숫자가 있는 필드만 awk 로 골라내어서 for 문을 사용해 차례로 입력하도록 한다
( 나중에는 cat 부분만 변경해서 사용 / 숫자만 있는 파일이면 cat 만 써도 됨 )
awk 에서 -F 옵션은 구분자를 지정할때 사용 ( 지정하지 않으면 빈칸으로 필드 구분 )
즉 쉼표(,) 로 구분했을때 첫번째 필드가 숫자가 되기 때문에 사용
여기서 $mdn 이란 변수에는 숫자(전화번호) 만 들어간다
(3) sed -e "/"$mdn"/d" $dir/aa.txt > $dir/imsy.txt
변수 mdn이 포함된 라인만 지운 나머지 모든 라인을 임시파일 imsy.txt 파일에 저장한다.
(4) cat imsy.txt > a.txt
임시파일을 원본 a.txt 에 덮어쓴다
이때 첫번재 mdn 값을 제외한 모든 라인이 a.txt 에 덮어쓴다.
(5) count=`expr $count + 1`
반복문이 1번 반복될때마다 count 변수는 하나씩 증가한다.
(6) done
mdn 변수의 개수만큼 돌아가고 나서 반복문 종료
(7) echo "count is =" $count
반복문이 몇번 실행되었는지 확인
즉 mdn 변수가 몇번 변했는지도 알 수 있다.
즉 b.txt 에서 숫자가 몇라인이 들어있는지 알 수 있다
(8) rm $dir/imsy.txt
임시파일 삭제
우선 원본 파일 변경되므로 원본파일은 다른 이름으로 변경시켜 놓는다.
#!/bin/bash dir=$PWD count=0 cp $dir/a.txt $dir/a.txt_org for mdn in `cat $dir/b.txt | awk -F, '{print $1}'` do sed -e "/"$mdn"/d" $dir/a.txt > $dir/imsy.txt cat $dir/imsy.txt > $dir/a.txt count=`expr $count + 1` done echo "count is =" $count rm $dir/imsy.txt작업할 디렉토리 지정
반복문이 몇번 실행되었는지 체크하기 위한 count 변수 지정
원본 a.txt 파일을 a.txt_org 으로 백업한다.
(2) for mdn in `cat /home/bjh/homepcssn/test/b.txt | awk -F, '{print $1}'`
for 반복문을 사용
mdn 이란 변수에 b.txt 파일에서 숫자가 있는 필드만 awk 로 골라내어서 for 문을 사용해 차례로 입력하도록 한다
( 나중에는 cat 부분만 변경해서 사용 / 숫자만 있는 파일이면 cat 만 써도 됨 )
awk 에서 -F 옵션은 구분자를 지정할때 사용 ( 지정하지 않으면 빈칸으로 필드 구분 )
즉 쉼표(,) 로 구분했을때 첫번째 필드가 숫자가 되기 때문에 사용
여기서 $mdn 이란 변수에는 숫자(전화번호) 만 들어간다
(3) sed -e "/"$mdn"/d" $dir/aa.txt > $dir/imsy.txt
변수 mdn이 포함된 라인만 지운 나머지 모든 라인을 임시파일 imsy.txt 파일에 저장한다.
(4) cat imsy.txt > a.txt
임시파일을 원본 a.txt 에 덮어쓴다
이때 첫번재 mdn 값을 제외한 모든 라인이 a.txt 에 덮어쓴다.
(5) count=`expr $count + 1`
반복문이 1번 반복될때마다 count 변수는 하나씩 증가한다.
(6) done
mdn 변수의 개수만큼 돌아가고 나서 반복문 종료
(7) echo "count is =" $count
반복문이 몇번 실행되었는지 확인
즉 mdn 변수가 몇번 변했는지도 알 수 있다.
즉 b.txt 에서 숫자가 몇라인이 들어있는지 알 수 있다
(8) rm $dir/imsy.txt
임시파일 삭제
최종 파일 비교 스크립트 -> http://darkrang.tistory.com/219
'쉘스크립트' 카테고리의 다른 글
파일 라인안에 앞에 내용 추가 / 맨뒤에 내용 추가 방법 (0) | 2011.06.17 |
---|---|
파일비교 스크립트 5 (2) | 2010.05.25 |
파일들의 확장자만 변경 (0) | 2010.04.22 |
15. 텍스트 파일 포맷 변경 (2) | 2009.12.22 |
14. 지난 파일 압축하고 삭제하기 (2) | 2009.12.18 |
12. 파일 개수 비교해서 삭제하는 스크립트 (3) | 2009.10.21 |
11. SSH 접속 차단 스크립트 ( 5번 패스워드 틀리면 자동 차단) (2) | 2009.09.19 |
10. 파일비교 스크립트2 (3) | 2009.09.18 |
9. 여러 파일 하나의 txt 파일로 합치기 스크립트 (3) | 2009.09.10 |
8. 파일 내용 비교1 (3) | 2009.09.10 |
2009. 10. 21. 17:12
12. 파일 개수 비교해서 삭제하는 스크립트
2009. 10. 21. 17:12 in 쉘스크립트
같은 디렉토리에 쌓이는 파일 개수를 count 해서 특정한 값
이상이 되면 예전 파일 부터 삭제하는 스크립트
(1) ls -l | grep PFX_COUNT | wc -l > A.txt
DIR 위치에 있는 파일들 중에서 PFX_COUNT 란 이름을 가진 파일들의 개수를 A.txt 에 저장
(2) A=`cat $DIR/A.txt`
A라는 변수에 그 개수를 저장
(3) if [ $A -lt 3 ]
만약 그 값이 3 보다 작다면 바로 아래 라인으로 이동해서 그 다음 명령 수행
만약 3보다 크면 else 밑의 명령들을 수행
(4) ls -lt | grep PFX_COUNT > $DIR/imsy.txt
sed '1,3d' $DIR/imsy.txt | awk '{print $9}' > $DIR/imsy2.txt
cat $DIR/imsy2.txt
PFX_COUNT 가 포함된 파일의 리스트를 imsy2.txt 에 저장
(5) for test in `cat $DIR/imsy2.txt`
do
rm -rf $test
done
for 문으로 돌리면서 삭제해준다.
(6) 기타 임시txt 파일들을 삭제함
이상이 되면 예전 파일 부터 삭제하는 스크립트
#!/bin/bash
DIR=$PWD
ls -l | grep PFX_COUNT | wc -l > A.txt
A=`cat $DIR/A.txt`
echo $A
if [ $A -lt 3 ]
then
echo "Count is low"
else
echo "Count is high"
ls -lt | grep PFX_COUNT > $DIR/imsy.txt
sed '1,3d' $DIR/imsy.txt | awk '{print $9}' > $DIR/imsy2.txt
cat $DIR/imsy2.txt
for test in `cat $DIR/imsy2.txt`
do
rm -rf $test
done
fi
rm -rf $DIR/imsy.txt
rm -rf $DIR/imsy2.txt
rm -rf $DIR/A.txt
DIR=$PWD
ls -l | grep PFX_COUNT | wc -l > A.txt
A=`cat $DIR/A.txt`
echo $A
if [ $A -lt 3 ]
then
echo "Count is low"
else
echo "Count is high"
ls -lt | grep PFX_COUNT > $DIR/imsy.txt
sed '1,3d' $DIR/imsy.txt | awk '{print $9}' > $DIR/imsy2.txt
cat $DIR/imsy2.txt
for test in `cat $DIR/imsy2.txt`
do
rm -rf $test
done
fi
rm -rf $DIR/imsy.txt
rm -rf $DIR/imsy2.txt
rm -rf $DIR/A.txt
(1) ls -l | grep PFX_COUNT | wc -l > A.txt
DIR 위치에 있는 파일들 중에서 PFX_COUNT 란 이름을 가진 파일들의 개수를 A.txt 에 저장
(2) A=`cat $DIR/A.txt`
A라는 변수에 그 개수를 저장
(3) if [ $A -lt 3 ]
만약 그 값이 3 보다 작다면 바로 아래 라인으로 이동해서 그 다음 명령 수행
만약 3보다 크면 else 밑의 명령들을 수행
(4) ls -lt | grep PFX_COUNT > $DIR/imsy.txt
sed '1,3d' $DIR/imsy.txt | awk '{print $9}' > $DIR/imsy2.txt
cat $DIR/imsy2.txt
PFX_COUNT 가 포함된 파일의 리스트를 imsy2.txt 에 저장
(5) for test in `cat $DIR/imsy2.txt`
do
rm -rf $test
done
for 문으로 돌리면서 삭제해준다.
(6) 기타 임시txt 파일들을 삭제함
'쉘스크립트' 카테고리의 다른 글
파일비교 스크립트 5 (2) | 2010.05.25 |
---|---|
파일들의 확장자만 변경 (0) | 2010.04.22 |
15. 텍스트 파일 포맷 변경 (2) | 2009.12.22 |
14. 지난 파일 압축하고 삭제하기 (2) | 2009.12.18 |
13. 파일 비교 스크립트 4 (2) | 2009.11.05 |
11. SSH 접속 차단 스크립트 ( 5번 패스워드 틀리면 자동 차단) (2) | 2009.09.19 |
10. 파일비교 스크립트2 (3) | 2009.09.18 |
9. 여러 파일 하나의 txt 파일로 합치기 스크립트 (3) | 2009.09.10 |
8. 파일 내용 비교1 (3) | 2009.09.10 |
스크립트 문제 (0) | 2009.06.01 |
2009. 9. 19. 15:27
11. SSH 접속 차단 스크립트 ( 5번 패스워드 틀리면 자동 차단)
2009. 9. 19. 15:27 in 쉘스크립트
1 #!/bin/bash
2 days=`date +%d`
3 savedir='/z_bjh/denylist'
4 for i in $( cat /var/log/secure | grep "Failed password for" | awk '$2 = $days {print $13}' | sort | uniq -c | awk '$1 > 5 {print $2}'); do
5 denyip=${i#::ffff:}
6 echo "ALL:$denyip" >> $savedir
7 done
8 for a in $( cat /etc/hosts.deny | grep "ALL : " | awk '{print $3}' | sort | uniq -c | awk '{print $2}'); do
9 echo "ALL : $a" >> $savedir
10 done
11 cp /etc/hosts.deny-before /etc/hosts.deny
12 for b in $( cat $savedir | grep "ALL : " | awk '{print $3}' | sort | uniq -c | awk '{print $2}'); do
13 echo "ALL : $b" >> /etc/hosts.deny
14 done
15 cat $savedir >> /etc/hosts.deny
16 rm -f $savedir
2 days=`date +%d`
3 savedir='/z_bjh/denylist'
4 for i in $( cat /var/log/secure | grep "Failed password for" | awk '$2 = $days {print $13}' | sort | uniq -c | awk '$1 > 5 {print $2}'); do
5 denyip=${i#::ffff:}
6 echo "ALL:$denyip" >> $savedir
7 done
8 for a in $( cat /etc/hosts.deny | grep "ALL : " | awk '{print $3}' | sort | uniq -c | awk '{print $2}'); do
9 echo "ALL : $a" >> $savedir
10 done
11 cp /etc/hosts.deny-before /etc/hosts.deny
12 for b in $( cat $savedir | grep "ALL : " | awk '{print $3}' | sort | uniq -c | awk '{print $2}'); do
13 echo "ALL : $b" >> /etc/hosts.deny
14 done
15 cat $savedir >> /etc/hosts.deny
16 rm -f $savedir
일단 이 스크립트를 작성하기 전에 한가지ㄱㅏ 필요하다
/etc/hosts.deny 를 /etc/hosts.deny-before 라고 하나 복사해야한다.
그리고 /z_bjh/denylist 라는 파일을 하나 만들어주어야 한다.( 디렉토리는 마음대로 수정 )
하도 예전에 인터넷 여기저기 보고 만들어놓은 것인지라 .
위에서는 라인번호를 같이 표시했다. ( 왜냐하면 저걸 그대로 복사하면 라인이 바뀌게 되고 그럼 스크립트가 실행이 안되므로 ㅋㅋ )
원리는 간단하다 /var/log/secure 파일을 읽어서 접속 Fail 메시지를 count 해서 그 아이피만 추출하여
/etc/hosts.deny 에 등록해주는 것이다.
상용서버에도 돌려봤는데 정말 리눅스 해킹시도는 엄청나다.
이걸 사용하든지 아예 /etc/hosts.deny 에 ALL:ALL 로 해놓고 접속하는 곳의 아이피를 /etc/hosts.allow 에
등록시켜 놓고 사용하는게 편하다 ^^ㅋ
(1) 실사용방법은 위의 스크립트를 deny_ip.sh 라고 작성하여 만들고
(2) /etc/hosts.deny 를 복사하여 /etc/hosts.deny_defore 라고 하나 만들어주고
(3) touch /z_bjh/denylist 라고 하나 만들어줌
사용되다가 실제로 5번이 틀리면 자동으로 /etc/hosts.deny 에 아이피가 등록되고 접속이 아예할 수 없게 된다.
5분마다 /var/log/secure 파일을 검색해서 다시 추가해준다.
만약 secure 파일이 지나가버려서 새로운 secure 파일로 생성될 때에는
초기화가 된다.
'쉘스크립트' 카테고리의 다른 글
파일들의 확장자만 변경 (0) | 2010.04.22 |
---|---|
15. 텍스트 파일 포맷 변경 (2) | 2009.12.22 |
14. 지난 파일 압축하고 삭제하기 (2) | 2009.12.18 |
13. 파일 비교 스크립트 4 (2) | 2009.11.05 |
12. 파일 개수 비교해서 삭제하는 스크립트 (3) | 2009.10.21 |
10. 파일비교 스크립트2 (3) | 2009.09.18 |
9. 여러 파일 하나의 txt 파일로 합치기 스크립트 (3) | 2009.09.10 |
8. 파일 내용 비교1 (3) | 2009.09.10 |
스크립트 문제 (0) | 2009.06.01 |
7. sed 란? (2) | 2009.03.31 |
2009. 9. 18. 13:57
10. 파일비교 스크립트2
2009. 9. 18. 13:57 in 쉘스크립트
이번에는 두개의 파일이 있고
A 라는 파일은 원본 파일로 데이터량이 많다
B 라는 파일은 A보단 양이 적다.
원하는 것은 A 에서 B 를 제외한 나머지의 데이터를 알고 싶다.
sdiff 라는 것은 아래와 같이 동작한다.
예를 들어 a.txt 에 1부터 8까지 넣고 b.txt 에 1부터 4까지 넣었다면 아래와 같이 나온다.
오른쪽의 < 표시는 a.txt 에는 존재하고 b.txt 에는 존재하지 않는 것이다.
A 라는 파일은 원본 파일로 데이터량이 많다
B 라는 파일은 A보단 양이 적다.
원하는 것은 A 에서 B 를 제외한 나머지의 데이터를 알고 싶다.
#!/bin/bash
A=/user1/si/z_bjh/a.txt
B=/user1/si/z_bjh/b.txt
sdiff $A $B > c.txt
sed -n "/</p" c.txt | awk '{print $1}' > d.txt
A=/user1/si/z_bjh/a.txt
B=/user1/si/z_bjh/b.txt
sdiff $A $B > c.txt
sed -n "/</p" c.txt | awk '{print $1}' > d.txt
sdiff 라는 것은 아래와 같이 동작한다.
두 텍스트 파일을 동시에 같이 보면서 그 차이점을 살펴보려면, 다음과 같이 합니다.
sdiff file1 file2
sdiff 명령은 두 파일을 각각 한 줄씩 서로 비교해 가면서, 두 파일의 내용을 모두 출력합니다.
그 줄이 서로 다른 경우는 | 기호, file1에만 있는 경우는 < 기호, file2에만 있는 경우는 > 기호, 두 줄이 서로 똑 같은 경우는 아무것도 없습니다
sdiff file1 file2
sdiff 명령은 두 파일을 각각 한 줄씩 서로 비교해 가면서, 두 파일의 내용을 모두 출력합니다.
그 줄이 서로 다른 경우는 | 기호, file1에만 있는 경우는 < 기호, file2에만 있는 경우는 > 기호, 두 줄이 서로 똑 같은 경우는 아무것도 없습니다
예를 들어 a.txt 에 1부터 8까지 넣고 b.txt 에 1부터 4까지 넣었다면 아래와 같이 나온다.
오른쪽의 < 표시는 a.txt 에는 존재하고 b.txt 에는 존재하지 않는 것이다.
sdiff a.txt b.txt
1 1
2 2
3 3
4 4
5 <
6 <
7 <
8 <
1 1
2 2
3 3
4 4
5 <
6 <
7 <
8 <
최종 파일 비교 스크립트 -> http://darkrang.tistory.com/219
'쉘스크립트' 카테고리의 다른 글
15. 텍스트 파일 포맷 변경 (2) | 2009.12.22 |
---|---|
14. 지난 파일 압축하고 삭제하기 (2) | 2009.12.18 |
13. 파일 비교 스크립트 4 (2) | 2009.11.05 |
12. 파일 개수 비교해서 삭제하는 스크립트 (3) | 2009.10.21 |
11. SSH 접속 차단 스크립트 ( 5번 패스워드 틀리면 자동 차단) (2) | 2009.09.19 |
9. 여러 파일 하나의 txt 파일로 합치기 스크립트 (3) | 2009.09.10 |
8. 파일 내용 비교1 (3) | 2009.09.10 |
스크립트 문제 (0) | 2009.06.01 |
7. sed 란? (2) | 2009.03.31 |
5. 날짜표시 (date) (0) | 2009.03.05 |
2009. 9. 15. 14:57
24. tar 압축파일에 관해서
2009. 9. 15. 14:57 in 내가쓰는리눅스 강좌
자 이젠 tar 파일을 보게 되는 순간 당황해하지 말고
단순히 (?) 압축파일이라고 생각하자. 윈도우에서 흔히 보던 zip 이라는 압축형식이 tar 로 달려졋을 뿐이다.
우선 tar 압축파일은 형식이 여러종류이며 그 때마다 푸는 방법도 달라져야 한다.
파일의 확장자를 우선 잘 보도록 하자
tar / tar.Z / tar.gz 등등 여러 파일이 있다.
구분을 해보면 tar 란 단순히 여러파일을 하나의 파일로 합치기만 했을 뿐이고,
그 외의 것들은 합친 하나의 tar 파일을 압축을 해놓은 것이다.
그런 파일들의 경우에는 우선 압축해제를 하고 나서 tar 를 풀어서 원래의 원본파일 여러개로 되돌리는 순서가 필요하다 .
예를 들어 tar 파일의 내용을 압축을 풀지 않고 보려면
tar -tvf TEST.tar
압축을 해제 하지 않고도 미리 tar 안의 어떤 파일들이 압축되어 있는지 확인이 가능하다.
첫번째로 tar 압축 그다음에 묶고 나서 풀어보자
만약 a.txt , b.txt, c.txt 라는 파일이 있다면
ls
a.txt b.txt c.txt
[bjh@localhost test2]$ tar cvf TEST.tar ./*.txt
./a.txt
./b.txt
./c.txt
[bjh@localhost test2]$ ls -ltr
합계 40
-rw-r--r-- 1 bjh users 3 12월 3 10:20 a.txt
-rw-r--r-- 1 bjh users 3 12월 3 10:21 b.txt
-rw-r--r-- 1 bjh users 4 12월 3 10:21 c.txt
-rw-r--r-- 1 bjh users 10240 12월 3 10:21 TEST.tar
[bjh@localhost test2]$ tar cvfz TEST.tar.gz ./*.txt
./a.txt
./b.txt
./c.txt
[bjh@localhost test2]$ ls -ltr
합계 48
-rw-r--r-- 1 bjh users 3 12월 3 10:20 a.txt
-rw-r--r-- 1 bjh users 3 12월 3 10:21 b.txt
-rw-r--r-- 1 bjh users 4 12월 3 10:21 c.txt
-rw-r--r-- 1 bjh users 10240 12월 3 10:21 TEST.tar
-rw-r--r-- 1 bjh users 161 12월 3 10:21 TEST.tar.gz
a.txt b.txt c.txt
[bjh@localhost test2]$ tar cvf TEST.tar ./*.txt
./a.txt
./b.txt
./c.txt
[bjh@localhost test2]$ ls -ltr
합계 40
-rw-r--r-- 1 bjh users 3 12월 3 10:20 a.txt
-rw-r--r-- 1 bjh users 3 12월 3 10:21 b.txt
-rw-r--r-- 1 bjh users 4 12월 3 10:21 c.txt
-rw-r--r-- 1 bjh users 10240 12월 3 10:21 TEST.tar
[bjh@localhost test2]$ tar cvfz TEST.tar.gz ./*.txt
./a.txt
./b.txt
./c.txt
[bjh@localhost test2]$ ls -ltr
합계 48
-rw-r--r-- 1 bjh users 3 12월 3 10:20 a.txt
-rw-r--r-- 1 bjh users 3 12월 3 10:21 b.txt
-rw-r--r-- 1 bjh users 4 12월 3 10:21 c.txt
-rw-r--r-- 1 bjh users 10240 12월 3 10:21 TEST.tar
-rw-r--r-- 1 bjh users 161 12월 3 10:21 TEST.tar.gz
세개의 텍스트파일이 하나의 tar 파일로 묶어진 것을 볼 수 있다.
( 압축이란 말은 잘 어울리지 않는다 ! 왜냐면 세개 파일의 크기를 더한 것이 tar 파일의 크기가 되기 때문에
실제로 압축이 일어난 것은 아니다. 그래서 묶는다란 표현을 난 더 좋아한다 )
그럼 압축을 해보도록 하자
압축하는 방식은 여러가지를 선택할 수 있다.
위에서 내렸던 명령어 중에 tar -cvfz 라는 명령어는 tar 로 우선 묶고 나서 gzip 으로 압축을 진행하는 것이다.
따로 따로 명령어를 두번 내려도 된다!
tar cvf TEST.tar ./*.txt
gzip TEST.tar
[root@localhost test4]# ls -l
total 0
-rw-r--r-- 1 root root 0 Dec 18 12:33 1.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 2.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 3.txt
[root@localhost test4]#
[root@localhost test4]# tar cvf TEST.tar ./*.txt
./1.txt
./2.txt
./3.txt
[root@localhost test4]#
[root@localhost test4]# ls -l
total 12
-rw-r--r-- 1 root root 0 Dec 18 12:33 1.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 2.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 3.txt
-rw-r--r-- 1 root root 10240 Dec 18 12:33 TEST.tar
[root@localhost test4]#
[root@localhost test4]# gzip TEST.tar
[root@localhost test4]#
[root@localhost test4]# ls -l
total 4
-rw-r--r-- 1 root root 0 Dec 18 12:33 1.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 2.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 3.txt
-rw-r--r-- 1 root root 142 Dec 18 12:33 TEST.tar.gz
total 0
-rw-r--r-- 1 root root 0 Dec 18 12:33 1.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 2.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 3.txt
[root@localhost test4]#
[root@localhost test4]# tar cvf TEST.tar ./*.txt
./1.txt
./2.txt
./3.txt
[root@localhost test4]#
[root@localhost test4]# ls -l
total 12
-rw-r--r-- 1 root root 0 Dec 18 12:33 1.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 2.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 3.txt
-rw-r--r-- 1 root root 10240 Dec 18 12:33 TEST.tar
[root@localhost test4]#
[root@localhost test4]# gzip TEST.tar
[root@localhost test4]#
[root@localhost test4]# ls -l
total 4
-rw-r--r-- 1 root root 0 Dec 18 12:33 1.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 2.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 3.txt
-rw-r--r-- 1 root root 142 Dec 18 12:33 TEST.tar.gz
위와 같이 tar 로 묶고 나서 gzip 으로 압축을 한 것을 볼 수 있다.
이렇게 압축된 것을 풀기 위해서는
tar xvf TEST.tar.gz 라고 입력한다.
[root@localhost test4]# tar -xvf TEST.tar.gz
./1.txt
./2.txt
./3.txt
[root@localhost test4]#
[root@localhost test4]# ls -l
total 4
-rw-r--r-- 1 root root 0 Dec 18 12:33 1.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 2.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 3.txt
-rw-r--r-- 1 root root 142 Dec 18 12:33 TEST.tar.gz
./1.txt
./2.txt
./3.txt
[root@localhost test4]#
[root@localhost test4]# ls -l
total 4
-rw-r--r-- 1 root root 0 Dec 18 12:33 1.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 2.txt
-rw-r--r-- 1 root root 0 Dec 18 12:33 3.txt
-rw-r--r-- 1 root root 142 Dec 18 12:33 TEST.tar.gz
위에서 tar cvfz 라는 옵션을 사용해서 tar로 묶고 다시 gunzip 으로 압축을 한것이 TEST.tar.gz 파일이다.
파일 크기를 비교해보면 tar.gz 파일이 훨씬 작다는 것을 알 수 있다.
### 이미 존재하는 tar 파일에 추가로 파일을 넣기
tar uvf test.tar ./A
test.tar 라는 파일에 추가로 A 라는 파일을 넣는 옵션은 -u 즉 update 옵션이다.
※ 유닉스에서 사용되는 tar.Z 파일 형식
아래는 유닉스에서 사용되는 압축으로 확장자 명은 tar.Z 파일이다.
이것은 tar 로 묶은뒤에 compress 라는 유틸을 사용해서 압축을 한 파일이다.
이것을 푸는 것은 유닉스에서 uncompress 라는 명령어로 풀수있다.
compress TEST.tar.Z TEST.tar
'내가쓰는리눅스 강좌' 카테고리의 다른 글
리눅스 dmesg 를 통한 eth 포트의 down / up 구분 (0) | 2010.03.30 |
---|---|
28. CentOS 에서 yum 수행시 repo 사이트 추가 (0) | 2009.12.23 |
27. CentOS 에서의 한글 설정 (3) | 2009.11.24 |
26. ethtool 사용하기 spped 와 duplex 변경 (6) | 2009.11.23 |
25. sort 명령어 (2) | 2009.11.05 |
23. man 페이지 내용을 파일로 보자. (2) | 2009.04.23 |
22. lame : mp3 인코더 (0) | 2009.01.30 |
21. 부팅시 실행레벨설정 ( X-window 로 또는 터미널으로) (2) | 2009.01.21 |
20 . SSH 터미널의 프롬프트에서 절대경로 표시법 (0) | 2009.01.20 |
19. 콘솔 모드에서의 해상도 조절 (1) | 2008.11.03 |
2009. 9. 10. 12:10
9. 여러 파일 하나의 txt 파일로 합치기 스크립트
2009. 9. 10. 12:10 in 쉘스크립트
#!/bin/bash
DIR="/user1/si/z_bjh/icms_data/"
A=`ls -l $DIR | awk '{print $9}'`
for i in `echo $A`
do
cat $DIR$i >> /user1/si/z_bjh/aa.txt
done
#echo "===== DONE !! ======="
DIR="/user1/si/z_bjh/icms_data/"
A=`ls -l $DIR | awk '{print $9}'`
for i in `echo $A`
do
cat $DIR$i >> /user1/si/z_bjh/aa.txt
done
#echo "===== DONE !! ======="
먼저 하나로 합칠 여러개의 파일들을 하나의 디렉토리에 넣는다
/user1/si/z_bjh/icms_data 에 모두 넣고
변수 A 에 ls -l $DIR | awk '{print $9}' 명령을 통해서 파일명만 추출해서 넣음
for 반복문으로
변수 i 에다가 변수A 가 계속적으로 반복되면서 하나씩 차례로 파일명을 넣을 것이고
cat $DIR$i >> /user1/si/z_bjh/aa.txt
aa.txt 라는 파일에 리다이렉트로 모든 파일의 내용을 계속적으로 넣는다.
------------
가장 쉬운 방법은 a.txt 와 b.txt 라는 두 개의 파일 있을 때
다음과 같이 리다이렉트를 사용해서 두개를 하나의 파일로 합치면 됩니다.
cat a.txt >> imsy.txt
cat b.txt >> imsy.txt
그런 다음에 중복된 것을 제거 하기 위해서 sort -u imsy.txt > imsy2.txt 라고 하면
마지막에 imsy2.txt 라는 파일 최종적으로 나오게 된다 ^^
참고로 필드별로 sort 하는 방법은 이전 글에 적어놓았음 --> [내가쓰는리눅스 강좌] - 25. sort 명령어
'쉘스크립트' 카테고리의 다른 글
14. 지난 파일 압축하고 삭제하기 (2) | 2009.12.18 |
---|---|
13. 파일 비교 스크립트 4 (2) | 2009.11.05 |
12. 파일 개수 비교해서 삭제하는 스크립트 (3) | 2009.10.21 |
11. SSH 접속 차단 스크립트 ( 5번 패스워드 틀리면 자동 차단) (2) | 2009.09.19 |
10. 파일비교 스크립트2 (3) | 2009.09.18 |
8. 파일 내용 비교1 (3) | 2009.09.10 |
스크립트 문제 (0) | 2009.06.01 |
7. sed 란? (2) | 2009.03.31 |
5. 날짜표시 (date) (0) | 2009.03.05 |
4. 기본 루프문 (while) (0) | 2009.03.04 |
2009. 9. 10. 11:10
8. 파일 내용 비교1
2009. 9. 10. 11:10 in 쉘스크립트
mdn 이란 변수에 전화번호 9천개가 들어있는 파일로 cat 으로 일일이 하나씩 불러오게 함
#!/bin/bash
dir=/user1/si/z_bjh
for mdn in `cat /user1/si/z_bjh/icms_err`
do
sed -n "/"$mdn"/p" $dir/b.txt >> $dir/c.txt
done
dir=/user1/si/z_bjh
for mdn in `cat /user1/si/z_bjh/icms_err`
do
sed -n "/"$mdn"/p" $dir/b.txt >> $dir/c.txt
done
그런다음에 b.txt 에 있는 내용중에서 mdn 변수에 있는 전화번호가 있는 라인만 sed 로 뽑아서 c.txt 에 저장하는 것
참고로 필요한 mdn 번호만 정리하기 위해서 cut -c 옵션으로 문자열의 수만 따로 뽑음
물론 awk 를 사용할 수도 있지만 구분필드가 명확하지 않아서 ㅡㅡㅋ
cut -c 21-31 c.txt >> d.txt
21번째 문자부터 31번째 문자까지만 뽑아서 d.txt 에 저장
'쉘스크립트' 카테고리의 다른 글
14. 지난 파일 압축하고 삭제하기 (2) | 2009.12.18 |
---|---|
13. 파일 비교 스크립트 4 (2) | 2009.11.05 |
12. 파일 개수 비교해서 삭제하는 스크립트 (3) | 2009.10.21 |
11. SSH 접속 차단 스크립트 ( 5번 패스워드 틀리면 자동 차단) (2) | 2009.09.19 |
10. 파일비교 스크립트2 (3) | 2009.09.18 |
9. 여러 파일 하나의 txt 파일로 합치기 스크립트 (3) | 2009.09.10 |
스크립트 문제 (0) | 2009.06.01 |
7. sed 란? (2) | 2009.03.31 |
5. 날짜표시 (date) (0) | 2009.03.05 |
4. 기본 루프문 (while) (0) | 2009.03.04 |
2009. 8. 13. 10:31
[노을의시집] 10. 낮은 계단으로
2009. 8. 13. 10:31
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
내용을 보시려면 비밀번호를 입력하세요.
2009. 8. 13. 10:24
[노을의시집] 9. 기다림
2009. 8. 13. 10:24
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
내용을 보시려면 비밀번호를 입력하세요.
2009. 8. 13. 10:22
[노을의시집] 8. 그대 한번의 웃음이.......
2009. 8. 13. 10:22
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
내용을 보시려면 비밀번호를 입력하세요.
2009. 8. 13. 10:21
[노을의시집] 7. 새로움.......
2009. 8. 13. 10:21
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
내용을 보시려면 비밀번호를 입력하세요.
2009. 8. 13. 10:20
[노을의시집] 6. 그대가 나에게 ...
2009. 8. 13. 10:20
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
내용을 보시려면 비밀번호를 입력하세요.
2009. 8. 12. 08:42
[노을의시집] 5. 소중한 것은 ...
2009. 8. 12. 08:42
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
내용을 보시려면 비밀번호를 입력하세요.
2009. 8. 12. 08:42
[노을의시집] 4. 조지윈스턴
2009. 8. 12. 08:42
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
내용을 보시려면 비밀번호를 입력하세요.
2009. 8. 12. 08:40
[노을의시집] 3. 천년의 사랑이 아니어도 ...
2009. 8. 12. 08:40
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
내용을 보시려면 비밀번호를 입력하세요.
2009. 7. 29. 03:18
[노을의시집] 2. 전 지금까지
2009. 7. 29. 03:18 in 카테고리 없음
전 지금까지
제 마음속의「나」를 발견하고 키우러 애써왔습니다
하지만 만약 . . .
내 마음속에 있는 「나」가 없어진다면
그 땐 과연 누가 남아있을까? 하고
한 번 생각해 보았습니다.
그러면 그 땐
바로 당신이 남아있었습니다.
제가 찾으려 했던 것은
「나」자신이 아니라
바로 당신이 아닐지도 모릅니다
전 지금까지 당신에 대한 확신을 기지고서야
당신에게 말하려 이제껏 준비해 왔습니다.
하지만 만약 . .
확신을 가졌을 때는
이미 늦을런지도 모른다는 생각을 했습니다.
그래서 지금 저는
당신에게 「사랑한다」라는 말을 하기 위해 달려가고
있습니다.
또 다시 제 마음을 잃어버리긴 싫으니까요.