제임스딘딘의
Tech & Life

개발자의 기록 노트/Linux 21

[우분투 16.04] 32bit library를 64 bit 우분투 16.04에 설치하는 방법

개요우분투라는 운영체제는 32 bit CPU용 버전과 64 bit CPU용 버전이 제공된다.그런데 종종, 32bit 용으로 빌드 된 실행파일을 64 bit 용 우분투에서 실행시켜야 하는 경우가 있다.그리고 우분투 12.04 LTS의 64bit 버전에서는 꼼수로써, ia32-libs 라는 패키지를 제공해서, 32bit용 실행파일을 실행 시킬 수 있도록 했었다. 그러나 우분투 16.04 에서는 ia32-libs 패키지가 deprecated 처리가 되었다.그 이유는 MultiArch를 사용하도록 유도하기 위해서 인 듯 싶다. 하지만 방법이 있다.아래와 같은 순서로 MultiArch를 설치하고, 32 bit 용 실행파일을 우분투 16.04 의 64bit 버전 에서 실행되도록 할 수 있다. i386 아키텍쳐 활성..

shell prompt에 git branch 이름 표시 / 색상으로 status 표시

git 기본 사용시 불편한 점여러 소스코드 형상관리 툴 중 git을 주로 사용하는데, linux shell prompt에서 사용하다 보면, 불편한 경우가 있다.아래 두가지 경우였다. 1. 현재 git directory의 branch가 어디인지?2. 현재 git directory의 변경사항이 있는지? 기본 상태에서...1번의 경우는, 'git branch' 라고 명령을 입력해야 확인 가능하다.2번의 경우는 'git status' 라고 명령을 입력해야 확인 가능하다. 이게 은근 귀찮다.그래서 shell prompt에서 git directory로 진입을 하면 branch명을 표시하고, 해당 branch명을 다시 status에 따라 녹색/빨간색으로 표시하도록 하고자 한다. .bashrc 파일 수정 HOME di..

[우분투 16.04] 부팅시 프로그램을 자동으로 시작하도록 설정하는 방법 (How to add auto startup applications in Ubuntu 16.04)

프로그램 자동실행 이유우분투 16.04 이 설치된 PC를 켤때 synergy client를 자동으로 실행되도록 하고 싶다.지금은 우분투 PC가 켜지면, shell prompt를 띄우고, 명령어를 직접 입력해서 synergy client를 실행시켜 synergy server PC에 연결되도록 수동으로 사용하고 있다. 이 과정이 번거롭기 때문에, 자동화 하고자 한다. 참고로 synergy는 서로다른 2대 이상의 PC를 연결시켜서, 한쌍의 키보드와 마우스를 이용해 연결된 PC 모두를 제어하도록 도와주는 프로그램이다.본 포스팅에서 설명하고자 하는 것은, 우분투 16.04 PC가 synergy client가 되고, 그외의 PC (윈도우 혹은 Mac 혹은 또다른 우분투)가 synergy server가 되는 상황이다..

[우분투] 우분투 16.04 런처(Launcher) 위치 바꾸기

개요우분투에는 '런처(Launcher)'라 불리는 것이 있다.MS의 윈도우 운영체제와 비교하자면, '작업표시줄' 과 비슷한 것 쯤으로 이해하면 쉽다. 그동안의 우분투 LTS 버전들에서는 이 런처의 위치가 왼쪽에 세로로 고정되어 있었다.아래 그림과 같이 말이다. 런처 위치 변경 명령어우분투 16.04 에서는 드디어 런처의 위치를 변경할 수 있게 되었다.방법은 간단하다. shell에서 명령어 한줄이면 된다. /* 런처를 왼쪽에 위치함 */ $ gsettings set com.canonical.Unity.Launcher launcher-position Left /* 런처를 아래쪽에 위치함 */ $ gsettings set com.canonical.Unity.Launcher launcher-position Bo..

[리눅스/Vi] vi editor 문자열 치환(replace) 방법

개요 리눅스 환경에서 코드를 작성하다 보면, 종종 vi editor 혹은 vim editor를 사용해서 코드의 특정 단어를 다른 단어로 교체(replace) 해야 하는 상황이 종종 있다. 즉, 특정 문자열을 치환해야 하는 경우이다. 예를들면, 현재 소스코드 파일에서 'apple_result' 이라는 변수를 모두 'melon_result' 라는 변수로 바꾸어야 하는 상황 같은 것 말이다. 상황에 따라 아래와 같은 몇가지 방법이 있다.우선 ex모드로 진입해야 한다. 1. 현재 문서를 편집중인 '편집모드'라면, 키보드의 ESC 키를 눌러 편집모드에서 명령모드로 나온다.2. 콜론(:)을 눌러 ex모드로 진입한다.3. ex모드에서 아래와 같은 방법들 중, 자신의 상황에 맞는 방법을 선택해 수행하면 된다. 혹시, ..

