'Linux/Tip'에 해당되는 글 8건

  1. 2011.01.25 [Shell Script] Log 디렉토리 삭제
  2. 2010.03.23 ubuntu 9.10 sound... Dummy output problem.
  3. 2010.01.06 우분투 / 데비안 계열 고정 ip 설정 4
  4. 2009.12.12 diff and patch in linux
  5. 2009.08.31 vi 문자열 치환 2
  6. 2009.08.25 Ubuntu 한국 업데이트(kr.archive.ubuntu.com) 미러 접속문제.. 1
  7. 2009.03.18 예쁜 쉘 프롬프트 1
  8. 2008.04.24 리눅스 IP 설정
2011. 1. 25. 13:57

[Shell Script] Log 디렉토리 삭제



쌓여만 가는 로그때문에 하드 용량의 압박을 받을 때가 종종 생긴다.
어차피 로그는 어떠한 이벤트(사고)가 발생했을 때 전 후로 참조할 부분만 있으면 되지..
몇달이고 몇년이고 로그를 보물단지처럼 간직하고 있을 필요는 없을듯..

1달 정도의 로그만 유지하기 위한 간단한 스크립트다

#!/bin/sh
LOG_DIR=~/test/src/log
DELETE_LOG=`date +%Y%m%d --date '1 month ago'`

if [ -d $LOG_DIR/$DELETE_LOG ]; then
    rm -rf $LOG_DIR/$DELETE_LOG
else
    echo "There's no logs..."
fi

오늘 날짜를 기준으로 해서 1달 전의 로그 디렉토리를 지운다.

'logrotate' 라는 녀석을 살펴보았는데.. 이 녀석은 file 로 된 로그에 한해서 사용되는 모양이다.
자세한 것은 더 살펴봐야 하겠지만..

2010. 3. 23. 01:10

ubuntu 9.10 sound... Dummy output problem.



우분투 9.10 을 설치하곤 여태껏 한번도 소리가 안들린다고 생각한 적이 없었다...
오늘 유투브에서 동영상을 보려 헤드폰을 사용하기 전까지는.. -_-;

사운드 카드 아이콘에 마우스를 가져가니 "Dummy output"이란다...

일단 해결 방법을 찾았고, 지금은 사운드 자~알 나온다 ^^;

해결방법..

$ sudo update-grub

$ sudo apt-get remove --purge alsa-base
$ sudo apt-get remove --purge pulseaudio
$ sudo apt-get install alsa-base
$ sudo apt-get install pulseaudio
$ sudo alsa force-reload

$ sudo reboot

참고 웹 페이지..
http://ubuntuforums.org/showthread.php?p=8267482


2010. 1. 6. 14:00

우분투 / 데비안 계열 고정 ip 설정



우분투나 데비안에서 고정 ip를 설정하는 방법이다.
데비안의 경우 설치 시 ip를 설정할 수 있지만, 우분투의 경우는 DHCP로 잡히기 때문에.. 필요에 따라 다시 설정을 해 주어야 한다.

먼저 네트워크 인터페이스를 내린다(중지 시킨다).
$ sudo ifdown eth0

네트워크 인터페이스 설정 파일을 자신의 상황에 맞게 수정한다.
$sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0
broadcase 192.168.0.255
gateway 192.168.0.1
dns-nameservers 168.126.63.1 168.126.63.2

네임 서버를 수정한다.
$ sudo vi /etc/resolv.conf
nameserver 168.126.63.1
nameserver 168.126.63.2

네트워크 인터페이스를 올린다(다시 동작 시킨다).
$ sudo ifup eth0


ip 를 자동으로 할당받고 싶다면, '/etc/network/interfaces' 에서 iface eth0 inet static 이하의 부분을 iface eth0 inet dhcp 로 수정해 주면 된다.


2009. 12. 12. 22:50

diff and patch in linux



'diff'는 두 파일간의 차이를 보여주는 프로그램이다.
원본 파일이 있고, 그 파일을 수정한 다른 파일이 있다면 그 파일간의 바뀐점이 무엇인지 알고 싶을 때 사용할 수 있다. 혹은 여러사람이 작업을 할 때 기존의 파일을 수정하였을 때 어떤 부분이 바뀌었는지도 확인 할 수 있다.

아래와 같이 diff 라면 명령어를 사용하여 확인 할 수 있다.
$ diff a파일 b파일

변화가 있는 부분을 파일로 저장하기 위해선..
$ diff a파일 b파일 > 파일.diff
혹은
$ diff -u a파일 b파일 > 파일.diff
을 사용할 수 있다.

diff 사용 예...
$ vi hello.c
#include <stdio.h>

void main()
{
    printf(hello);
}

$ vi hello2.c
#include <stdio.h>

