[모듈과 커널 버전]


커널의 버전 확인하는 방법 : /linux/version.h


#define UTS_RELEASE "2.6.14.6"

#define LINUX_VERSION_CODE 132622

#define KERNEL_VERSION(a, b, c) (((a) <<16) + ((b) <<8) + (c))


예제)

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)

MODULE_PARM(user_name, "char");

#else

MODULE_PARM(user_name, "s");

#endif


[모듈과 static 선언]


리눅스 커널은 커널전체가 하나의 프로그램이다. 그래서 기본적으로 (전역)함수나 전역 변수를 만들면 다른 모듈에서 접근이 가능하다. 그래서 이를 제어하기 위해서는 static 키워드를 적절히 사용해 주어야 한다.


공개된 함수나 변수등의 심볼들은 /proc/kallsyms에서 확인할 수 있다.


참고로, 2.6에서는 static없이 만들어신 함수는 자동으로 공개 되지 않는다.



by danguria 2012. 11. 23. 07:31

1. 설정 파일 위치

/etc/screenrc


2. 유용한 옵션

# turn visual bell on

vbell on

vbell_msg "   Wuff  ----  Wuff!!  "


by danguria 2012. 11. 21. 09:42

1. 2.6커널용 Hello_Module 작성


#include 
#include 
#include 

// init routine
int __init init_hello(void)
{
    printk(KERN_ALERT "[Module Message] Hello, Module.\n");
    return 0;
}

// finish routine
void __exit exit_hello(void)
{
    printk(KERN_ALERT "[Module Message] Do you realy want to break up with me?\n");
}

module_init(init_hello);
module_exit(exit_hello);

MODULE_LICENSE("GPL");

2. 2.6 모듈 빌드용 Make 파일



obj-m = hello_module.o
ARCH := arm
KDIR := /project/falinux/kernel/build_s5pv210
CROSS_COMPILE := arm-generic-linux-gnueabi-
PWD := $(shell pwd)

defaule:
        $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
        rm -rf *.ko
        rm -rf *.mod.*
        rm -rf .*.cm
        rm -rf *.o

3. 2.6커널에서 모듈 로드


insmod hello_module.ko

by danguria 2012. 11. 21. 07:21

arm에서 사용하는 cpu_info 구조체는 /arch/arm/include/asm/cpu.h

에 struct cpu_info_asm {...}으로 정의 되어 있다.


이 정보는 책과는 달라서 타겟의 proc/cpuinfo를 보려고 하였으나, proc파일시스템이 없는 것이다!!!!!

허걱....


그래서 FALINUX포럼에 가서 proc파일 시스템 만드는 법이 있길래 해보려고 했다..

하지만, 아직 실력이 부족해서 뭔 말인지 모르겠다.ㅠㅠㅠ


나중에 실력좀 쌓이면 타겟에 간단하게나마 proc파일 시스템을 올려 보아야 겠다.

by danguria 2012. 11. 19. 07:26

개발 환경 세팅


임베디드 보드에 개발을 하기 위해서는 개발환경 세팅을 좀 해주어야 합니다.

이 부분은 인터넷을 찾아보면 다양하게 나와 있어 저도 많이 참고 했습니다.


많이 이용하는 방법은.

윈도우가 설치된 PC, 가상OS로 리눅스(HOST), 개발보드(TARGET)를 갖춘 상태에서,

서로를 연결하기 위한 공유기(로컬네트워크를 구축해야지요..), tftp, samba, nfs 를 이용하여 개발환경우 갖추었습니다.


다만 제가 가장 OS상에서 네트워크 설정을 잘 못해서 노트북에 리눅스를 설치에 버렸습니다.(다행이 노는 노트북이 있었네요.ㅎㅎ)


자 그럼, 제가 어떻게 세팅했는지에 대한 개략도입니다..



by danguria 2012. 11. 11. 14:52

저는 학교에서 하드웨어에 의존적이지 않은 순수 소프트웨어 공부를 주로 해서 리눅스, 특히 하드웨어에 의존적인 부분에대해 잘 모릅니다. 회사에 들어오니 이런것들을 몰라서 힘든 부분이 있어 나름 공부를 해보고자 보드도 하나 사고, 리눅스 커널 책도 사서 공부를 하기 시작했습니다.(돈을 버니좋군요.ㅎㅎ)


제가 산 보드는 falinux에서 판매하는 G100-S5PV200입니다.(이런 숫자로된 이름 어려워요ㅠㅠ).

사실 리눅스 커널 공부하는데에 꼭 보드가 필요한것 같지는 않지만, 나중에 디바이스 드라이버도 공부해보고자 샀습니다.(사실 지름신때문이랍니다.ㅋㅋ)




잘못 사서 아까운 돈 날릴까봐 가장 싼것으로 샀습니다^^


자 그럼 오늘은 여기까지 하고 내일부터 개발환경 세팅부터 해볼까요?



by danguria 2012. 11. 11. 14:28
커맨드창에서 두개의 파일을 비교 하는 방법은

vimdiff a.c b.c

이렇게 바로 실행 할 수도 있고, 아래와 같이 실행 할 수도 있따.(수평 분할)

vim a.c
:diffs b.c   (:diffsplit b.c)

수직 분할하려 비교 하려면 아래와 같이 명령어를 사용하면 된다.
vim a.c
:vert diffs b.c   (:vertical diffsplit b.c)

이미 열러 있는 두개의 파일을 비교 할때는 아래 처럼 하면 된다.
vim a.c
:sp b.c
:diffthis 

실제로 vim은 실행시 몇 가지 모드 중 하나로 동작 하는 것이다. 즉, 실행시 readonly, vi compatible, diff mode등으로 전환 된다.


이제 부터는 비교하고 있는 파일의 내용을 편집하는 것을 알아 보도록 하자.
비교하는 파일의 편집이란, 한쪽의 내용을 다른쪽으로 copy하는 것이다.
:diffget
:diffset