[우분투] Ubuntu 16.04 삼바(Samba) 설치 및 사용하기

윈도우 PC와 리눅스 PC 두대를 사용해서 개발등을 하다 보면, 두 PC간에 파일을 빈번하게 이동할 일이 발생한다.이럴때 선택할 수 있는 방법은 여러가지가 될 수 있다. 우선 USB메모리나, 외장 하드디스크와 같은 저장장치를 이용할 수도 있다.혹은 이메일이나 메신저의 파일전송 기능, 혹은 인터넷 게시판에 업로드 하는 방법 등으로 전달할 수도 있다.좀더 우아한 방법으로는 one drive나 google drive 혹은 dropbox와 같은 클라우드 저장소를 활용할 수 도 있다. 그러나 이 방법도 한번 고려해 보자.'Samba' 라는 프로그램을 활용해서 우분투의 디렉토리를 공유 디렉토리로 만들고, 윈도우에서 접근 할 수 있는 방법이다. Samba 설치하기 우분투 shell에서 apt 커맨드로 간단히 설치할 ..

[우분투] Ubuntu 16.04 화면 캡쳐 방법

우분투를 사용하면서 화면을 캡쳐해야 할 경우가 종종 있다.우분투 16.04 사용하기 시작한지 2일째인데, 의외로 유용한 기능이 많은 것 같다.그것 중 하나가, 다양한 방식의 화면 캡쳐 기능을 제공하는 것이다. 참고로 우분투 16.04 에서는 화면 캡쳐를 스크린샷(Screenshot) 이라는 용어로 표현하고 있었다. 우분투는 다음과 같이 총 6가지의 스크린샷 찍기 방법을 제공하고 있다. 스크린샷 찍기 / 활성화 된 창의 스크린샷 찍기 / 영역의 스크린샷 찍기클립보드로 스크린샷 복사 / 활성화 된 창의 스크린샷을 클립보드로 복사 / 영역의 스크린샷을 클립보드로 복사 각 방법에 대해 단축키를 살펴보자.당신이 설정을 변경하지 않았다면, 이 글에서 소개하는 기본 단축키가 동작할 것 이다. 스크린샷 찍기 단축키 :..

[우분투] Ubuntu 16.04 한글키보드 한글입력 방법

Prologue2009년부터 사용하던 오래된 노트북 컴팩 CQ40.그동안 약 4년정도를 윈도우7을 설치해서 사용해오다가, 포맷을 하고 우분투 16.04 를 설치해서 사용하기로 했다.설치를 마친 후, 한글 입력을 하려니 왠걸. 되질 않는다.기억을 더듬어보자.회사 업무PC에 우분투 12.04를 처음 설치 한 후, 한글 입력이 곧바로는 되지 않았었다.몇가지 설정을 더 해주고, 별도의 Nabi라는 입력기를 설치해야만 한글 입력이 가능했던 것 같다. 본격 Ubuntu 16.04 한글 입력 가능하게 만들기한글키보드로 한글 입력을 할 수 있게 만드는 과정은 간단하다. 1. 입력기 설치( IBus 설치 )2. 몇가지 설정 먼저, 입력기 설치다. IBus라는 입력기를 설치할 것이다. IBus hangul 패치버전 설치를..

[우분투] 컴퓨터이름 변경하기

[우분투] 컴퓨터이름 변경하기 우분투 리눅스가 설치된 컴퓨터의 이름 바꾸는 방법이다.한글로 컴퓨터이름을 지정했다가 여러가지 이유로 인해, 영어 이름으로 변경해야 할 경우가 생기곤 한다. 아래 방법을 따르면 쉽게 변경할 수 있다. 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 의..

Kprobes 사용하기 [1] : Ubuntu 12.04