int main(int argc, char **argv)
{
    printf("hello \n");
    return 0;
}

$ diff -u hello.c hello2.c > hello.diff
$ cat hello.diff
--- hello.c 2009-12-12 21:46:38.000000000 +0900
+++ hello2.c    2009-12-12 21:48:32.000000000 +0900
@@ -1,6 +1,7 @@
#include <stdio.h>

-void main()
+int main(int argc, char **argv)
{
-    printf(hello);
+    printf("hello \n");
+    return 0;
}

디렉토리를 비교하려면,
$ diff -urN A디렉토리 B디렉토리


'patch' 는 diff 명령을 통해 만들어진 파일을 적용하는 명령이다.
위에서 작성한 hello.c 파일과 hello2.c 파일의 바뀐점이 diff 명령을 통해 hello.diff 파일에 적용되고, hello.diff 파일을 사용하여 hello.c파일을 hello2.c파일과 동일하게 패치 한다.
$ patch -p0 < hello.diff
위와 같이 패치를 하게 되면, hello.c 파일이 hello2.c 와 동일한 파일로 패치되어 있는 것을 확인할 수 있다.

patch 에서 'p0'라는 옵션이 있는데.. 이 옵션은 diff를 할 때 파일이 놓인 경로의 깊이를 나타내는 것으로 볼 수 있다. 위의 diff 명령은 동일한 디렉토리 내에서 파일을 diff 한 것이지만, 일반적으로 프로젝트를 하게 되면 동일한 디렉토리가 아닌 project1/ project2/ 와 같이 다른 디렉토리도 작업을 하게 될 것이다.
$ diff -urN project1/ project2/ > project.diff
$ cat project.diff
diff -urN project1/hello.c project2/hello.c
--- project1/hello.c
+++ project2/hello.c
...

$ cp project.diff project1/
$ cd project1
$ patch -p1 < project.diff

위처럼 경로명이 몇단계로 이루어지느냐에 따라 p0, p1, .. 을 결정 할 수 있게 된다.
경로명을  몇꺼풀 벗길 것인가.. 라는 얘기이다.
위의 예처럼 -p0 옵션을 사용하면, 한 꺼풀도 안벗기고 패치한다. 동일한 디렉토리위 내용을 패치한다고 할 수 있다.  위의 예와 같이 하면 -p1 옵션을 사용해서 패치하게 된다.


2009. 8. 31. 10:07

vi 문자열 치환



'vi 에서 문자열을 편하게 바꾸고 싶다. '

그간 바꾸고자 원하는 단어나 문자열을 지우고 바꾸는 단순 무식한 방법을 사용했다. 가장 간단하고 쉬우니깐!!
하지만, 여러개의 동일한 단어나 문자열을 다른 동일한 단어나 문자열로 바꾼다고 했을 때.. 그간 사용했던 방법은 정말 왕 무식한 방법이다.

사용법은 의외로 간단하다.
:%s/기존 문자열/바꿀 문자열/g

예를 들어 babo라는 문자열을 baba로 바꾸고 싶다면..
:%s/babo/baba/g
라고 하게 되면, vi 로 열고 있는 문서의 모든  babo라는 문자열을 baba로 바꾸게 된다.

아래는 문자열을 치환하고자하는 방법에 따라 몇가지 종류를 나열한 것이다.
필요할 때 참고하면 될듯..
:s/기존 문자열/바꿀 문자열/             - 커서가 있는 행에서 처음 나오는 기존 문자열을 바꿀 문자열로 치환
:s/기존 문자열/바꿀 문자열/g           - 커서가 있는 행에 나오는 모든 기존 문자열을 바꿀 문자열로 치환
:%s/기존 문자열/바꿀 문자열/g        - 전체 내용에서 기존 문자열을 바꿀 문자열로 치환
:%s/기존 문자열/바꿀 문자열/gc      - 전체 내용에서 기존 문자열을 바꿀 문자열로 치환, 치환시 확인
:1,20s/기존 문자열/바꿀 문자열        - 1~20 행에서 처음 나오는 기존 문자열을 바꿀 문자열로 치환
:1,20s/기존 문자열/바꿀 문자열/g     - 1~20 행에 나오는 모든 기존 문자열을 바꿀 문자열로 치환
:-2, +4s/기존 문자열/바꿀 문자열/    - 커서 위 2, 아래 4행 중 처음 나오는 기존 문자열을 바꿀 문자열로 치환
:-2, +4s/기존 문자열/바꿀 문자열/g  - 커서 위 2, 아래 4행에 나오는 모든 기존 문자열을 바꿀 문자열로 치환

더 많은 내용은 'KLDP의 vi, vim 활용에 관한 문서'를 참조하면 될 듯 하다.