위의 명령어는 현재 커서가 위치한 반대편의 내용으로 부터 가져오거나 보내는 것이다.
by danguria 2011. 5. 31. 20:09
1.  cscope설치 하기

여기서 scsope 실행 파일을 다운로드 받고 압축을 풀면 sort.exe cscope.exe 두개의 실행 파일이 나온다.
이 파일을 콘솔에서 실행하기 쉽게 하기 위해 환경변수에 path를 설정해 놓는다. 나의 경우에는 gvim.exe가 있는 곳에 두 파일을 옮기고 환경변수 설정을 하였다.



2. findutils 다운로드

cscope는 내부적으로 find 명령어를 이용한다. find명령어는 리눅스 명령어인데 윈도우즈에서 사용할 수 있는 프로그램이 있다. 이 findutils라는 프로그램을 다운로드 받아 설치하도록 하자.


3. scope DB정보 구축하기

cscope를 사용하기 전에 소스파일로 부터 DB정보를 구축해야 한다.
소스파일이 있는 디렉토리에서 가장 루트 디렉토리에서 아래 명령어를 실행한다.
$ cscope -b -R

결과로 "cscope.out" 이라는 파일이 생성된다.
그러나 이 결과는 C, Cpp파일만 분석하기 때문에 다른 소스 파일을 분석할때 cscope를 사용할 수 없다.
다른 파일을 사용하기 위해서 find명령어를 이용해 DB로 구축하고자 하는 파일을 찾아서 cscope.files라는 파일에 저장해야 한다. 아래의 명령어를 통해 cscope.files 를 만들자.
$ find . W( -name '*.c" -o name '*.cpp' -o -name '*.cc' -o -name '*.java' \) -print > cscope.files

명령어 안에 분석하고자 하는 소스파일의 종류를 모두 기술하면 된다.

4. vim에 DB정보 등록하여 사용하기

아래의 명령을 .vimrc에 넣거나 필요할때 마다 vim명령으로 지정하면 된다.
cs add /cscope.out이 있는 경로/cscope.out

5. cscope 명령어


[cscope 명령어]

Add     :          새 데이터 베이스 더하기        (사용법:           add file | dir [pre-path] [flags]

Find     :          Query for a pattern

                     c: 이 함수를 부르는 함수들 찾기

                     d:  이 함수에 의해 불려지는 함수들 찾기

                     d: egrep 패턴 찾기

                     f: 이 파일 찾기

                     g: 이 정의 찾기

                     i: 이 파일을 포함하는 파일들 찾기

                     s: C 심볼 찾기

                     t: Find assignments to

help     :          이 메지시 보이기        (사용법 : help)

kill       :          연결 끊기                  (사용법 : kill #)

reset    :          모든 연결 다시 초기화 (사용법 : reset)

show   :          연결 보여주기            (사용법 : show)


by danguria 2011. 5. 17. 14:12
1. ctags란?

ctag는 소스 파일을 태그라는 단위로 잘라서 태그정보를 토대로 소스 분석을 도와주는 유틸리티입니다.
윈도우즈 운영체제에서 많이 사용하는 IDE Tool 인 Visual studio에서는 기본적으로 제공하는 기능입니다. 리눅스 진영에서는 작은 기능을 하는 프로그램을 조합해서 쓰는 것을 좋아 하기 때문에 편집기에 ctags를 조합해서 사용합니다.

2. ctag설치

리눅스(우분투)에서 ctag를 설치 하기 위해서는 터미널에서 아래의 명령을 입력하면 됩니다.
$ sudo apt-get install ctags

3. tags 파일 만들기

ctag를 사용하기 위해서는 소스를 분석하고자 파일들에 대해서 tag정보를 추출해야 합니다.
아래의 코드를 사용하여 tag정보를 추출합니다.

(분석하고자 하는 소스파일이 있는 디렉도리의 최상위 디렉토리에서 실행) 
$ ctags -R

4. vim에 ctags 설정 정보 추가 하기

vim편집기에서 ctags정보를 이용하여 소스분석을 쉽게 할 수 있습니다.
아래의 설정정보를 .vimrc파일에 추가해 줍니다.
여러개의 tags파일 정보를 추가 하기 위해는 ','로 구분 합니다.

set tags=./tags, /usr/src/linu/tags


5. ctags 사용하기

4번 단계까지 설정이 끝났다면 vim에서 ctags를 이용할 수 있습니다. 아래는 ctags명령어를 정리해놓은 자료 입니다.

:ta [tag]   or   Ctrl + ]

[tag] 정의된 위치를 나열하고 선택한 위치로 점프. 현재 위치는 stack push 된다.

 :ta [tag]   or   tj [tag]

 :po   or   Ctrl + t

stack top에 저장된 위치를 pop하고 그 위치로 점프

 :sts [tag]

[tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시

 :stj [tag]

 :tn

 tj ts로 점프했을 때 다음 tag로 점프

 :tp

 tj ts로 점프했을 때 이전 tag로 점프

 :tr

 tj ts로 점프했을 때 처음 tag로 점프

 :tl

 tj ts로 점프했을 때 마지막 tag로 점프 

 :pts [tag]

 [tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시하지만 커서는 현재 위치에 유지

 :ptj [tag]

 미리보기 윈도우에 tag가 정의된 형식을 보임

 :ptn

 ptj pts로 점프했을 때 다음 tag로 점프

 :ptp

 ptj pts로 점프했을 때 이전 tag로 점프

 :ptr

 ptj pts로 점프했을 때 처음 tag로 점프

 :ptl

 ptj pts로 점프했을 때 마지막 tag로 점프


by danguria 2011. 5. 17. 13:36

아래 글은 http://www.idhacker96.pe.kr/tc/27 의 글을 가져 왔습니다.


개인적으로 우분투 시스템에서는 gzip을 사용하여 압축을하고, 윈도우 시스템에서는 zip을 사용하여 압축을 한다. 문제는 우분투와 윈도우에서 압축한 파일을 상호 호환성 문제로 잘 풀리지 않을때가 있다.


우분투에서 압축한 파일인 *.tar.gz 파일을 윈도우에서 풀려고하면, 두번 압축을 풀어야하고, 윈도우에서 압축한 zip 파일을 우분투에서 압축을 해제하면, 한글 파일명이 깨져 출력된다.


7z 압축은 우분투와 윈도우에서도 압축을하면 한글이 깨지지 않는다는 장점과 압축 효율이 높다고 외국에서는 많이 사용한다고 들었다. 그러나 습관이 이미 들어서 인지 압축파일을 만들때만다 7z으로 만들지는 않는다.


우분투에 7z 패키지 설치


sudo apt-get install p7zip


7z에 대한 자세한 사항은 'man 7zr'을 통해서 확인할 수 있다.


7z으로 압축


7zr a 파일명.7z [대상]
ex) 7zr a filename.7z files/


7z으로 압축해제


7zr x filename.7z

by danguria 2011. 4. 24. 19:15
리눅수에서 bin으로된 확장자를 실행하는 방법

기본적으로 다운로드 받은 bin파일은 실행 속성이 없습니다.
그래서 실행 속성을 주고 난 다음 실행을 해야 합니다.

실행 속성을 주는 명령어는 chmod이며, +x 옵션을 통해 실행가능하게 만들어 줍니다.
아래의 명령을 입력하면 됩니다.

$ sudo chmod + x 파일명.bin    (실행 속성 부여)
$ sudo ./파일명.bin                    (실행 하기)

by danguria 2011. 4. 24. 00:31

처음으로 컴퓨터를 직접 조립하고 거기에 리눅스를 깔아보면서 그래픽 카드
드라이버 설치하는 것과,듀얼 모니터 설정하는데 어려움을 겪어서 이렇게 정리 해 봅니다.

제가 설치한 리눅스는 우분투 10.10이고 그래픽 카드는 GeForce 500 Series의 Geforce STX 550 Ti이며,모니터는 DELL 의 U2311H 두대를
사용하였습니다.


[NVIDIA 그래픽 카드 드라이버 설치]

1. 드라이버 다운로드

리눅스용 드라이버를 설치 하기 위해서는 NVIDIA 홈페이지(www.nvidia.com)에 가서 직접 자신의 그래픽 카드 종류를 입력하여
해당 드라이버를 다운로드 받을 수 있습니다.



※ 제컴퓨터만 그런지 모르겠지만 사용하는 언어를 한국어로 지저하면 다운로드가 안되더라구요.그래서 언어를 English로 지정했습니다.


2. 드라이버 설치

드라이버를 다운 받았으면, 드라이버를 설치 하면 됩니다. 설치 하기 위해 X window를 종료 하고 설치를 해야 하기 때문에 Ctrl + Alt + F1을 눌러서 콘솔하나 열어 줍니다.


그리고 아래의 명령어를 입력하여 X window를 종료 합니다.



$ sudo /etc/init.d/gdm stop

그런다음 드라이버를 받아 놓은 폴더로 이동하여 아래의 명령을 통해 드라이버를 설치 합니다.(보톤 ~/Downloads/ 폴더 아래에 있습니다.)

$ sudo sh NVIDIA-Linux-x86-270.41.06.run

※ 설치 하는 과정에서 pre-install이 실패 했다는 메시지가 나오던데, 무시하고 설치를 해도 크게 상관은 없는 듯 합니다.

설치가 끝나면 컴퓨터를 재 부팅하면 드라이버 설치는 끝이 나게 됩니다.

[NVIDIA 그래픽카드 듀얼 모니터 설정 (피벗 설정 포함)]

모니터를 듀얼로 사용하기 위해서는 /etx/X11/xorg.conf 파일에 설정 내용을 잘 작성하면 됩니다.
처음 부터 이것을 작성하기란 쉽지 않기 때문에 저 같은 경우 nvidia-settings 프로그램을 사용하였습니다.

※ 여기서 주의 해야 할 점은 xorg.conf를 직접 조작하면 이후부터 nvidia-settings 프로그램에서 설정하는 내용이 적용이 안되는 것을 보았습니다.
정확한 이유는 모르겠지만, 아무튼 nvidia-settings 프로그램을 통해 최대한 설정을 하고 난뒤 nvidia-settings에서 하지 못하는 설정을 직접 파일에 작성하는 순서로 진행하는 것이 좋을 듯 합니다. 그리고 설정하기 전에 xorg.conf파일은 반드시 백업 해 두세요. 잘못되었을때 다시 복구하기
어렵습니다.

1. nvidia-settings 파일 설치 하기

콘솔에서 아래의 명령을 통해 nvidia-settings파일을 설치 합니다.

$ sudo apt-get install nvidia-settings

설치가 다 되었으면 , 프로그램을 실행합니다. 여기서 주의 해야 할 점을 root권한으로 프로그램을 시작해야 하기 때문에
[System ]  --> [Perferences] --> [Nvidia Settings] 와 같은 매뉴를 선택하면 안됩니다. 아래와 같이 콘솔에서 root계정을 획득하여 실행 하도록 합니다.

$ sudo nvidia-settings




실행하면 위와 같은 화면이 뜰 것입니다. 여기서 X Server Display Configuration 매뉴만 잘 알면 됩니다.이 매뉴를 설명 하기 전에 몇가지 알아야 할 사항에 대해서 먼저 설명 드리겠습니다.

듀얼 모니터를 설정할때 두가지 모드가 있습니다. 하나는 TwinView라는 것으로 두개의 모니터를 하나의 화면처럼 사용하는 것입니다. 일반적으로 윈도우 운영체제에서 듀얼 모니터를 쓰는 것과 같은 개념입니다. 자신의 모니터가 피벗 기능을 갖지 않았음때 TwinView로 설정하면 무난하게 사용할 수 있습니다.

두번째는 Seperate X screen입니다. 이것은 말 그대로 두 모니터를 다른 화면으로 분리 하는 것입니다. 이렇게 하면 두 화면간 창을 이동할 수 없고 단지 마우스만 이동할 수 있습니다.  저 같은 경우 이 설정을 적용하였는데 이유는 피벗 기능을 사용하기 위해서 입니다.

TwinView로는 하나의 모니터에만 피벗을 적용할 수 없기 때문이죠..

그러면 지금부터 Seperate X screen 설정을 해 보겠습니다.

2. Seperate X screen 설정으로 듀얼 모니터 및 피벗 설정하기



위의 화면처럼 X Server Display Configuration매뉴를 선택하면 위와 같은 화면이 나옵니다. 저는 이미 설정을 마친 후라 두 모니터가 활성화 되어 있지만 처음 프로그램을 실행하면 하나의 모니터는 "Disable"되어 있습니다.

그러면 그 모니터를 선택한후 아래의 매뉴중 "Configure..."매뉴를 선택합니다.



그리고 나서 위와 같이 "Separate X screen"매뉴를 선택하면 됩니다. (TwinView를 선택하시고 할때도 여기서 TwinView를 선택하면 됩니다.)
다음으로, 두개의 모니터의 위치를 설정해 보겠습니다. 모니터의 위치를 설정하기 위해서는 매뉴중에서 X Screen탭을 선택해야 합니다.


위와 같이 "X Screen"탭을 선택 하면 "Position"이라는 매뉴에서 모니터간의 위치관계를 설정하면 됩니다. 저같은 경우는 왼쪽 모니터를 기준으로 하고 있기 때문에 왼쪽 모니터를 선택하고 Position을 Absolute로 하였습니다.
오른쪽 모니터는 왼쪽 모니터의 오른쪽에 있으므로 Position을 RightOf 로 설정하였습니다.



여기서 주의 해야 할 점을 Enable Xinerama 체크 박스 매뉴를 반드시 설정해야 하는 것입니다. 이것을 하지 않으면 두 모니터간 창을 이동할 수 없기 때문에 반드시 체크 하도록 합니다.
그리고 각 모니터의 스크린 번호(Screen Number)를 기억해 두시기 바랍니다. xorg.conf파일을 직접 수정할때 필요하기 때문입니다.
설정을 다 했으면 Save to X Configuration File을 선태하고 저장을 합니다. 제대로 되었는지 확인하기 위해 컴퓨터를 재 부팅해 보시기
바랍니다.

여기까지 하면 두 모니터의 듀얼 모드 설정을 마쳤습니다. 추가적으로 피벗 기능을 사용하기 위해 직접 xorg.conf파일을 수정해 보도록 하겠습니다.

아래의 명령으로 xorg.conf파일을 열도록 합니다.

$ sodo vi /etc/X11/xorg.conf


파일의 내용을 보면 Section "..." 과 EndSection을 쌍으로 이루어져 있음을 알 수 있습니다. 그 중에 Section "Device"을 찾습니다. 모니터가 두대이므로 Section "Device"은 두개가 있습니다.(아까 스크린 번호 기억 하셨죠?)
여기서 피벗을 하고자 하는 모니터의 스크린 번호가 있는 곳에서 아래와 같은 명령을 추가 해 줍니다.

Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 550 Ti"
BusID "PCI:1:0:0"
Screen 1
Option "Rotate" "CCW"  # 추가한 설정

CCW는 시계반시계방향 CW는 시계방향입니다만.. 직접 확인해 보시기 바랍니다.

여기 까지입니다.....
설정하시다가 궁금한것이 있으면 댓글 남겨 주시면 같이 고민 해 보도록 하겠습니다^^

첨부파일로 제가 설정한 xorg.conf파일을 올립니다.



















by danguria 2011. 4. 23. 21:19
문자열 치환은 다음과 같은 구조로 이루어져 있다.

: [범위] / [매칭문자열] / [치환문자열] / [행범위]

ex ) : %s / old / new /g

치환 명령 요약
 :s/old/new  현재 행의 처음 old를 new로 교체
 :s/old/new/g  현재 행의 모든 old를 new로 교체
 :10, 20s/old/new/g
 10번째 행부터 20번째 행까지 모든 old를 new로 교체
 :-3, +4s/old/new/g
 현재 커서 위치에서 3행 위부터 4행 아래까지 
old를 new로 교체
 :%s/old/new/g  문서 전체에서 old를 new로 교체
 :%s/old/new/gc  문서 전체에서 old를 new로 확인하며 교체
 :g/pattern/s/old/new/g  pattern이 있는 모든 행의 old를 new로 교체
 :g/pattern/s//new/g  :%s/old/new/g와


by danguria 2011. 1. 22. 12:07
find명령은 다음 형식 인자를 받아 들인다.

find [경로] [옵션] [테스트] [작동]

경로
경로 부분은 쉽다. /bin과 같은 절대 경로나 ..와 같은 상대 경로를 사용할 수 있다.
필요하다면 find /var /home과 같이 여러 경로를 지정할 수 있다.

옵션
옵션은 여러가지가 있는데, 가장 많이 사용하는 것은 다음과 같다.
옵션
의미
 -depth  디렉토리 자체를 살펴보기 전에 디렉토리의 내용을 검색한다.
 -follow  기호화된 링크를 따라간다.
 -maxdepths N
 검색할 때 최대 N 수준까지의 디렉토리를 검색한다.
 -mound (혹은 -xdev)
 다른 파일 시스템의 디렉토리는 검색하지 않는다.

테스트
find에 지정할 수 있는 테스트에는 여러 가지가 있는데, 각각의 테스트는 true혹은 false를 리턴한다. find가 동작할 때 자신이 찾은 각 파일에 대해 정의된 테스트를 순저대로 적용한다.
테스트가 false를 반환하면 find는 현재 자신이 찾고 있는 그 파일을 무시하고 다음 파일로 넘어간다. 테스트가 true를 반환하면 find는 현재 파일에 대해 그 다음 테스트나 작동을 수행한다. 다음은 많이 쓰이는 테스트들이다.
 테스트 의미
-atime N
 파일이 N일 이전에 마지막으로 액세스 되었다.
 -mtime M
 파일이 N일 이전에 마지막으로 수정되었다.
 -name 패턴
 경로를 제외한 파일의 이름이 주어진 패턴에 일치한다. 쉘이 패턴을 즉시 연산하지 않고 find에 전달하도록 만들기 위해 항상 패턴에 따옴표를 붙여야 한다.
 -newer otherfile
파일이 otherfile보다 최신이다.
 -type C
 파일이 형식 C이며 이때 C는 특정 형식이 될 수 있다. 가장 흔히 사용되는 것은 디렉토리를 가리키는 "d", 보통 파일을 가리키는 "f"이다.
 -user 사용자이름
 주어진 이름을 가진 사용자가 파일을 소유하고 있다.

테스트는 연잔자를 통해 여러 테스트들을 섞어 사용할 수 있다.
 연산자
의미
 !(-not)  테스트를 역으로 수행한다.
 -a(-and)  두 테스트가 모두 true가 되어야 한다.
 -o(-or)  둘 중 하나의 테스트가 true가 되어야 한다.

예) \(-newer X -o -name "_*" \)
괄호를 사용하기 위해서는 백슬래시(\)를 괄호 앞에 붙여주어야 한다. 이유는 쉘에서 괄호가 다른 의미를 가지기 때문이다.

작동
작동은 원하는 파일을 찾은경우 수행할 일을 처리하게 하는 것이다.
 작동 의미
 -exec 명령
명령을 실행한다.
 -ok 명령
 -exec와 같지만, 명령을 수행하기 전에 사용자에게 실행 여부를 물어본다.
 -print  파일의 이름을 출력한다.
 -ls  현재 파일에 대해 ls -dils명령을 실행한다.

-exec와 -ok명령은 \; 로 끝날 때까지 입력되는 이후 매개 변수를 자체 매개변수로 받아 들인다. 문자열 {} 은 -exec, -ok 명령에 대한 특별한 형식의 매개변수이며, 현재 파일에 대한 전체 경로로 대체 된다.
예) find . -newer text.txt -type f -exec ls -l {} \;
현재 경로에서 파일명이 text.txt인 보통파일을 찾으면 "ls -l 파일이 있는 경로" 명령을 실행하라 라고 해석하면 된다.