Kprobes 사용하기 [1] : Ubuntu 12.04 동적 프로브 (Dynamic Probe) 라는 것이 있다. 이는 빌드를 다시 하지 않은 상태에서 디버깅을 지원한다.즉, 특수한 컴포넌트 빌드 없이 분석 정보를 수집하는 기법을 제공한다. 그중 커널 동적 프로브 (Kprobe) 는 리눅스의 커널 내부로 삽입할 수 있는 프로브이다. 우분투에서 kprobes를 사용하고자 하는가?다음 과정을 따른다. 커널 버전이 2.6.9 이상이면 kprobes는 이미 커널의 일부일 것이다. 패치를 적용할 필요가 없다.단지 몇가지 옵션을 활성화 한 뒤 커널을 다시 빌드 하면 된다.(If your kernel is >= 2.6.9, then kprobes should already be apart of the kernel...

[리눅스/Vi]Vim, Vi, GVim 에서 '작업 취소(Undo)' / '다시 하기(Redo)' 방법

Vi (Visual Display Editor) 리눅스나 유닉스를 처음 접하는 사람에게 vi는 매우 골치아픈 존재일지도 모릅니다.윈도우환경에서 문서 편집기를 써 본 사람이라면, vi는 매우 불편한 편집기로 생각 될지도 모르죠.그러나 vi 편집기에 익숙해지면 이보다 좋은 문서 편집기는 없다는것을 느끼게 될 것입니다. 문제는 익숙해지는데 오래걸려서 그렇죠(...먼산...) 만약 당신이 윈도우에 익숙한 사용자라면, 텍스트 에디터에서 무언가 잘못된 입력을 한 경우, Ctrl+Z 로 간단하게 그 잘못된 입력을 되돌릴 수 (Undo) 있다는걸 알고 있을것입니다. 리눅스에서 기본적으로 사용하는 Vi에디터 에서도 동일한 기능을 제공합니다만, 단축키가 다릅니다.방법을 알아봅시다. 이하 존칭은 생략합니다. 작업 취소만약 ..

[우분투] Ubuntu에 Mysql 설치

Ubuntu에 Mysql 설치 1. 우분투에서는 다음과 같이 입력하면 mysql 에 관련된 패키지를 검색하게 됩니다. $sudo apt-cache search mysql 그중에서 필요한걸 골라서 설치하면 됩니다. (mysql 서버 데몬을 설치하는 경우 바로 2번 부터) 2. mysql 서버 설치 $sudo apt-get install mysql-server 3. mysql 클라이언트 설치 $sudo apt-get install mysql-client 4. mysql 서버 설치 직후 UTF-8 설정을 해줍니다. 해주지 않을 경우 latin1 로 character encoding 이 자동 설정되는데, 이걸 그대로 두면, 한글 처리할때 난관이 찾아올것입니다. my.cnf 파일을 편집하기 위해 vi에디터로 해당..

리눅스 압축 tar gzip bzip2 zip 해제/압축 방법

리눅스 압축 명령/방법/종류 리눅스에서 많이 사용되는 압축파일로는 tar, gz, bz2, zip 등이 있다. 이들 각각은 나름대로의 고유한 압축방식을 가지고 있으며, 압축해제하는 방법 또한 다양하다. 그래픽 유저 인터페이스(GUI) 모드에서 리눅스를 사용하는 사람이라면 간단히 더블클릭으로 압축 관리 프로그램을 실행하여 압축 및 해제를 할 수 있지만, 텍스트 모드를 사용하는 상황이라면 이들 압축파일을 사용할 수 있는 명령들을 숙지하고 있을 필요가 있다. 오늘은 이러한 압축 파일들을 생성하고 압축해제하는 방법에 대해 알아보도록 하자. .tar 파일tar은 엄밀히 말해서 압축방식은 아니고, 일종의 묶음 파일로 이해하자. 이 tar과 gzip을 같이 사용하는 경우 tar.gz (또는 tgz)라는 확장자를 사용..

[우분투] 우분투 JDK 7 tar 패키지로 수동 설치하기

우분투에 JDK 7 tar 패키지로 수동 설치하기 # JDK 설치하기 우분투에 JDK 설치 관련으로 인터넷을 뒤져보면 apt-get (sun-java...) 이나 시냅틱 패키지 관리자 ( openjdk-... )로 설치가 된다고들 하던데... 난 안되는 상황이다. "설치할 수 있는 후보가 없습니다." 라는 메세지만 받았다. 그리고 rpm, deb등 설치 패키지들도 의존성관련 에러가 발생한다. 이럴때 살짝 멘붕이 온다. 하지만 당황하지 말자.설치 패키지로 잘 설치가 안된다면 다른 방법이 있다. 바로, tar 패키지 받아서 직접 경로에 설치하는 것이다. 아래 주소에 가면 x86용 JDK-7 tar 패키지를 받을 수 있을 것이다. http://www.oracle.com/technetwork/java/javas..

1