'Linux > Tip' 카테고리의 다른 글

우분투 / 데비안 계열 고정 ip 설정  (4) 2010.01.06
diff and patch in linux  (0) 2009.12.12
Ubuntu 한국 업데이트(kr.archive.ubuntu.com) 미러 접속문제..  (1) 2009.08.25
예쁜 쉘 프롬프트  (1) 2009.03.18
리눅스 IP 설정  (0) 2008.04.24
2009. 8. 25. 10:22

Ubuntu 한국 업데이트(kr.archive.ubuntu.com) 미러 접속문제..



"apt-get" 로 우분투 업데이트를 할때면 "한국 업데이트 미러(kr.archive.ubuntu.com)"에 정상적으로 접속하지 못하는 경우가 종종 발생하곤 한다.
뭐.. 될 때도 있고, 안될 때도 있고..

이참에 쫌 귀찮은걸 감안하고 업데이트 미러를 바꿔버렸다.
우분투 소스리스트(/etc/apt/source.list)를 열어 수정을 해준다.
http://kr.archive.ubuntu.com 이라고 된 부분을  http://ftp.daum.net 로만 바꾸어주면 된다.

$ sudo vi /etc/apt/source.list

수정 후 저장하고 apt-get update를 해보면 정상적으로 동작하는 것을 확인할 수 있다.

다음이니깐 서버가 다운되는 일은 없겠지?? ^^;


'Linux > Tip' 카테고리의 다른 글

우분투 / 데비안 계열 고정 ip 설정  (4) 2010.01.06
diff and patch in linux  (0) 2009.12.12
vi 문자열 치환  (2) 2009.08.31
예쁜 쉘 프롬프트  (1) 2009.03.18
리눅스 IP 설정  (0) 2008.04.24
2009. 3. 18. 10:03

예쁜 쉘 프롬프트



예전에 쓰던 리눅스 쉘프롬프트를 다시 사용하고 싶어서 검색하던 도중 원하는 쉘 프롬프트에 대한 포스트를 예전에 같은 회사에서 일을 하셨던 훌륭한 강과장님의 블로그에서.. ^^; 발견할 수 있었다.
하기야.. 이분이 쓰던것을 따라 사용했었으니깐.. 당연한 것인가?

대략 이런 모습을 한 쉘 프롬프트이다. 예쁘당~


사용하려면 다음과 같이 설정을 해주면 된다.

.prompt 라는 녀석을 하나 만들어 준다. 뭐 다른 이름이라도 상관은 없지.. -_-
$ vi .prompt
## color variables
         RED="\[\033[0;31m\]"
       GREEN="\[\033[0;32m\]"
        BLUE="\[\033[0;34m\]"
        CYAN="\[\033[0;36m\]"
     MAGENTA="\[\033[0;35m\]"
      YELLOW="\[\033[0;33m\]"
       BLACK="\[\033[0;30m\]"
        GRAY="\[\033[0;37m\]"
       WHITE="\[\033[0;38m\]"
   LIGHT_RED="\[\033[1;31m\]"
  LIGHT_GREEN="\[\033[1;32m\]"
  LIGHT_BLUE="\[\033[1;34m\]"
  LIGHT_CYAN="\[\033[1;36m\]"
LIGHT_MAGENTA="\[\033[1;35m\]"
LIGHT_YELLOW="\[\033[1;33m\]"
  LIGHT_WHITE="\[\033[1;37m\]"
    NO_COLOR="\[\033[0m\]"