by danguria 2011. 1. 18. 21:14
1. install ssh
# sudo apt-get install ssh

2. start ssh
#sudo /etc/init.d/ssh restart
by danguria 2011. 1. 15. 09:42


[tar.gz 압축 풀기]


$ gunzip filename.tar.gz        // tar.gz에서 gz을 풀어냅니다.
$ tar xvf filename.tar             // tar를 풀어냅니다. (x: 압축풀기, v: 압축푸는 상태를 본다. f:파일이름)

두개의 명령을 하나로 합칠 수도 있습니다.

$ tar xvzf filename.tar.gz



[tar.gz 압축 하기]

$tar cvf filename.tar file1...    //file1의 폴더나 파일을 filename.tar로 묶는다 (압축아님)
$gzip filename.tar                //filename.tar을 filename.tar.gz로 압축한다 (이땐 압축)

역시나 두개의 명령을 하나로 합칠 수 있습니다.

$tar cvzf filename.tar.gz file1...     //file1의 폴더나 파일을 filename.tar.gz로 묶고 압축한다.


by danguria 2011. 1. 13. 03:48

Linux에 Windows용 True Type 글꼴 설치하기

기본적 으로 Linux 시스템에는 설치 언어를 '한국어'로 선택한 경우, 몇 가지 무료용 한글 글꼴이 설치된다. 그러나, 이 글꼴은 무료인 만큼 Windows에서 사용하는 글꼴처럼 미려하지 않은 단점이 있다.
이를 해결하는 방법으로는 일반적으로 무료로 배포되는 글꼴을 내려받거나 Windows 시스템에서 사용하는 TrueType 글꼴(ttf)을 가져다 쓰는 것이다. 다행이 TrueType 글꼴은 그대로 Linux 시스템에서 사용할 수 있다.

