본문 바로가기

개발자의 기록 노트/Linux

(21)
[우분투] 컴퓨터이름 변경하기 [우분투] 컴퓨터이름 변경하기 우분투 리눅스가 설치된 컴퓨터의 이름 바꾸는 방법이다.한글로 컴퓨터이름을 지정했다가 여러가지 이유로 인해, 영어 이름으로 변경해야 할 경우가 생기곤 한다. 아래 방법을 따르면 쉽게 변경할 수 있다. Ex) 유저네임@유저네임-desktop:~& -> 유저네임@desktop:~& 수정해야 할 곳은 2곳이다. /etc/hostname 에서 이름을 변경한다. 그리고 다음 명령 수행한다. hostname -F /etc/hostname /etc/hosts 에서 "ip 컴퓨터이름" 에서 컴퓨터이름 부분을 변경한다. 이후 아래 명령을 수행한다. sudo /etc/init.d/hostname.sh stop sudo /etc/init.d/hostname.sh start sudo shutdon..
[리눅스/커널] 커널에서 자주 사용되는 매크로 : likely( ) / unlikely( ) 커널에서 자주 사용되는 매크로 : likely( ) / unlikely( )커널 소스를 보다보면 likely 또는 unlikely 메크로를 자주 사용하는 것을 볼 수 있습니다. likely / unlikely macro가 어떤 의미를 가지는 매크로인지 궁금했어요.그래서 알아보았죠. 커널 3.2 코드를 기준으로 likely / unlikely macro는 커널 소스에 다음과 같이 정의되어 있더군요. 소스위치는 ./include/linux/compiler.h 109 /*110 * Using __builtin_constant_p(x) to ignore cases where the return111 * value is always the same. This idea is taken from a similar p..
[모듈 삽입 에러] unknown symbol in module ko 파일을 insmod 명령을 통해 커널에 동적 삽입을 시도할 때 다음과 같거나 혹은 유사한 메세지를 뱉으며 에러가 나는 경우가 있다. -1 : unknown symbol in module dmesg 명령을 통해 커널 로그를 확인 해보자.모듈 삽입시 에러가 나는 원인을 어느정도 추측할 수 있을 것이다. dmesg 에 기록된 메세지 사례 사례 1 :Unknown symbol lockdep_init_map (err 0) 다음 조건을 만족하면 발생 : 컴파일한 모듈의 소스코드에 semaphore, mutex, spinlock 등 락 메커니즘을 사용하는 함수가 포함되어있는 경우. 커널 빌드시 CONFIG 옵션중 lock 관련 디버깅 옵션을 활성화 한 경우.(lockdep) lockdep는 커널의 락 메커니즘이..
리눅스에서의 세마포어 (Semaphores in Linux) 리눅스에서의 세마포어 (Semaphores in Linux) 원본 출처 : http://linuxdevcenter.com/pub/a/linux/2007/05/24/semaphores-in-linux.html?page=1 일반적으로 상용 어플리케이션은 멀티스레드 어플리케이션이다. 상용 어플리케이션중 멀티스레드가 아닌 어플리케이션은 상상하기 힘들다.어플리케이션과 시스템의 성능(응답성)을 높이기 위해서 어플리케이션은 반드시 멀티스레드를 이용한 접근을 해야만 한다. 그러나, 인생의 대부분은 대가없이 얻어지는 것은 없듯이, 어플리케이션에서 멀티스레드의 특성을 활용해야 할 필요가 있다면, 다음과 같은 몇가지 이슈와 부딪히게 된다. 바로 교착상태(dead lock), 경쟁상태(race condition), 스레드의 ..
man page와 section number man page와 section number리눅스를 사용하다보면 종종 'man page'라는것을 접하게 된다.리눅스를 처음 접한 사용자라면 몇몇 리눅스 커뮤니티에 무언가 질문을 해도, 'man page 찾아보세요. 거기에 다 나와있어요' 라는 답변을 받기도 한다. 대체 man page는 뭘까?man page는 'manual page'를 말한다. 리눅스의 여러 요소들(라이브러리 함수, 시스템콜, 명령어 등) 여러가지에 대해 설명하는 설명서(manual, 매뉴얼)라고 보면 될 것이다. 예를 들어, 당신이 'printf' 를 잘 모른다고 가정하자. 이에 대해 자세히 알아보는 방법은 몇가지 존재 할 것이다.구글링을 한다던가, 대학 학부생때 배웠던 C언어 책을 다시 꺼내본다던가. 옆에 앉아있는 동료 프로그래머에게..
[Ubuntu 12.04] GRUB : 부트로더 환경설정 *본 설명은 Ubuntu 12.04 를 기준으로 합니다. 1. GRUBGRUB 혹은 GNU GRUB은 GNU 프로젝트의 부트로더이다. GRUB의 이전 이름은 GRand Unified Bootloader 이었으며, 이는 대통일 이론의 영문 이름을 패러디한 것 이라고 한다. 대부분 리눅스 배포판에서 부트로더로 사용한다. GRUB은 LILO와 달리 설정 변경 후에 재설치가 필요 없다. GRUB은 스테이지 단위로 부팅 과정이 구성되어 있으며, GRUB의 스테이지 1은 MBR에 존재한다. GRUB 설정 파일은 대개 스테이지 2에서 불리며 이들은 GRUB이 읽을 수 있는 파티션에 존재한다. 만약 설정 파일이 없으면 명령줄로 간다. 이들 설정 파일은 /boot/grub에 있으며 배포판마다 파일 이름이 다르다. 이러한..
[우분투] Ubuntu 12.04 에 JDK7 설치하기 Ubuntu 12.04 에 JDK7 설치하기 ubuntu 12.04 에 oracle-jdk7 을 설치하는 방법은 다음과 같다. 작업은 터미널에서 진행한다. $ sudo add-apt-repository ppa:webupd8team/java$ sudo apt-get update$ sudo apt-get install oracle-jdk7-installer 위의 명령을 순서대로 진행한다.위 명령의 의미는 아래와 같다. 1) jdk7 를 다운로드 받을 저장소 주소를 우분투의 apt 에 추가2) 추가된 주소의 저장소 목록을 업데이트3) jdk7 다운로드 및 설치 설치가 완료되면 다음 명령으로 잘 설치되었는지 확인할 수 있다.만약 설치가 정상적으로 되었다면 jdk및 java runtime의 버전이 출력될 것이다...
Kprobes 사용하기 [2] : 시스템콜에 probe 삽입하기 Kprobes 사용하기 [2] : 시스템콜에 probe 삽입하기 Kprobe 를 이용하려면 모듈로 작성하여야 함. System call 중 sys_open( ) 이 호출되는 것을 로그로 감지하는 probe를 삽입해 보겠다. 우선 커널에서 sys_open( )의 심볼 주소를 얻어야 한다.적어도 다음과 같은 3가지 방법이 있다. /proc/kallsyms 파일 항목을 사용한다.사용예 : cat /proc/kallsyms | grep sys_open nm 명령어를 커널에 적용한다.사용예 : nm vmlinux | grep sys_open (vmlinux 의 위치에서, 아닌경우 경로 지정할 것) 커널의 System.map을 사용한다.사용예 : grep sys_open System.map (System.map 의..