HOSTNAME_SHORT=${HOSTNAME%%.*}
TTY=$(tty); TTY=${TTY#/dev/}

## set shell prompt
shopt -s checkwinsize
PROMPT_UPDATE() {
   case "$PWD" in
       $HOME*) PWD_SHORT="${PWD/$HOME/~}" ;;
       *)      PWD_SHORT="$PWD" ;;
   esac
   PS1="($LOGNAME@$TTY@$HOSTNAME_SHORT)-($PWD_SHORT)"
   if [ ! -n "$COLUMNS" ]; then
       local fillsize=0
   else
       local fillsize=$((${COLUMNS}-${#PS1}))
   fi
   local fill=""
   if [ $fillsize -gt 0 ]; then
       while [ $((${#PROMPT_FILL})) -lt ${COLUMNS} ]; do
           PROMPT_FILL="$PROMPT_FILL-"
       done
       fill="${PROMPT_FILL:0:${fillsize}}"
   elif [ $fillsize -lt 0 ]; then
       fill=""
       local prefix=${PWD_SHORT:0:5}
       local PWD_SHORT="$prefix..${PWD_SHORT:$((2+${#prefix}-${fillsize}))}"
   fi
   PS1="\
$NO_COLOR($RED$LOGNAME$NO_COLOR@$GREEN$TTY$NO_COLOR@$BLUE$HOSTNAME_SHORT$NO_COLOR)$CYAN-$fill$NO_COLOR($MAGENTA$PWD_SHORT$NO_COLOR)$NO_COLOR\r\n($YELLOW\#$NO_COLOR)\\$ "
}

## set PROMPT_COMMAND
PROMPT_COMMAND=PROMPT_UPDATE
PS2="> "
PS4="+ "

## append a xterm's dynamic title command for some terminal types
case $TERM in
   xterm* | cygwin* | screen* | vt*)
   ## Xterm Title
   XTERM_TITLE() {
       echo -ne "\033]0;"
       [ "$LOGNAME" != "netj" ] && echo -n $LOGNAME@
       echo -n $HOSTNAME_SHORT: $PWD_SHORT
       echo -ne "\007"
   }
   # change Xterm title
   export PROMPT_COMMAND="$PROMPT_COMMAND; XTERM_TITLE"
   ;;
esac

# set PROMPT_DATE if not set
# from 2.05b, bash supports custom date formats with \D{...}
PROMPT_DATE=${PROMPT_DATE:-"`date '+%Y-%m-%d %a %T'`"}
PROMPT_DATEFMT=${PROMPT_DATEFMT:-"\D{$CYAN%Y-%m-%d $MAGENTA%a} $NO_COLOR\t"}

바로 확인해 보려면...
$ . .prompt
해주면 바뀐 프롬프트를 확인할 수 있을 것이다.

추가로 쉘에 로그인 시 자동으로 예쁜 프롬프트를 보고 싶다면.. .bashrc의 마지막 부분에 아래의 내용을 추가해면 된다.
$ vi .bashrc
...
if [ -f $HOME/.prompt ]; then
       . $HOME/.prompt
fi

그냥 보고만 있어도 흐뭇하다 ㅋㅋㅋ

추가로 쉘 프롬프트에 관련된 내용은 http://www.haansoftlinux.com/magazine/magazineView.php?no=1006&page=0&catalog=1 에서 참고할 수 있다.


'Linux > Tip' 카테고리의 다른 글

우분투 / 데비안 계열 고정 ip 설정  (4) 2010.01.06
diff and patch in linux  (0) 2009.12.12
vi 문자열 치환  (2) 2009.08.31
Ubuntu 한국 업데이트(kr.archive.ubuntu.com) 미러 접속문제..  (1) 2009.08.25
리눅스 IP 설정  (0) 2008.04.24
2008. 4. 24. 15:32

리눅스 IP 설정



몇주전인가... 회사에 남는 기계에 리눅스를 설치 했다.
요즘 계속 Windows 기계에서만 작업을 해서 그런지.. 리눅스를 다시 만지고 싶어서 설치를 하긴 했지만.. 내부 아이피를 사용하는 입장이어서 뭐 별로 깔아놓구선 해본게 없다. -_-

여튼 남는 공인 아이피가 있다고 하여 IP세팅을 다시 해보았다.
집에서 할일 없을 때 가끔 접속 해서 이것 저것 해보고 싶은 마음에.. ^^;

참고로 현재 설치한 리눅스는 CentOS 5이고, 뭐 그렇다.
예전엔 계속 데비안 계열만 써봐서.. 이쪽은 잘 모른다면서.. 뭐 대충 비슷비슷 하겠지만.. ^^;

먼저 네트워크를 세팅한다.
# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost
GATEWAY=xxx.xxx.xxx.xxx

다음은 이더넷 관련 세팅...

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
BROACAST=xxx.xxx.xxx.255
HWADDR=xx:xx:xx:xx:xx:xx
IPADDR=xxx.xxx.xxx.xxx
NETMASK=255.255.255.xxx
NETWORK=xxx.xxx.xxx.0
ONBOOT=yes

마지막으로 네임서버 세팅이다.

# vi /etc/resolv.conf
nameserver xxx.xxx.xxx.xxx

이제 IP세팅은 끝이 난 것이고, network를 재시작해서 정상적으로 사용할 수 있다.

# /etc/init.d/network restart

'ifconfig' 명령으로 확인해 보면 현재 사용하는 기계의 네트워크 정보를 볼 수 있다.


'Linux > Tip' 카테고리의 다른 글

우분투 / 데비안 계열 고정 ip 설정  (4) 2010.01.06
diff and patch in linux  (0) 2009.12.12
vi 문자열 치환  (2) 2009.08.31
Ubuntu 한국 업데이트(kr.archive.ubuntu.com) 미러 접속문제..  (1) 2009.08.25
예쁜 쉘 프롬프트  (1) 2009.03.18