1. 글꼴 복사하기
Windows 시스템에서 사용할 글꼴을 복사한 다음, Linux 시스템에 옮긴다. Windows 시스템은 C:\Windows\Font 디렉토리에 글꼴이 설치되어 있다.
Linux 시스템에 복사한 글꼴을 다음과 같이 Linux의 글꼴 시스템 디렉토리에 설치한다.

># mv *.ttf /usr/share/fonts

2. 글꼴 캐쉬 정보 갱신하기
현재 시스템에서 사용하고 있는 글꼴에 대한 정보에 새로 설치한 글꼴 정보가 포함되도록 갱신하여야 한다. 시스템을 재시작하면 자동으로 반영되지만 현재 복사한 글꼴을 바로 확인하고자 할 때에는 다음을 실행한다.

># fc-cache -f -v

3. Anti-Aliasing 적용하기
지금까지의 과정으로 TrueType 글꼴의 기본적인 설치 과정은 완료된다. 그러나, Ubuntu와 같이 몇몇 시스템에서는 한글 글꼴에 대해 Anti-Aliasing (즉, 글꼴의 윤곽을 부드럽게 함)을 적용하지 못하도록 설정되어 있어, TrueType 글꼴인데도 불구하고 마치 Bitmap 글꼴이 확대되었을 때 깨지는 것처럼 보이는 경우가 있다. 이런 경우에는 다음과 같이 Anti-Aliasing을 적용하지 못하도록 설정된 두 부분을 주석 처리한다.

우선 편집기를 이용하여 다음과 같이 한글 설정 파일을 연다.

># gedit
/usr/share/language-selector/fontconfig/ko_KR


그런 다음, 내용 중에
<!-- Turn off antialias and autohint for Korean fonts depending on pixelsize --> 부분을 찾은 다음, 바로 아래 줄의 <match target="font">부터 </match>설정까지를 <!---->로 둘러싸서 주석 처리한다.

그리고, 조금 더 내려가면 다시 <!-- Turn off antialias and autohint for ttf-alee depending on pixelsize --> 부분이 나타나는데, 이 부분 또한 위와 마찬가지로 <match target="font"> 부터 </match>까지 주석 처리한다.

끝으로 설정 파일을 저장하고 닫은 다음, 시스템을 재시작하면 미려한 TrueType 글꼴을 즐길 수 있다.

by danguria 2011. 1. 13. 03:47

들어가기 전에..

이 자료는 다음 사이트를 그대로 옮긴 것입니다. 사이트 주인께 감사 드립니다.

인문학적 프로그래머 NamSa님 의 자료 바로 가기



한참을 ubuntu subversion클라이언트에대해서 검색을 해댓군요.. 예전에 분명히 꾀나 쉽게 햇던것 같은데 어떻게 설치하는지 조차 구글신은 알려주지 않는것인가.. 라는 생각과 함께 설마하며

#  sudo apt-get install subversion

이라고 치고 svn 명령어를 날려보니 되더군요. 저녀석이 서버용 버전인걸로 착각하고 있엇다는 ㅠㅠ 요즘에는 3개월정도 윈도우에서 생활햇더니 리눅스에 대한걸 많이 까먹은듯 싶군요 ^^ 일단 설이는 요로케 마무리~

저의 것의 경우에는 커밋을 하려고 보니 에디터가 nano여서 고녀석을 vim으로 바꾸어 주엇습니다.

$  echo "export EDITOR=vim" >> ~/.bashrc 
$ . ~/.bashrc



그리고 자신의 작업할 svn에서 checkout을 하여서 소스파일을 내 시스템으로 받아옵니다

$ svn checkout <svn주소> <저장디렉토리>



이제 파일을 수정하시고 서버로 commit하시려면

$ svn ci -m "커밋주석"



서버로부터 최신 파일을 받아오려면

$ svn update



파일을 추가/삭제 하려면(svn은 파일을 자동으로 추가해주는게 아니라 직접 만들고 ADD 해주어야 한다)

$ svn add <파일명>
$ svn delete <파일명>


그 외믜 명령어는 아래의 표를 참고하시면 됩니다.

요즘 한 3개월정도 무선랜 문제라던지 이런 저런 문제가 있엇는데 해결되면서 저번주부터 리눅스로 다시 돌아왓는데 오랜만이라 어색한게 많네요. 그래도 다시 사용하면서 느끼는건데 손맛은 운영체제를 사용하는 제미는 리눅스가 최고인것 같다는 생각이 듭니다.

by danguria 2011. 1. 13. 03:46

우분투에서 samba를 이용해서 파일공유 사용하기

파일을 공유하려는 서버에서 아래와 같이 삼바 패키지를 설치한다.
sudo apt-get install samba smbfs

이 공유에 접근할 아이디와 비밀번호를 설정한다.
sudo smbpasswd -a 아이디

접근 아이디를 지울 때는 다음과 같이 한다.
sudo smbpasswd -x system_username

삼바 서버를 설정하기 위해 문서 편집기로 설정파일을 연다.
sudo vim /etc/samba/smb.conf

그 안에 다음과 같은 내용을 입력한다.

# 기본적인 설정
[global]
# 워크그룹이름은 맘대로 정한다.
workgroup = WORKGROUP
encrypt passwords = yes
# 접근을 허락할 아이피 범위
hosts allow = 192.168.
# 문자 인코딩 설정, 우분투는 utf-8을 기본적으로 사용하고
# 이것이 윈도우즈에서도 한글이 잘 깨지지 않는다.
unix charset=utf-8
dos charset=utf-8
#공유할 디렉토리 이름, 이것은 여러개를 만들 수도 있다.
[MyDoc]
comment = My Documents
path = /공유할/디렉토리
#읽기 전용으로 접근할지 여부
read only = no
browsable = yes


삼바의 설정은 매우 다양하게 할 수 있다.
아래에 다양한 삼바 설정을 설명했다.

삼 바 설정이 끝났으면, 설정이 제대로 되었는지 검사한다.
sudo testparm

문제가 없으면 삼바를 실행한다.
sudo /etc/init.d/samba restart

우분투에서 패키지로 설치된 삼바는 컴퓨터가 켜질 때마다 실행될 것이다.

우분트 클라이언트에서 공유에 접근하는 법은 두가지이다.

첫째)
위치 메뉴 > 서버에 연결 을 선택한 후,
서비스 종류는 Windows공유를 지정하고,
사용자 이름과 연결에 사용할 이름 부분만 위에서 지정한 네트워크사용자아이디를 지정하면 된다.

둘째)
mount -t cifs //삼바서버아이피/삼바공유폴더이름 /공유가/지정될/로컬폴더 -o username=네트워크사용자아이디,password=비밀번 호,iocharset=utf8,file_mode=0777,dir_mode=0777
-o 이후로는 띄어쓰기를 해서는 안된다.

윈 도우즈에서 삼바 서버에 접근하려면,
네트워크 환경에서 새 연결을 설정하거나,
net use o: \\삼바서버아이피\삼바공유폴더이름 비밀번호 /user:네트워크사용자아이디
로 연결하면 되고,
삭제는 net use o: /delete
로 하면 된다.

by danguria 2011. 1. 13. 03:44
리눅스에서 자바 JDK를 설치하는 방법에 대해서 설명 드리겠습니다.
이번에는 bin파일을 다운 받아서 직접 설치를 해볼 것인데요.
bin파일을 실행하기 위해서
우분투에서 bin파일 설치 편을 참고 하기시 바랍니다.

1. 리눅스용 패키지(bin) 다운로드 받기

리눅스용 패키지를 다운로드 받기 위해서
Sun의 홈페이지로 이동합니다. 홈페이지에서 Linux용 패키지를 다운로드 받습니다. bin을 통해 설치 할 것이기 때문에 bin 파일을 다운로드 받습니다. 현재 글을 쓰는 시점의 최신 버전의 파일 이름은
jdk-6u25-linux-i586.bin입니다.

2. bin파일 실행하기
다운로드 받은 파일은 폴더로 이동하여 아래의 명령을 수행하면 패키지의 압축이 풀리게 됩니다.

$ /{다운로드받은폴더}/ ./jdk-6u25-linux-i586

$ /home/danguria/Downloads/ ./jdk-6u25-linux-i586       (제가 다운로드 받은 폴더)

3. 압축 푼 폴더를 적절한 곳으로 이동하기
패키지의 압축을 풀었으면 적절한 곳으로 이동시켜 줍니다. 보통 이런류의 패키지는 /usr/lib 폴더 안에 두는 것이 관계이므로 그곳으로 폴더를 이동시키겠습니다.

아래의 명령을 실행 시켜 줍니다.

$ sudo mv /{압춘 푼 폴더가 있는 곳}/jdk-1.6.0???  /usr/lib/jvm

jvm이라는 폴더이름을 원하시는대로 정하면 됩니다.

4. PATH설정하기
자바를 컴파일 하기위해 컴파일 명령을 편하게 하기 위해서 PATH 설정을 해주면 좋습니다.
아래명령을 통해 설정파일을 열어 편집할 준비를 합니다.

sudo vi /etc/profile

그다음 파일의 가장 아래에 다음 3라인을 추가 합니다.

export JAVA_HOME=/usr/lib/jvm/
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/bin/lib/ext:$JAVA_HOME

설치가 잘 되었는지 확인하기 위해 아래 명령을 수행 시켜서 봅니다.

$ java -version

이상 리눅스에서 자바 JDK 설치하는 방법이었습니다.
by danguria 2011. 1. 13. 03:43

네트워크 설정(고정 IP)

1. 네트워크 설정파일 변경

sudo vi /etc/network/interfaces 엔터

auto eth0

iface eth0 inet static

address 210.118.75.xxx

gateway 210.118.75.1

netmask 255.255.255.0

network 210.118.75.0

broadcast 210.118.75.255

2. 네트워스 서비스 다시 시작

sudo /etc/init.d/networking restart

3. DNS 설정

sudo vi /etc/resolv.conf

nameserver 210.118.75.3



by danguria 2011. 1. 13. 03:42
파일 두개를 고치고 리부팅하면 됩니다.ㅋ

1. /etc/pam.d/gdm
3행  "auth required pam_succeed_if.so user != root quiet"를 주석 처리한다
(주석처리는 가장 앞줄에 #르 적어 주면 된다.)

2. /etc/pam.d/gdm-password
2행 "required pam_succeed_if.so user != root quiet"를 주석 처리한다.

3. 리부팅한다 (init 6)
by danguria 2010. 4. 20. 20:49

오늘 이현이의 세미나를 듣고 간단한 프로그램만들때 바로 적용할 수 있는 maekfile틀을 만들어 보았습니다.
이현이가 보여준 예제소스들을 만들고 makefile을 만들었는데 생각보다 이해가 되지 않는 부분이 아직 있네요..
수정을 하면서 차차 업그레이드 해야 겠습니다.
그래도 컴파일은 잘 되니까 쓸만은 합니다.^^

TARGET = calc
SRCS = calc.c addsub.c muldiv.c  # 없어도 됨..
OBJECTS = calc.o addsub.o muldiv.o
CC = gcc
CFLAGS = -W -Wall
LDLFAGS =

$(TARGET) : $(OBJECTS)
 $(CC) $(CFLAGS) -o $(TARGET) $(OBJECTS)


clean :
 del *.o
 del *.exe


by danguria 2009. 1. 6. 01:24
우분투 리눅스를 깔고 바로 gcc를 사용하려 하면

error: stdio.h: No such file or directory

이런 메시지가 뜰 거시다.

원인은 정확하게 모르겠지만 sudo apt-get명령을 사용하여 다음을 인스톨 하면 문제는 해결된다.

sudo apt-get install build-essential

나 이거 해결 하느라 밤샐뻔 했음...

삽질을 줄이는 그날까지..ㅋㅋ
by danguria 2008. 3. 23. 23:54

command line 명령어

내 용

vi file

vi를 시작하여 지정한 파일 편집

vi -r file

읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집

view file

읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집

vi -r

되살릴 수 있는 모든 파일 이름 보여주기

vi -r file

vi를 시작하여 지정한 파일 되살리기

편 집 명 령

내 용

i

입력 모드로 전환, 커서 위치 앞에서 삽입

a

입력 모드로 전환, 커서 위치 뒤에서 삽입

I

입력 모드로 전환, 현재 줄의 앞에 삽입

A

입력 모드로 전환, 현재 줄의 끝에 삽입

o

입력 모드로 전환, 현재 줄의 아래에 전개

O

입력 모드로 전환, 현재 줄의 위에 전개

:e file

지정한 파일의 편집

:e! file

지정한 파일의 편집, 자동 점검의 생략

r

단지 한 글자만 변경(입력 모드로 바뀌지 않음)

R

입력하는 대로 겹쳐 써서 변경

s

삽입에 의해 한 단어의 변경

C

커서의 위치로부터 줄 끝까지 삽입에 의한 변경

cc

전체 줄을 삽입에 의한 변경

S

전체 줄을 삽입에 의한 변경

cmove

커서부터 move까지 삽입에 의해 변경

~

대,소문자 바꾸기

u

편집 버퍼를 수정했던 마지막 명령을 취소

U

현재 줄을 저장

.

편집 버퍼를 수정했던 마지막 명령 반복

x

커서가 있는 문자 삭제

X

커서의 왼쪽 문자 삭제

D

커서부터 줄의 끝까지 삭제

dd

현재 줄의 전체 삭제

dmove

커서부터 move까지 삭제

dG

커서부터 편집 버퍼의 끝까지 삭제

d1G

커서부터 편집 버퍼의 맨 앞까지 삭제

:<line>d

지정한 줄의 삭제

:<line>,<line>d

지정한 범위의 삭제

:<line>co<target>

지정한 줄을 복사하여 target 줄 밑에 삽입

:<line>, <line>co<target>

지정한 범위를 복사하여 target 줄 밑에 삽입

:<line>m<target?

지정한 줄로 이동하여 target 줄 밑에 삽입

:<line>, <line>m<target>

지정한 범위로 이동하여target 줄 밑에 삽입

<n>!!command

n번 줄에서 command의 실행

!move command

커서부터 move까지 command 실행

!move fmt

커서부터 move까지 줄들을 형식 맞추기

:w

원래의 파일로 데이터를 저장

:w file

지정한 파일로 데이터를 저장

:w>> file
 

지정한 파일에 데이터를 추가

:wq

데이터를 저장하고 종료

:q!

데이터를 저장하지 않고 종료

:set number

내부 줄 번호 디스플레이
 

:set nonumber

내부 줄 번호 디스플레이 않기

p

마지막으로 지워진 것을 커서의 뒤/아래에 삽입

P

마지막으로 지워진 것을 커서의 앞/위에 삽입

xp

두 문자를 바꿈

deep

두 단어를 바꿈

ddp

두 줄을 바꿈

/rexp

지정된 정규 표현식에 대해 앞으로 이동

/

이전의 패턴에 대해 앞으로 검색을 반복

?rexp

지정된 정규 표현식에 대해 뒤로 이동

?

이전의 패턴에 대해 뒤로 검색을 반복

n

/나 ?명령에 대해 같은 방향으로 반복

N

/나 ?명령에 대해 반대 방향으로 반복

:ab short long

short를 long에 대한 약어로 변경

:ab

현재 약어 목록을 표시

:una short

약어 short를 표시

r<Return>

문자를 뉴라인으로 변경

J

아래 line을 현재 line과 합치기

:set wm=n

오른쪽으로 n문자 위치에서 자동적으로 줄 나눔

h or <Left key>

커서를 한 칸 왼쪽으로 이동

j or <Down key>

커서를 한 줄 아래로 이동

k or <Up key>

커서를 한 줄 위로 이동

l or <Right key>

커서를 한 칸 오른쪽으로 이동

<Backspace>

커서를 한 칸 왼쪽으로 이동

<Space>

커서를 한 칸 오른쪽으로 이동

-

커서를 이전 줄의 처음으로 이동

+

커서를 다음 줄의 처음으로 이동

<Return>

커서를 다음 줄의 처음으로 이동

0

커서를 현재 줄의 맨 앞으로 이동

$

커서를 현재 줄의 맨 끝으로 이동

^

커서를 현재 줄의 첫글자(공백이나 탭이 아닌)로 이동

w

커서를 다음 단어의 첫 글자로 이동

e

커서를 다음 단어의 끝 글자로 이동

b

커서를 이전 단어의 첫 글자로 이동

W

w와 같음(문장 부호 무시)

E

e와 같음(문장 부호 무시)

B

b와 같음(문장 부호 무시)

(

다음 문장의 처음으로 이동

)

이전 문장의 처음으로 이동

{

다음 문단의 처음으로 이동

}

이전 문단의 처음으로 이동

H

커서를 화면 맨 위로 이동

M

커서를 중간으로 이동

L

커서를 맨 아래로 이동

^f

한 화면 아래로 이동

^b

화면 위로 이동

^d

반 화면 아래로 이동

^u

반 화면 위로 이동

n^d

n줄만큼 아래로 이동

n^u

n줄만큼 위로 이동

:!command

vi를 중단하고 지정한 셸 명령을 실행

:!!

vi를 중단하고 이전의 셸 명령을 실행

:sh

vi를 중단하고 셸을 실행

:!csh

vi를 중단하고 새로운 C-셸을 실행

:s/<pattern>/<replace>/

현재 줄의 치환

:<line>s/<pattern>/<replace>/

지정한 줄의 치환

:<line>,<line>s/<pattern>/<replace>/

정한 범위의 치환

:%s/<pattern>/<replace>/

모든 줄의 치환

:<line>r file

file의 내용을 지정한 줄 다음에 삽입

:r file

file의 내용을 현재의 줄 다음에 삽입

:<line>r !command

command의 결과를 지정한 줄 다음에 삽입

:r !command

command의 결과를 현재의 줄 다음에 삽입

:r !look pattern

지정한 pattern으로 시작된 단어 삽입

.

뉴라인을 제외한 모든 단일 문자와 대응

*

영 또는 그 이상의 선행 문자와 대응

^

줄의 시작과 대응

$

줄의 끝과 대응

\<

단어의 시작과 대응

\>

단어의 끝과 대응

[ ]

묶여진 문자중의 하나와 대응

[^ ]

묶여진 문자를 제외한 아무것하고나 대응

\

이어지는 기호를 문자 그대로 해석

<n>G

줄번호 n으로 건너뛰기

1G

편집 버퍼의 첫 줄로 건너뛰기

G

편집 버퍼의 마지막 줄로 건너뛰기

:map g lG

g가 lG와 같도록 매크로 정의

 

by danguria 2008. 3. 22. 02:07
| 1 |