1. OS 기본정보 확인 명령
uname [-a | -i | -m | -n | -p | -r | -s | -X]
. 운영체제의 종류와 버전 확인
. 커널 아이디 확인
. options
-a : 운영체제 종류, 버전
-i : Machine
-m : Machine
-n : Node
-p : processor
-r : release
-s : system
-X : specify(구분된)
리눅스 32비트 64비트 확인
getconf LONG_BIT
32면 32비트
64면 64비트
cat /etc/release : 세부 버전 확인
쉘 상태에서(검은 창..) 확인할 수 있는 방법은..(별도의 수정을 하지 않았다면..)
cat /etc/issue
cat /etc/lsb-release
로 확인하실 수 있습니다.
 
또한
uname -a : 모든 정보(커널, gcc 등..)
uname -r : 커널 배포판
uname -v : 커널 버전
uname -o : 운영체제
psrinfo [-p | -pv | -v] : 프로세스 정보 확인
date
. 운영체제의 시간 확인 및 변경
# rdate [ip] : 다른 운영체제와의 시간 동기화
# date +%y%m%d_%H%M%S : form 지정
y : year
m : month
d : day
H : hour
M : minute
S : second
# cal
. 달력 확인
cal
cal 2002
cal 8 2002
pwd : 현재 디렉토리 확인
cd : 목표 디렉토리로 이동
PS1 : 쉘 프롬프트 변경
PS1='[프롬프트]'
man [-k | -l | -s section] CMD : 메뉴얼페이지
man ls : 기본
man -k ls : keyword 검색
man -l passwd : list 검색
man -s 1B ls : section 검색
passwd [username] : 사용자 패스워드 변경
# passwd : 현재 사용자 패스워드 변경
passwd USERNAME : 지정 사용자 패스워드 변경
 
단축키 설정
시스템 -> 키보드 바로 가기 -> 사용자 설정 바로 가기 여기서 원하는 프로그램을 단축키로 설정가능
에서
Ctrl+U (전체 행 삭제)
Ctrl+C (실행 중지)
Ctrl+Z (일시 중지)
stty (function) (key)
$ stty erase ^H : 백스페이스(지우는기능)은 백스페이스 키를 사용하겠다는 뜻,
^H는 백스페이스에 의해 만들어지는 아스키코드
$ stty kill ^U : kill은 전체 행을 삭제하는 기능,
$ stty intr ^C
$ stty susp ^Z
stty -a : 터미널 설정 내용 확인
명령행 편집 기능
자동 단어 완성 기능
tab 키
명령간 이동
키보드 화살표를 이용(이전 명령어 사용)
파일명 확장
특수 문자를 사용해 한번에 여러개의 파일을 명시할 수 있게 해주는 기능 = 글로빙
ex)
다음과 같은 파일들이 있다.
ls
Hello1world.c   Hello2world.c   Hello3world.c   HelloCCCworld.c   HelloHI.c
파일명에 숫자가 포함되어 있는 파일의 목록만 보려면
ls Hello?world.c
Hello1world.c   Hello2world.c   Hello3world.c
물음표를 입력하면 쉘은 물음표를 교체할 단일 문자를 찾는다.
결과로 Hello1world.c , Hello2world.c , Hello3world.c 를 표시.
 
ls Hello[13]world.c
Hello1world.c    Hello3world.c
대괄호 안의 문자와 일치하는 파일이 있으면 파일을 표시
 
대괄호는 하이픈문자와 합쳐 영역을 지정해줄 수도 있다
ls Hello[1-3]world.c
Hello1world.c   Hello2world.c   Hello3world.c
하이픈문자는 1부터 3까지의 '어떠한 문자와도' 일치한다는 의미
숫자라면 [0-9] 라고 표현할 수 있고, 알파벳이라면 [a-zA-z] 라고도 표현할 수 있다.(쉘이 대소문자를 구분)
(파일표시 순서는 아스키코드 집합 순서)
Hello와 world 사이에 몇 개의 문자가 와도 상관없을 때는 * 를 사용해서 볼 수 있다.
ls Hello*world.c
Hello1world.c   Hello2world.c   Hello3world.c     HelloCCCworld
 
숫자를 포함하는 소스(.c)나 오브젝트(.o) 파일을 보고 싶다면
ls *[0-9]*.[co]
 
캡쳐
print screen sys rq와는 다른 캡쳐로, 사진파일이 아닌 문서 파일로 저장
명령 > 파일명
명령의 출력이 파일로 보내진다. 
 
vi 편집기
command mode(명령 상태)에서 edit mode(입력 or 편집 상태) : i, a, o
edit mode(입력 or 편집 상태)에서 command mode(명령 상태) : ESC
command mode(명령 상태)에서 Last line mode(콜론 상태) : :, /, ?
Last line mode(콜론 상태)에서 command mode(명령 상태) : ENTER
vi -r 파일명 : 읽기 전용으로 문서 열기
vi -r 파일명 : 비정상 종료된 문서 복구(작업중이던 내용은 swp파일로 저장되어 있어 복구가 가능하다.)
:w : 문서 저장
:w! : 강제 문서 저장
:q : vi 종료
:q! : 강제 vi 종료
:wq : 저장후 vi 종료
:wq! : 저장후 vi 강제 종료
:ZZ : 저장후 vi 종료
:ZZ! : 저장후 vi 강제 종료
i : 현재 프롬프트에서 입력모드로 전환
R : 수정 모드로 입력모드 전환
u : ctrl + z 와 같은 기능
h(좌), j(아래), k(위), l(우)
:n : 마지막행 모드
d : 삭제
y : 복사
p : 붙여넣기
/검색어
n : 다음 일치 단어 찾기
N : 이전 일치 단어 찾기
:set nu : line number를 표시한다.
:set nonu : line nuber를 표시하지 않는다.
:set all : 모든 환경설정값을 보여준다.
:args : 현재 파일명 표시
#vi -r 파일명 : swp파일로 저장되어 있는 임시저장파일로 복구한다.

색상 설정
방법 1.
 :color evening or color morning
방법 2.
#vi -c "color evening" /etc/services
색상이 없으면 찾을 수 없다고 뜬다. 인터넷을 통해 색을 다운 받아야 한다.
 
복사
명령 상태에서 yy
3dd하면 3줄을 삭제할 수 있듯이
3p하면 3번 붙여넣기 가능
붙여넣기
명령상태에서 p
 
라인 합치기
J (shift + j) : 두줄로 되어있는 문장을 한 줄로 합친다.
.swp
비정상 종료를 하게 되면 swp파일때문에 vi 를 이용해서 편집이 불가능하게 된다.
파일이름.swp파일을 지우면 다시 수정가능
swp파일은 임시저장파일.. 
 os접근
:sh : vi 편집기에서 쉘로 전환
:exit 쉘에서 vi 편집기로 전환
:! 커맨드 : os 명령 사용
:r !커맨드 : os 명령의 출력값을 현재 vi 편집기로 읽어들인다.
 
 

root권한으로 로그인

su - root : 루트 계정으로 접속 (비번은 설치시 비번)

sudo passwd root : 터미널을 열고, root 계정으로 접속하는 암호 설정

root 계정 암호 입력

sudo apt-get update : 암호 업데이트

재부팅하면 root 계정을 사용

root 계정으로 접속 : sudo su root (슈펴유져권한) 또는 su root (일반사용자를 root유져로 전환) : 프롬프트가 $에서 #으로 바뀜

sudo 와 su는 약간의 차이가 있으며 슈펴유져(SU)로 실행과 유져전환(substitute user) 차이 정도만 알고 있는데요 ..자세한 사항은 우분투 다큐먼트자료실(영문임)에서 보시기 바랍니다 

su - root : root로 전환하게 되면 사용자 환경변수 설정까지 몽땅 전환이 되는 것입니다 그래서 - 를 입력할때와 넣지 않을 때와 차이가 있습니다

sudo passwd -dl root : root계정 비활성

 

리눅스 계정 비밀번호 변경

passwd

 

IP 설정 ---------------------------------------------------------------------------------------------------

 

방법 1 (명령어)

ifconfig                                                       ip확인

ifconfig ip주소 netmask 주소                ip 변경

ifconfig                                                      ip 확인

 

방법 2 (파일 수정)

ifdown eth0 : 랜카드를 잠시 중지 (생략가능)

vi etc/network/interfaces

auto lo

iface lo inet loopback


auto eth0

iface eth0 inet static

address 192.168.10.11

netmask 255.255.255.0

network 192.168.0.0

broadcast 192.168.10.255

gateway 192.168.10.1

dns-nameservers 165.243.137.34 165.243.137.23

esc

:wq

vi /etc/resolv.conf 

nameserver 165.243.137.34 
nameserver 165.243.137.23 

esc

:wq

cd ..

cd init.d

./networking restart

ifup eth0 : 랜카드 다시 시작 (생략)

네트워크 기본 설정

 

system-config-network 
장치 설정
네트워크 하드웨어 장치가  eth0인 것을 확인
<새 장치>를 만든다. (새장치 엔터 → 이더넷 엔터)
다음과 같이

OK 누르시고 저장 
다시 터미널로 돌아오기 위해서,  저장&종료를 
앞에서 설정한 네트워크 정보를 새로 적용하기 위해 service network restart 를 입력
설정한 네트워크가 잘 작동하는지 알아보기 위해 핑
ping -c 5 www.naver.com
ifconfig eth0 : IP정보 확인
reboot

 

 

우분투 JDK 6 및 이클립스 설치

 

JDK를 설치 : 

$sudo apt-get install sun-java6-jdk : 이 명령어로 설치가 안되면 아래 명령어로 repository 추가

$sudo add-apt-repository ppa:ferramroberto/java

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" (안해봄)

$sudo apt-get update : 업데이트

$sudo apt-get install sun-java6-jdk : 다시 설치

중간에 Y 선택 과정이 있다.

그리고 설치하고 나면 Yes 선택은 tab을 이용해 ..

 

JDK는 Java Development Kit의 약자

JRE는 Java Run Environment의 약자

자바는 플랫폼에 독립적

OS나 기타 환경에 구애받지 않고 여기저기서 쉽게 돌릴 수 있다는 뜻

PC에서 만들어도 모바일 환경, 리눅스, 유닉스 등등에서 잘 돌아간다는 말

개발자가 아닌 이상 자바로 프로그램을 직접 짜서 돌릴 필요는 없다.

그냥 돌리기만 함

개발 환경을 꾸며놓을 필요가 없다

그냥 돌리기만 하면 끝. 고로 JDK가 아닌

자바(Java)로 만들어진 프로그램 돌리기(Run) 위한 환경(Environment)을 꾸미는 것이 JRE.

자바(Java) 언어로 프로그램을 개발(Development)을 하기 위한 도구(Kit)를 설치하는 것이 JDK.

개발하면서 실행도 해봐야 결과를 알수있으므로 JDK에는 JRE가 포함되어있다.

http://blog.naver.com/hakchangs/130110701396


<< add-apt-repository를 이용하여 /etc/apt-sources.list 저장소에 jdk 추가하기 >>

$ sudo add-apt-repository ppa:ferramroberto/java

$ sudo apt-get update (/etc/apt/sources.list 업데이트)


<< java 설치하기 >>

$ sudo apt-get install sun-java<version>-jdk


<< 설치된 모든 자바 목록 확인 >>

$ sudo update-alternatives --list java


< 여러 버전의 자바가 설치된 경우 우선순위 설정>

$ update-alternatives --config java 

 




* SDK 설치하기

안드로이드 홈피에서 SDK 다운 받고 압축 풀은 후에, 
tools/android update sdk 
해당하는거 업데이트 받는다.


* CTS 설치

startcts 파일에 SDK 경로를 적어준다. 
gedit cts/android-cts/tools/startcts 
..... 
SDK_ROOT=/home/android/android-sdk-linux_86 
.....

 

gcc

리눅스용 c컴파일러

gcc 설치

#yum -y install gcc : gcc 설치, 인터넷 연결 필요

컴파일

gcc -o test test.c : test.c를 컴파일해 test라는 실행파일을 만든다.

 

eclipse 설치 :

방법 1.

sudo tar xvzfp 파일이름 : 다운 받은 Eclipse 압축파일을 임의의 폴더에 푼다.

sudo mv eclipse /usr/local : eclipse 폴더를 /usr/local 폴더로 옮긴다.

cd /usr/local : /usr/local 폴더로 이동한다.

chmod +x eclipse : 이클립스의 권한과 관련된 모드를 변경한다.

sudo vi /usr/bin/eclipse : /usr/bin/eclipse 를 만든 후 path를 설정하여 eclipse를 구동할 수 있도록 한다.

#!/bin/sh

export ECLIPSE_HOME="/usr/local/eclipse"

$ECLIPSE_HOME/eclipse $*

:wq : 저장 후 종료

sudo chmod 777 /usr/bin/eclipse : 접근권한을 설정한다.

sudo vi /usr/share/applications/eclipse.desktop : 데스크탑 메뉴에 Eclipse를 추가

[Desktop Entry]

Encoding=UTF-8

Name=Eclipse

Comment=Eclipse IDE

Exec=eclipse

Icon=/opt/eclipse/icon.xpm

Terminal=false

Type=Application

Categories=GNOME;Application;Development;

StartupNotify=true

:wq


eclipse : 이클립스를 실행


방법 2.

http://www.eclipse.org/downloads site에 가서 Eclipse 를 다운로드 
이놈도 apt-get install eclipse-sdk or eclipse 로 가능할 듯 싶으나 그냥 별개로 가기 위해 다운로드 함 
Eclipse IDE for Java Developers (92 MB) 
파일명 : eclipse-java-galileo-SR2-linux-gtk.tar.gz 
$> tar xvzf eclipse-java-galileo-SR2-linux-gtk.tar.gz 
$> ./eclipse 
Help->Install New software 선택 
click add 
location field에 https://dl-ssl.google.com/android/eclipse/ ok 버튼 클릭 
Developer Tools 체크박스 선택 -> Next 
라이센스 선택후 -> finish 선택 
Eclipse 에 android 경로지정 : window->preferences-android에 /home/<your_home>/google/android- 
sdk-linux_86 선택 후 apply


* firefox 를 PC Plus 예외 처리 안 해도 인터넷 되게 하려면 
브라우져에서 about:config 
general.useragent.override // Mozilla/5.0 (X11; U; en-US; rv:1.8.1.6) Gecko/2007100814 Firefox/2.0.0.6

 

방법 3.

http://tae2564.blog.me/70133365313

 

eclipse tool-tip description (popup code assist) 색깔 변경

ubuntu의 system -> pregerences -> appearance -> customize -> colot 탭 -> tooltips -> bachground color 변경

참고 : http://www.tipstank.com/2010/05/23/solve-eclipse-black-pop-up-code-assist-box-in-ubuntu-10-4-lucid/

eclipse 바탕색 변경

eclipse의 windows -> preferences -> general -> editors -> text editors ->appearance color options -> background color -> 변경

참고 : http://stackoverflow.com/questions/186118/eclipse-fonts-and-background-color

 

eclipse 라인 넘버 line number 보이기

메뉴바의 window -> preferences -> general -> editors -> text editors -> show line numbers

 

eclipse 검색(search)할 때 생기는 오류해결

Search has encountered a problem이 발생하면, 프로젝트를 refresh하면 다음부터 오류가 발생하지 않는다.

 

프로그램

 리눅스 우분투 캡쳐 프로그램 shutter
리눅스 백신 프로그램 clamav (우분투 소프트웨어센터에서 다운)


usb 드라이버 설치

=> http://developer.android.com/guide/developing/device.html 참조 
1004 는 LG, 05C6 은 Qualcomm 
gedit /etc/udev/rules.d/51-android.rules 
------------------------------------- 
SUBSYSTEM=="usb",SYSFS{idVendor}=="1004", SYMLINK+="android_adb", MODE="0666" 
SUBSYSTEM=="usb",SYSFS{idVendor}=="05C6", SYMLINK+="android_adb", MODE="0666"

sudo /etc/udev/udev.conf reload 
sudo /etc/init.d/udev reload

 

 usb 드라이버에 대한 값이 정의되어있는 소스는 
System/Core/adb/usb_vendors.c

 

폴더 정보


/root : 관리자 홈 디렉토리

/boot  : 커널 디렉토리 (부팅 관련 파일 )

/etc  : 시스템 설정파일 디렉토리

/usr : 응용프로그램 디렉토리

/var : 로그파일, 메일 디렉토리

/lib : 라이브러리 디렉토리

/tmp : 임시 디렉토리

/home : 일반계정 홈디렉토리

/dev : 장치파일 디렉토리

/proc : 프로세스 정보 디렉토리

/media, /mnt : CDROM 마운트 디렉토리


절대 경로, 상대 경로

/home/sim : 절대경로

../sim : 상대경로


명령어가 저장되어 있는 폴더

/bin : 슈퍼유저(root) + 일반유저 = 모든 사용자가 쓸 수있는 명령어

/sbin : 슈퍼유저(root)용 명령어

/usr/bin : 대부분의 사용자 명령어

/usr/sbin : 시스템 관리용 명령어

/usr/local/bin : 리눅스 OS 설치 후에 추가된 프로그램 명령어

 

 

명령어

pwd : 현재 나의 폴더 위치

man 명령어 or 명령어 --help : 명령어에 대한 도움말을 보여준다.

| ( 쉬프트키+역슬래쉬 ) :  파이프라고 불리는데, 또다른 명령을 한줄에 여러개 쓸 때 사용된다.

whereis : 실행파일 위치, 메뉴얼 파일 위치를 출력한다.

cat : 해당 파일의 내용을 보여준다.  ex) cat test.txt

cat -n test.txt : 줄번호를 표시해서 보여준다.

mkdir : 폴더 생성 ex) mkdir test

rmdir : 폴더 삭제

clear : 화면을 깨끗이 지운다

alias : 새로운 명령어를 만든다 ex) alias sim='cd /home/sim'

ex)alias en='export LANG=en_US.UTF-8' 영문 설정

ex)alias ko='export LANG=ko_KR.UTF-8' 한글 설정

ex)alias ko='export $LANG=ko_KR.UTF-8'$를 붙이면 LANG라는 변수의 내용을 보여준다(return한다)

export는 환경변수로 만들어주는 명령어, LANG라는 환경변수를 만들고, ko_KR.UTF-8을 집어넣는다.

재부팅하면 alias 설정이 초기화 된다.

.bashrc 쉘에 저장하면 영구적으로 유지된다.

vi .bashrc에서 alias 추가

unalias 이름    -> alias 해제

\명령 -> 명령어 앞에 백슬래시가 붙으면 alias를 무시하고 원래의 명령을 실행하라는 뜻

PATH 잡는 방법

 

echo $PATH -> 현재 설정된 PATH를 확인

기존의 PATH는 무시하고 /bin 3개 경로만 추가하고자 한다면

/usr/bin

/usr/local/bin/

PATH=/bin:/usr/bin/:/usr/local/bin 이렇게 입력하고

export PATH 하고

echo $PATH  하면 PATH가 변경된 것을 확인할 수 있다.

터미널에서 입력하는것이 불편하다면

/root/.bash_profile에 아래의 두라인을 넣어주고 다시 로그인하면 된다.

PATH=/bin/:/usr/bin/:/usr/local/bin

export PATH

.bashrc

/home/사용자명/.bashrc

~/.bashrc

PATH=/usr/bin:$PATH:

 

프롬프트 관련

root로 로그인하면, 프롬프트 부분이 [root@localhost~]# 이런식으로 되어있다.

이 프롬프트를 변경가능

echo $PS1 (ps one) : PS1은 프롬프트를 저장하고 있는 환경변수이다.

환경변수의 내용을 확인하기 위해서 내용을 반환하는 echo명령어를 사용

$를 사용해 변수내용을 확인 가능, echo PS1을 하면 단순히 PS1만을 반환한다.

PS1="c:\>" : 터미널의 프롬프트가 c:\>로 변경된다.

이렇게 변경하면 폴더가 변경되어도 프롬프트상에서 폴더 위치를 알수 없기때문에 pwd를 이용해 현재 폴더 위치를 확인해야한다.

 

vi .bashrc 를 열어서

export PS1="[\u@\h\w]\$" 를 추가

source .bashrc를 통해서 bashrc를 다시 읽는다.

참고 : \u 사용자 이름 

 

\h 호스트 이름 

\$ root이면 #, 일반사용자이면 $ 

\w 현재 작업 디렉토리 

\W 현재 작업 디렉토리의 뒷부분 표시 

\t 현재 시간을 HH:MM:SS\d 현재 날짜를 Tue May 26 

\s 쉘 이름 

\# 현재 명령의 명령 번호

\! 현재 명령의 history 번호

ubuntu 기본 프롬프트

PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w\$"

 

 

ls : 현재 폴더의 파일 및 폴더를 보여준다

ls -a : 세부 내용까지 포함해서 보여준다.

 drwxr--r-- : 맨앞의 d는 디렉토리를 뜻한다.

다음 3개, rwx는 user(계정)가 read, write, execute 권한을 가진다는 뜻

다음 3개, r--는 group(계정)가 read만 가능하다는 뜻

다음 3개, r--는 others(계정)가 read만 가능하다는 뜻

im-switch -c 한글입력방법 바꾸기

ar

오브젝트 파일을 이용해 라이브러리를 제작한다.

사용법

오브젝트 파일 생성 : gcc -c test.c test2.c

라이브러리 파일 생성 : ar r libab.a a.o b.o

라이브러리 자체에 정보 추가 : ranlib libab.a

  ar rs libab.a

 

 

make 명령어

함수를 결합하는 방법

컴파일 할 때 빌드 시간, 의존성 문제를 해결해준다.

빌드 방법을 파일로 작성하여  make에게 넘겨주는데, 이 파일을 makefile이라 한다.

보통 현재 디렉토리에 makefile이라는 일정한 규칙을 준수하여 목표파일(target file)을 만든다

makefile의 이름을 다르게 명시하고 싶을 때는 다음과 같다.

make -f makefile.linux

멀티플랫폼용 소스들은(windows용, linux용) make win, make linux 등과 같은 식으로

makefile을 여러개 만들어두고 다음과 같이 적절하게 선택해 컴파일한다.

make linux or make win

다른 사람에게 공개하는 소스라면 더욱 make를 사용해야한다.

보통 make라고만 치면 원하는 결과가 나올 수 있도록 하는 것이 편한다.

makefile 작성

vi makefile

main:   main.o test.o  -> main이 만들어지기 위해서 필요한 구성요소를 적는다.

gcc -o main main.o test.o -> main이 만들어지기 위해서는 컴파일된 main.o, test.o가 필요

반드시 tab으로 띄어야 한다.

main.o: main.c -> 컴파일된 main이 만들어지기 위한 명령어는

gcc -c main.c -> gcc -c main.c 이다.


test.o: test.c -> main과 마찬가지

gcc -c test.c

(형식

목표:  목표를 만드는데 필요한 구성요소들...

목표를 달성하기 위한 명령 1

목표를 달성하기 위한 명령 2

...)

Makefile은 약간의 오타에도 에러가 발생한다

위와 같이 makefile을 작성하고 make or make main을 실행하면

gcc -c main.c

gcc -c test.c

gcc -o main main.o test.o 순서로 명령어가 실행된다.

그리고 ./main으로 실행하면 프로그램이 실행된다.

변경된 파일만 컴파일하고 변경되지 않은 파일은 컴파일하지 않고 이전에 컴파일한 파일을 이용한다.

make: `main' is up to date. -> main를 다시 만들 필요가 없다고 생각

clean

makefile에 다음 내용을 추가한다.

clean:

rm -f main main.o test.o -> main main.o test.o를 삭제하는 명령

make clean으로 clean명령을 실행한다.

all

다음 내용을 makefile 맨 앞에 추가한다.

all : main

all 이라는 명령은 목표에 그 밑에 나오는 다른 목표만이 들어있다.

ex)

all : main1 main2 main3

main1 : ~

main2 : ~

main3 : ~

명령 추가

CC = gcc -> CC = gcc 변수를 선언, 실제 gcc 문구들은 $(CC)로 바꾸어서 사용한다.

쉽게 말해서 매크로 기능

CC = -g -c 또는 CC = main.o test.o 와 같은 긴문장을 해결 할때 

간편하게 작성하는 역할

all : main.o test.o

@echo TEST C MAKE # echo 메시지를 출력한다 -> @를 사용해서 결과 메시지를 출력하지 않는다.

@$(CC) -o emb main,o test.o -> $(CC) -o emb main,o test.o에 해당하는 메시지를 출력하지 않는다.

main.o : main.c

@echo main.o를 만들었습니다 -> echo를 사용해 메시지를 출력한다.

@$(CC) -c main.c -> "main.o를 만들었습니다"가 출력되고

-> @가 있기때문에 echo는 출력되지 않는다.

test.o : test.c

@$(CC) -c test.c

@echo main.o를 만들었습니다

clean :

@rm -rf main.o

@rm -rf test.o

@rm -rf emb

run : all

@ls -al

@./emb

#은 주석 처리...

추가 : http://starkapin.tistory.com/94

 

 심볼릭 링크 걸기

ln -s : 파일간의 링크를 걸수 있다.

-s 옵션은 하드링크가 아닌 심볼릭 링크를 만든다.

#>ln -s  파일 또는 디렉토리명1 파일 또는 디렉토리명2

- 파일 또는 디렉토리명1 은 실제 파일또는 디렉토리 경로를 의미 합니다.

- 파일 또는 디렉토리명2 는 링크를 걸어줄 파일 또는 디렉토리명 입니다.

사용법

#>ln -s  ../test/test  thetest

현재 위치에서 thetest라는 폴더를 생성하고 이폴더에 ../test/test라는 폴더를 링크를 걸어줍니다.

thetest폴더로 접근을 하면 ./test/test폴더의 모든 파일이 보입니다.

(윈도우의 바로가기 기능)

ex)ln -s 여기폴더의파일 저기폴더의파일

여기 폴더의 파일을 저기 폴더의 파일로 복사해서 링크...

#심볼릭 링크 삭제

#>rm thetest

rm : remove symbolic link thetest? y


캐쉬메모리 

모니터링을 하다가 캐쉬메모리가 너무 많다 싶으면 터미널 창에 이 몀령을 실행시키면 된다.

echo 3 > /proc/sys/vm/drop_caches

명령이 길기때문에 매번 타이핑 하기가 번거롭다.
alias 기능을  짧게 해준다.
홈디렉토리 안에 .bashrc 파일에 추가시킨다.

alias mm=’echo 3 > /proc/sys/vm/drop_caches’

이렇게 해놓으면 터미널 창에 mm 만 치면  된다.

 파일 관련

mv : 파일 이름 변경 및 파일 이동 ex) mv test.txt test1.txt : test.txt파일을 test1.txt로 옮긴다(이름 변경)

ex) mv test.txt /home : text.txt파일을 home 폴더로 이동시킨다.

cp : 파일 복사 ex) cp test.txt test1.txt : test.txt를 test1.txt로 복사

ex) cp test.txt /home : test.txt를 home 폴더로 복사

-a : 원본 파일의 속성, 링크 파일 정보를 유지하며 복사
-b : 파일이 존재할 경우 기존 파일을 백업
-d : 복사할 원본이 심볼릭 링크 일 때 심볼릭 링크 자체를 복사
-f : 복사할 대상이 있으면 강제로 지우고 복사
-i : 복사할 대상이 있으면 강제로 지우고 복사
-r : 폴더를 복사 할 때 사용
-v : 복사 과정을 자세히 출력
-u : 복사할 대상의 변경 날짜가 같거나 더 최근 것이면 복사하지 않음

touch : 파일 생성

rm : 파일 삭제

rm -r test : 모두 삭제

rm -ri test : 삭제시 하위에 파일이나 폴더가 있을 때는 물어봄

권한 변경

chmod (option) (권한) (폴더명)

옵션

-R : 하위 경로에 있는 파일들과 폴더의 권한을 일괄 변경

권한

r(read), w(write), x(execute)

3개의 문자가 3번 모여서 9개의 문자로 이루어진다. ex)rwxr--r--

기호방식

r-x : 그룹 권한
chmod [u | g | o | a] [+ | - | =][r | w | x]  {디렉토리명}
ugoa : user, group. other, all (생략하면 all)
+-= : 추가, 삭제, 지정(기존 권한을 무시하고 새로)
rwx : read, wirte, execute

예 : 
1. chmod go-rx {디렉토리명} - group과 other에게서 read,execute 권한 삭제
2. chmod o= {디렉토리명} - other를 권한을 없게 만듬

파일 속성 변경 (Linux만 해당)

명령어 chattr [option] [+-=속성] {파일명}
읽기전용모드로 하면 root 도 설정을 해제하지 않으면 지울 수 없음.
-R : 하위 경로에 있는 파일들과 디렉토리들의 권한을 일괄 변경

lsattr 명령으로 속성을 확인 할 수 있음.

ssh (secure shell)

ssh 는 쉽게 원격 컴퓨터에 안전한 암호화 된 연결을 위한 프로토콜이다.
명령어 구조 : ssh userID@ip주소

whoami 명령어를 날려보면 userID가 리턴

접속을 close하기 위해서 exit

scp

scp명령어는 네트워크상 원격 컴퓨터간 데이터 복사 명령어이다.

 

업데이트 및 패키지 인스톨

* 패키지 목록을 보려면 

cd etc/apt 
gedit sources.list &

* 업데이트 받으려면 

sudo apt-get clean && sudo apt-get autoclean 
sudo apt-get update

* 각종 패키지 설치 

sudo apt-get install ssh 
sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl 
sudo apt-get install valgrind 
sudo apt-get install sun-java6-jdk 
sudo apt-get install zlib1g-dev 
sudo apt-get install libncurses5-dev

* git 설치 및 repo 설치

* 소스 받기

mkdir mydroid 
cd mydroid 
repo init -u git://android.git.kernel.org/platform/manifest.git 
repo sync

업데이트 창 뜨지않게 하기

메뉴바의 시스템 -> 기본설정 -> 소프트웨어 업데이트 -> 하지 않음

 

SAMBA 설정

* 목록 찾을때 

sudo apt-cache search samba

* 삼바깔려면, 

sudo apt-get install samba samba-common 
sudo vi /etc/samba/smb.conf 
----------------------------------------------------- 
[<your_account>] 
path = /home/<your_account> 
writeable = yes 
;read only = no 
;available = yes 
;browseable = yes 
;public = yes 
----------------------------------------------------- 

sudo /etc/init.d/samba restart 
sudo smbpasswd -a <your_account> 
sudo /etc/init.d/samba restart

 

 

 

 쉘 (shell)

 리눅스 명령어 작업을 할 때는 자동으로 쉘을 사용하게 된다.

즉 리눅스 명령어를 입력하는 자체가 쉘을 사용한다는 것이다.

리눅스의 커널과 사용자를 연결시켜 주는 역할 (c언어로 치면 컴파일러와 비슷한 역할)

cat /etc/shells : etc 폴더의 쉘들을 확인한다.

[ ※참고. TUI로 전환하시려면 Ctrl + Alt + F1   GUI로 전환하시려면 Ctrl + Alt + F7 ]

쉘의 종류

bash
     리눅스에서 가장 많이 사용하는 쉘
     명령행 편집, 히스토리 치환, 그리고 셸의 원조인 본쉘과의 호환 기능도 있다.
     POSIX와의 호환 가능.
csh
     C 쉘.
tcsh
     C쉘에 명령행 편집 기능을 할 수 있게 해주는 확장형 쉘.
ksh
     콘 쉘, 리눅스를 통틀어 모든 유닉스에서 가장 많이 사용하고 있는 쉘
sh
     쉘의 원조, 본 쉘.
zsh
     Z 쉘, 가장 최근에 나온 쉘

echo $SHELL : 지금 사용하고 있는 쉘을 확인
chsh : 쉘 변경

쉘을 변경하려면 먼저 그 쉘을 설치하고 /etc/shells에 등록해야한다.

 


리눅스

가정용 -> 우분투(Kubuntu,Xubuntu,Linux mint)
우분투의 엄마 -> 데비안
서버용 -> 센토스, 레드햇, 페도라
궁극체 -> 젠투
최초 -> 슬랙웨어

유닉스

HP : HP-UX
Sun Microsystems: 솔라리스

 

 

메비비트(Mebibit, Mibit 혹은 Mib)

이진 접두어인 메비와 컴퓨터 데이터의 가장 작은 단위인 비트가 합쳐진 자료량을 의미한다. SI 접두어를 사용한 메가비트(Mb)와 구분된다.

1 Mib = 1,048,576 bits

1 메가비트 = 1,000,000 bit = 125,000 byte = 125 kbyte

 

 

http://blog.naver.com/skout123/50130398316

 

http://www.eclipse.org/forums/index.php/m/767781/

http://wiki.eclipse.org/Older_Versions_Of_Eclipse

 

 



vi
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         -> 입력하는 대로 겹쳐 써서 변경
s          -> 삽입에 의해 한 단어의 변경
C         -> 커서의 위치로부터 줄 끝까지 삽입에 의한 변경
cc        -> 전체 줄을 삽입에 의한 변경
S          -> 전체 줄을 삽입에 의한 변경
cmove   -> 커서부터 move까지 삽입에 의해 변경
~          -> 대,소문자 바꾸기
         -> 편집 버퍼를 수정했던 마지막 명령을 취소
         -> 현재 줄을 저장
.           -> 편집 버퍼를 수정했던 마지막 명령 반복
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와 같도록 매크로 정의

find tip
1. 모든파일검색(현재폴더 및 하위폴더로 부터 "ABC"란 문자를 찾아서 파일명(grep -H)과 포함된 라인을 같이 출력)
    find ./ -name "*" -exec grep -H ABC {} \;
    find ./ -type f -print | xargs grep -H "ABC" /dev/null
    egrep -r ABC *
2. 부분파일명검색(*.conf 파일을 찾아서 출력)
    find ./ -name "*.conf" -print
3. 파일사이즈검색(5Mb이상의 파일을 출력)
    find /home -size +5000000c -print
4. 사용자검색(UID로검색 - 시스템부하줄 수 있음)
    find / -user 501 -print
5. 마지막엑세스시간검색(최근 5분)
    find / -cmin -5
6. 그룹검색(20인그룹의 파일과 폴더를 102로 소유그룹바꿈)
    find / -group 20 -exec chown :102 {} \;
7. 권한검색 (쓰기가능한 디렉토리)
    find / -perm -0002 -type d -print
8. 권한검색 (쓰기가능한 파일)
    find / -perm -0002 -type f -print
    find / -perm -2 ! -type l -ls
9. 사용자검색(파일소유주가 없는 파일)
    find / -nouser -o -nogroup -print
10. 시간검색(마지막엑세스가 2일지난파일) 
find / -mtime 2 -o -ctime 2 
-atime : 파일을 열어본 시간 또는 디렉토리에 cd명령으로 접근한 시간
-mtime : 파일의 내용이 변경된 시간 ls -l 에서 나오는 시간
-ctime : 파일의 정보가 변경된 시간 chmod,chown과 연관성이 있음
파일명 예제
"~" or "a b c" 등의 이상한 파일등은 지울때 위험 하기도 하고 지우기도 힘들다
1. 정규표현
    rm -rf \~
    rm -rf "a b c"
2. i-node를 통해서 지우기
   # ls -i
   # 32471 a b c  
   # find . -inum 32471 -exec rm -rf {} ';'
   or
   # find . -inum 32471 -exec rm -rf {} \;

Eclipse 팁 
#1 (코드 Style 설정)
Eclipse는 코드 형식화를 지원
해당 코드 위에서 [ Ctrl+Shift+F ] 누르면 코드가 정리된다.
Eclipse에서 설정된 Code Formatter의 설정에 따른 것. 
프로젝트에서 개발된 모든 코드에 같은 코딩 규칙을 적용하고 싶다면
결정된 Coding Convention에 따라 Code Formatter의 설정을 바꾼 다음, 
그것을 XML 파일로 Export하고, 개발자에게 Import 시켜 적용하도록 하면 된다. 
Windows - Preferences 에서 "Java - Code Style - Code Formatter"를 선택
Eclipse 3.0은 기본적으로 2가지 코드 형식을 기본적으로 내장하고 있다.
Java Conventions를 선택하고, Show.. 버튼을 누르면 해당 설정을 커스터마이징 할 수 있다. 
탭 사이즈와 괄호의 위치 등 모든 것을 변경할 수 있다. 
Eclipse 팁 #2 (Import문 정리)
사용되지 않는 라이브러리를 import한 경우 Eclipse는 앞에 전구를 키고 표시해준다. 
이때 [ Ctrl+Shift+O ] 버튼을 누르면 사용하지 않는 모든 import 문이 정리된다.
또 한가지 유용한 기능은 같은 패키지 내에서 여러 개의 클래스를 import할 경우. 
예를 들어 한 패키지 내에서 4개 이상의 클래스를 import 한다면, 
그것을 *로 합쳐서 표시하도록 하고 싶을 때, window - preference 로 가서 java - code style - organize import에서 
Number of imports needs for .*의 수를 4로 해놓으면, 같은 패키지에서 4개이상의 클래스가 임포트되면 *로 합쳐서 표시해준다. (Apply 버튼 바로 위에 그 항목이 있다.)
Eclipse 팁 #3 (영역별 주석처리) 
주석처리할 영역을 선택 한 다음 [ Ctrl+/ ]
주석을 해제하고 싶다면 다시 한번 더 [ Ctrl+/ ]
Eclipse 팁 #4 (에디터칸이동) 
[ Alt+Tab ]과 같은 기능의 단축키 : [ Ctrl+F6 ] 
바로 이전으로 이동할 때는 [ Ctrl+F6 ]이 편하지만, 
여러 개 중 하나를 이동할 때는 [ Ctrl+F6 ]을 누른 후,
[Ctrl+화살표] 를 이용해서 원하는 에디터로 이동하는 것이 편하다. 
Eclipse 팁 #6 (줄번호 표시 및 줄 이동하기)
해당 라인으로 이동하기 위한 단축키 [ Ctrl+L ]. 
윈도우와 같이 Ctrl+G 로 단축키를 변경해서 쓰시는 것도 좋을 듯. 
줄번호가 항상 표시되도록 하고 싶다면 window - preference 에서, Java - Editor로 이동한 다음 "Show line numbers"를 체크하면 된다. 
Eclipse 팁 #7 (변경사항 추적하기) 
변경 사항을 추적하고자 하는 파일을 PackageExplorer에서 선택 후, 오른쪽 버튼을 눌러 컨텍스트 메뉴에서 [ compare with Local History ] 선택.
시간대 별로 이전의 작업 결과를 볼수 있다.
만일 이전의 코드로 되돌아가고 싶다면, 같은 방법으로 파일의 컨텍스트 메뉴에서 [ Replace with ] 를 선택하고, [ Local History ]에서 변경하면 된다.
Eclipse 팁 #8 (Javadoc 문서생성 ) 
JavaDoc 형태의 주석으로 소스코드 문서화가 된 상태라고 가정하고, Project 메뉴의 [ Generate Javadoc... ] 기능을 실행하면 간편한 마법사의 지원을 통해 Javadoc 문서를 생성할 수 있다. 
일반적으로 프로젝트 루트 밑에 doc 이란 폴더 안에 JavaDoc으로 생성된 API 문서를 포함한다.
생성될 API 문서에 포함시킬 정보를 선택하는 것이 마법사의 다음 단계이다. 
Finish 버튼을 누르면 Package Explorer에 아래와 같이 API 문서가 생성된 것을 확인할 수 있다. 
Eclipse 팁 #9 (전체프로젝트 ZIP 백업) 
전체 프로젝트를 백업하기 위해 압축을 해야 할때 유용한 기능. 
File 메뉴의 Export 기능을 실행하면 아래와 같은 윈도우가 뜬다. 
선택요소 중에서 ZIP 파일을 선택. 
다음 화면은 백업할 요소들을 선택하는 것이다. 
일반적으로 자동 생성되는 JavaDoc 문서나 Classes 파일들은 백업하지 않는다. 
적당한 백업 파일 이름과 위치를 결정하고 Finish 버튼을 누르면 백업이 완료된다.
 
이클립스에서 유용한 단축키
 
Ctrl + e : 한줄지움
Ctrl + w : 메뉴보여줌
Ctrl + space : 클래스등 코드 도움
Ctrl + / : 한줄 주석 반대는 Ctrl + \
Ctrl + , : 찾기나, TASK항목 이동
Ctrl + . : 이동
Ctrl + F6 : Editor 선택
Ctrl + F7 : View 선택
Ctrl + F8 : Perspectieve 선택
Ctrl + F11 : 디버깅
Ctrl + 1 : QuickFix 실행

Ctrl + Shift + b : 브레이크 포인트
Ctrl + Shift + e : 현재 캐럿에서 끝까지 삭제
Ctrl + Shift + f : 코드 포맷팅
Ctrl + Shift + m : 자동 임포트
Ctrl + Shift + o : 임포트 자동 정리
Ctrl + Shift + space : 입력 파라미터 정보 보여줌

1. 소스편집

Ctrl + O : 모든 클래스, 프로퍼티 트리 보기, 선택가능
CTRL + o + o : 트리형태로 메소드 구성, 한번 더 누르면 메소드 상속위치 검색
Ctrl + Shift + R : 자원열기(폴더내용이 검색된다)
Alt + Shift + R : 변수 이름 변경하기 전에 누르면 변수를 사용한 모든 곳이 바뀐다.
Ctrl + Shift + F : 코드 포맷팅
(자바 코딩 규칙에 맞게 스타일을 변경해준다)
2. Alt + ->, Alt + <- : 이후, 이전
Ctrl + Shift + X : 대문자로
Ctrl + Shift + Y : 소문자로
Ctrl + PgUp (좌우창이동)
Ctrl + D 한줄 삭제
Alt + Shift + S : Source 메뉴
Ctrl + M : 전체화면토글
Ctrl + i : 소스정리
F4 : 클래스명을 선택하고 누르면 해당 클래스의 Hierarchy 를 볼 수 있다.
1. Ctrl + Space : 입력 보조장치(Content Assistance) 강제 호출 => 입력하는 도중엔 언제라도 강제 호출 가능하다.
2. F2 : 컴파일 에러의 빨간줄에 커서를 갖져다가 이 키를 누르면 에러의 원인에 대한 힌트를 제공한다.
3. Ctrl + l : 원하는 소스 라인으로 이동
로컬 히스토리 기능을 이용하면 이전에 편집했던 내용으로 변환이 가능하다.
4. Ctrl + Shift + Space : 메소드의 가로안에 커서를 놓고 이 키를 누르면 파라미터 타입 힌트를 볼 수 있다.
 
2.템플릿
1. sysout 입력한 후 Ctrl + Space 하면 System.out.println(); 으로 바뀐다.
2. try 입력한 후 Ctrl + Space 하면 try-catch 문이 완성된다.
3. for 입력한 후 Ctrl + Space 하면 여러가지 for 문을 완성할 수 있다.
4. 템플릿을 수정하거나 추가하려면 환경설정/자바/편집기/템플리트 에서 할 수 있다.

CTRL + 객체클릭(혹은 F3) : 클래스나 메소드 혹은 멤버를 정의한 곳으로 이동(Open Declaration)
CTRL + SHIFT + / : 선택영역 block comment 설정
CTRL + SHIFT + \ : 선택영역 block comment 제거
ALT + SHIFT + r : 변수 및 메소드 변경

SHIFT + ALT + s, r : getter/setter 자동생성

CTRL + F11 : 실행
F11 : 디버깅 시작
F4 : 상속구조 클래스 보기(메소드, 멤버)
F8 : 디버깅 계속
CTRL + . : 다음오류부분으로 가기
CTRL + , : 이전오류부분으로 가기
 
===== 문자열 찾기 =====
1. Ctrl + k : 찾고자 하는 문자열을 블럭으로 설정한 후 키를 누른다.
2. Ctrl + Shift + k : 역으로 찾고자 하는 문자열을 찾아감.
3. Ctrl + j : 입력하면서 찾을 수 있음.
4. Ctrl + Shift + j : 입력하면서 거꾸로 찾아갈 수 있음.
5. Ctrl + f : 기본적으로 찾기
 
===== 메소드 쉽게 생성하기 =====
1. 클래스의 멤버를 일단 먼저 생성한다.
2. override 메소드를 구현하려면 : 소스->메소드대체/구현 에서 해당 메소드를 체크한다.
3. 기타 클래스의 멤버가 클래스의 오브젝트라면 : 소스->위임메소드 생성에서 메소드를 선택한다.
===== organize import =====
1. 자바파일을 여러개 선택한 후 소스 -> 가져오기 체계화 해주면 모두 적용된다.
===== 주석 처리 =====
2. Ctrl + / 해주면 여러줄이 한꺼번에 주석처리됨. 주석 해제하려면 반대로 하면 됨.
===== 소스 코드 형식 및 공통 주석 설정 =====
1. 환경설정 -> 자바 -> 코드 스타일 -> 코드 포멧터 -> 가져오기 -> JYJ프로파일.xml 을 불러다가 쓰면 된다.
2. 또한 다수의 자바파일에 프로파일을 적용하려면 패키지 탐색기에서 패키지를 선택한 후 소스 -> 형식화를 선택하면 된다.
3. 환경설정 -> 자바 -> 코드 스타일 -> 코드 템플리트 -> 가져오기 -> JYJ템플리트.xml 을 불러다가 쓰면 된다.
===== 에디터 변환 =====
1. 에디터가 여러 파일을 열어서 작업중일때 Ctrl + F6 키를 누르면 여러파일명이 나오고 F6키를 계속 누르면 아래로
2. Ctrl + Shift + F6 키를 누르면 위로 커서가 움직인다.
3. Ctrl + F7 : 뷰간 전환
4. Ctrl + F8 : 퍼스펙티브간 전환
5. F12 : 에디터로 포커스 위치
 

===== JAVA Doc 생성 =====
1. 프로젝트 -> Javadoc 생성
===== 내보내기 =====
2. 해당 프로젝트를 zip 형태로 압축해서 보관할 수 있다.
===== 자바 찾아보기 perspective =====
3. 해당 프로젝트를 보다 편리하게 한번 둘러보는데 좋다.
===== 스크랩북 =====
1. 스크랩북을 이용하면 자바파일을 만들어 테스트 해보지 않고도 간단하게 테스트 해 볼 수 있다.
2. 패키지 탐색기에서 신규 -> 기타 -> 자바 -> 자바 실행/디버그 -> 스크랩북 페이지 선택
===== 디버그 =====
1. F5(Step Into) : 현재의 명령문이 호출되는 메소드 속으로 진행하여, 그 첫 문장을 실행하기 전에 멈춘다.
하지만 자바 라이브러리 클래스 수준까지 들어가므로 단계필터 사용을 체크(Shift+F5)를 하면 필터를 설정한
클래스에 대하서는 Step Over 기능과 같은 기능을 수행한다.
2. F6(Step Over) : 현재의 명령문을 실행하고 다음 명령문 직전에 다시 멈춘다.
3. F7(Step Return) : 현재의 메소드에서 리턴한 직후에 다시 멈춘다.
4. F8(Resume) : 멈추어 있던 쓰레드를 다시 계속 실행한다.
5. Display view(표시) : 창 -> 보기표시 -> 표시 선택하여 소스상에서 필요한 부분을 선택해서 실행시켜 볼 수 있다.
한 순간의 값만 필요할 때 볼 수 있는 반면에 아래놈은 계속적으로 값이 변하는 것을 확인 할 수 있다.
6. Expression view(표현식) : 복잡한 식 혹은 객체를 디버깅 하면서 계속 볼 수있는 창이다.
마우스 오른버튼 -> 감시 표시식 추가 선택한 후 사용한다.
환경설정 -> 자바 -> 디버그 -> 세부사항 포멧터 선택 후 보기 편한 식으로 편집하면 Expression View 에서 결과를
실시간으로 확인 할 수 있다.
7. 디버깅 하면서 소스를 수정하고 프로그램을 다시 시작할 필요 없이 계속 디버깅을 진행 할 수 있다.
다만 메소드를 추가하거나 필드를 추가하면 프로그램을 다시 시작해야 한다.
8. Drop to Frame(프레임에 놓기) 는 정말 모르겠다.
9. 디버깅 작업을 할때 해당 라이브러리의 소스코드를 첨부하지 않으면 진행상황을 볼 수 없을 경우
해당 라이브러리에 소스코드를 첨부할 수 있다. 해당 프로젝트 -> 특성 -> Java 빌드경로 -> 라이브러리 -> 소스참조
편집 버튼을 눌러서 첨부 한다.
===== 도움말 =====
"JDT 팁과 요령"이라고 치면 여러가지 흥미로운 팁이 나온다.
* Alt
> Alt + Shift + J : JavaDoc 주석
> Alt + ←→(좌/우) : 뷰 화면의 탭에 열린 페이지 이동
> Alt + ↑↓(상/하) : 커서가 있는 줄을 위 아래로 이동

* Ctrl
> Ctrl + 1 : Quick Fix
>> 구현하지 않은 메소드 추가
>> 로컬 변수 이름 바꾸기
>> Assignment 입력
>> 행 둘러싸기 (if/where/for이나 블록으로 둘러 싸려면 해당영역을 선택하고 Ctrl + 1)
> Ctrl + D : 한줄 삭제
> Ctrl + E : 뷰 화면의 탭에 열린 페이지 이동
> Ctrl + L : 라인 이동
> Ctrl + I : 자동 들여쓰기 수정
> Ctrl + K : 문자열 찾기 (찾고자 하는 문자열을 블럭으로 설정한 후...)
>> Ctrl + Shift + K : 역순으로 찾기
> Ctrl + M : 전체화면
> Ctrl + O : 현재 보고있는 파일의 아웃라인 (메소드 리스트 확인, 메소드나 필드 이동가능)
> Ctrl + W : 창 닫기
> Ctrl + , or. : 다음 Annotation(Error, Warning, Bookmark)으로 이동
> Ctrl + / : 주석 처리 (여러줄 블럭 처리 가능)
> Ctrl + Alt + ↑↓(상/하) : 한줄(블럭) 복사
> Ctrl + Shift + E : Switch to Editor (탭에 열려있는 Editor 이동)
> Ctrl + Shift + G : 클래스의 메소드나 필드를 Reference하고 있는 곳으로 이동
>> 반대 : F3 (Reference하는 클래스로 이동)
> Ctrl + Shift + L : 단축키 보기
>> Ctrl + Shift + L + L : 단축키 지정
> Ctrl + Shift + W : 열린 파일 모두 닫기
> Ctrl + Shift + O : 자동 import 처리 (사용하지 않는 Class는 삭제)
> Ctrl + Shift + R : Open Resource
> Ctrl + Shift + ↑↓(상/하) : 다음/이전 메소드로 이동
> Ctrl + Shift + / :JavaDoc주석 추가
> Ctrl + Shift + Space : 메소드 파라미터 힌트 (메소드에 입력해야 하는 파라미터 정보가 표시된다.)
> Ctrl + F3 : 클래스 아웃라인
> Ctrl + F6 : View 화면의 탭에 열린 페이지 이동
> Ctrl + F7 : View간 화면 전환
> Ctrl + F8 : Perspective간 화면 전환
> Ctrl + F11 : 바로 전에 실행했던 클래스 실행
> Ctrl + PageDown : 뷰 화면의 탭에 열린 페이지 이동

* Function Key
> F2 : 에러의 원인에 대한 힌트 (에러 라인에 커서를 위치시키고...)
> F3 : Java 편집기에서 Reference하는 클래스의 자바파일로 이동
>> Ctrl + 클릭
>> 반대 : Ctrl + Shift + G (클래스의 메소드나 필드를 Reference하고 있는 곳으로 이동)
> F4 : 해당 클래스의 Hierarchy
> F12 : Editor로 포커스

* E.T.C.
> CTRL + 휠 : 페이지 단위 이동

 linux 시스템 구성 정보 확인 방법
 
하드디스크 시리얼넘버 확인
# hdparm -I /dev/sda5
mac 주소 확인
# ifconfig -a
▷ 호스트 네임 확인
     # hostname
 
▷ 호스트 id 확인
     # hostid
 
▷ OS 및 kernel 버전 확인
      # uname ?a  : kernel 버전 확인
        # cat /etc/redhat-release  : OS 종류 확인
예시)    # uname -a
             Linux DCS-install 2.6.18-194.32.1.el5PAE #1 SMP Wed Jan 5 18:43:13 EST 2011 i686 athlon i386 GNU/Linux
             # cat /etc/redhat-release
             CentOS release 5.5 (Final)
 
▷ CPU 정보 확인
     # cat /proc/cpuinfo : 상세 CPU 정보 확인
예시)     # cat /proc/cpuinfo
             processor       : 0
             vendor_id       : AuthenticAMD
             cpu family      : 16
             ======== 생략 =============
             wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc nonstop_tsc pni cx16 popcnt lahf_lm cmp_legacy svm extapic cr8legacy abm sse4a misalignsse 3dnowprefetch osvw ibs ts ttp tm stc 100mhzsteps hwpstate [8]
             bogomips        : 1995.19
 
▷ Memory 정보 확인
     # cat /proc/meminfo : 상세 메모리 정보 확인
      # free ?m : 물리적 메모리 및 swap 사용량을 MB 단위로 확인
예시)    # cat /proc/meminfo
             MemTotal:      8305744 kB
             MemFree:        292952 kB
             Buffers:          7640 kB
             Cached:        7887972 kB
             SwapCached:          0 kB
             ========== 생략 =============
             HugePages_Rsvd:      0
             Hugepagesize:     2048 kB
             # free -m
          total       used       free     shared    buffers     cached
             Mem:     8111       7824        286        0          7       7703
             -/+ buffers/cache:      114       7996
             Swap:        16386      0      16386
 
▷ Disk 구성 정보 확인
     # fdisk ?l : 물리적 또는 논리적(LUN) 디스크 확인
예시)     # fdisk -l
             Disk /dev/sda: 146.1 GB, 146163105792 bytes
             255 heads, 63 sectors/track, 17769 cylinders
             Units = cylinders of 16065 * 512 = 8225280 bytes
 
                Device Boot      Start         End      Blocks   Id  System
             /dev/sda1   *           1          13      104391   83  Linux
             /dev/sda2              14        3837    30716280   83  Linux
             /dev/sda3            3838        5926    16779892+  82  Linux swap / Solaris
             /dev/sda4            5927       17769    95128897+   5  Extended
             /dev/sda5            5927       17769    95128866   83  Linux
 
     # df -h : 전체 file_system 각각 할당량 및 사용량(%) 을 MB 단위로 확인. (df : disk free)
예시)     # df -h
             Filesystem            Size  Used Avail Use% Mounted on
             /dev/sda2              29G  3.1G   24G  12% /
             /dev/sda5              88G   71G   13G  85% /data
             /dev/sda1              99M   17M   77M  18% /boot
             tmpfs                 4.0G     0  4.0G   0% /dev/shm
 
▷ Network 구성 정보 확인
      # ifconfig -a : IP Address, network, MAC Address 확인
      # route : 시스템 routing table 설정 정보 확인
 
 
▷ 패키지 구성 정보 확인
      # rpm -qa : 설치된 패키지 리스트 확인
예시)     rpm -qa | grep init
           initscripts-8.45.30-3.el5.centos
             SysVinit-2.86-15.el5
             mkinitrd-5.1.19.6-61.el5_5.2
             xorg-x11-xinit-1.0.2-15.el5
             module-init-tools-3.3-0.pre3.1.60.el5_5.1
             initscripts-8.45.30-2.el5.centos
             pkinit-nss-0.7.6-1.el5
 
▷ 프로세스 정보 확인
      # ps -ef : 현재 실행중인 프로세스 정보 확인
예시)     # ps -ef | grep init
             root         1     0  0 Jan12 ?        00:00:01 init [5]                            
root      4274  4239  0 Jan12 ?        00:00:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients"
             root      4304     1  0 Jan12 ?        00:00:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients
             root     26104 25827  0 14:42 pts/0    00:00:00 grep init
 
l  시스템 재구동 및 종료방법
 
▷ 프로세스 재구동 방법
리눅스에서는 프로세스의 번호를 찾아 죽이는 대신에 ``/etc/init.d'' 디렉토리에 스크립트를 모아놓고 필요에 따라 프로세스를 시작과 중단이 가능함. (start, stop, restart 옵션 사용)
사용예 >
# /etc/init.d/nfs start      e 프로세스 시작
# /etc/init.d/nfs stop      e 프로세스 중지
# /etc/init.d/nfs restart    e 프로세스 재시작
 
Ø  참조 : 서비스 프로세스 앞에 service 명령어를 통해서 실행해도 동일하게 실행됨.
사용예 >
# service nfs start      e 프로세스 시작
# service nfs stop      e 프로세스 중지
# service nfs restart    e 프로세스 재시작
 
▷ 시스템 재부팅 및 종료
 시스템을 종료시키려면, "루트" 계정으로 로그인하거나 "su" 하여야 함.
Ø  시스템 리부팅
# sync       e 메모리에 있는 데이터를 디스크로 저장
# reboot  또는 # shutdown ?r now
Ø  시스템 종료
# sync e 4,5 번 반복 실행 권장
# shutdown ?h now
 
l  시스템 모니터링 및 점검 방법
 
▷ CPU 사용률 점검
# top    e 숫자 `1` 키로 개개의 Core 별 사용률을 확인 가능
# vmstat 1  e  CPU Idle % 확인 가능
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache        si   so    bi    bo   in   cs  us sy  id   wa st
 0  0     96 288936   8124 7891644    0    0     3     1    0    1  0  0 100  0  0
 0  0     96 288936   8124 7891644    0    0     0     0 1006 3769  0  0 100  0  0
 0  0     96 288936   8124 7891644    0    0     0     0 1004 3756  0  0 100  0  0
 0  0     96 288936   8124 7891644    0    0     0     0 1004 3760  0  0 100  0  0
 
▷ 메모리 사용률 점검
# free ?m  e 전체 메모리 용량, 사용 용량, free 용량, 캐시 및 버퍼로 사용되는 용량 확인 가능
# top e 각 process 가 점유하는 메모리 용량 확인 가능
▷ 파일시스템 사용률 점검
# df ?h  e  파일시스템 사용률 확인 가능(읽기 편한 단위의 용량으로 출력)
# df ?i  e  Inode 사용률 확인 가능
 
▷ 시스템 로그 점검
기본적으로 syslog 데몬에 의해서 /var/log/messages 파일에 Log 기록
# cat /var/log/messages
내용이 많을 시에는 아래 특정 레벨의 Log 만 파악 가능
# grep ?i error /var/log/messages
# grep ?i warning /var/log/messages
# grep ?i critical /var/log/messages
# grep ?i fault /var/log/messages
# grep ?i fail /var/log/messages
 
▷ H/W 상태 점검 (명령어)
# omreport chassis  e SEVERITY 값이 OK 이면 H/W 정상 상태임.
Health
 
Main System Chassis
 
SEVERITY : COMPONENT
Ok       : Fans
Ok       : Intrusion
Ok       : Memory
Ok       : Power Supplies
Ok       : Power Management
Ok       : Processors
Ok       : Temperatures
Ok       : Voltages
Ok       : Hardware Log
Ok       : Batteries
 
v  omreport 명령어를 실행하기 위해서는 Dell에서 제공하는 OpenManage Server Administrator 패키지가 설치되어 있어야 가능함.



우분투 성능 향상
시스템 성능향상의 대부분은 디스크와메모리와 관련되어 있습니다.
왜냐면 디스크의 접근속도와는 비교할 수 없을 정도로 메모리 접근속도가 빠르기 때문이죠.
그래서 가능하면 디스크대신 메모리에서 작업하는것이 속도향상에 도움이 됩니다.
램디스크, 램드라이브 같은것도 같은 맥락입니다.
메모리와 디스크 사이에서 전환을 지원하는 방식으로는 
디스크캐싱 (자주 접근한 디스크내용을 저장하고, 접근시 저장된 곳에서 먼저 찾는 방식),
스왑핑 (메모리가 부족할때 일정량의 메모리(메모리페이지)를 디스크에 저장하고 메모리를 회수해서 여유 메모리를 늘려주는것),
램디스크/램드라이브 (메모리의 일부분을 고정적으로 할당하여 디스크인양 사용하게 하는것)
등이 있습니다.

이것을 효율적으로 관리하면 속도를 엄청 향상시킬 수 있습니다.
컨셉은 여유메모리(free memory)가 많다는 것은 그만큼 메모리를 낭비하고 있다는 뜻도 됩니다.
최대한 여유메모리를 줄이고, 디스크접근도 줄여서 성능을 향상시키는 것입니다.

1) 스왑핑을 가능한 줄이자.
리눅스 시스템은 항상 일정량의 여유 메모리를 확보하려고 합니다.
그과정에서 여유메모리가 있음에도 스와핑을 하게 되고, 디스크접근이 이루어집니다.
하지만 얼만큼의 여유메모리를 항상 확보해야 될까요? 그건 리눅스시스템으로서도 알 수 없겠죠.
그래서 이것을 지정해줄 필요가 있습니다.
커널에 파라미터를 동적으로 넘겨주기 위한 것으로 sysctl명령과 /etc/sysctl.conf파일이 있습니다.
/etc/sysctl.conf 파일에 다음을 적어주면 재부팅시 적용됩니다.
이 값이 작을수록 스왑핑을 자주 안하게 됩니다.
기본값으로 60으로 설정되어 있지만, 리눅스 문서를 살펴보아도 데스크탑에서 추천하는 값은 10입니다.
더 안정적으로 하고 싶다면 20이면 충분할것입니다.
Code:
vm.swappiness=10
그리고 재부팅없이 적용하려면,
Code:
sysctl -p /etc/sysctl.conf
혹은
Code:
sysctl -w vm.swappiness=10
2) 디스크캐싱을 최대한 활용하자.
캐싱이라는 기법은 여러부분에 사용됩니다.
대부분 네트웍속도에 비해 디스크접근속도가 빠르므로, 전송된 내용을 디스크에 캐싱하기도 하고 (이 방식은 대부분의 웹브라우져가 구현하고 있지요),
메모리가 디스크에 비해 접근이 빠르기 떄문에, 디스크의 일부분을 메모리에 캐싱하기도 합니다.
하지만 디스크를 메모리에 캐싱하였다고 하였을때, 메모리가 부족해지면 어떻게 될까요?
이때 시스템은 디스크의 메모리캐시를 회수하거나, 이것도 여의치 않으면 메모리의 일부분(메모리페이지)를
디스크에 저장하고 해당메모리를 회수하여 응용프로그램에게 메모리를 할당해 주게 됩니다.
요럴때 디스크의 메모리캐시에서 회수하는 정도를 커널에 지정해 줄 수 있습니다. 
Code:
vm.vfs_cache_pressure=50
기본값은 최대값인 100으로 되어 있으며, 가능한한 캐시메모리에서 강탈해갑니다.
이것을 40-100정도 사이에서 조정해 주시면 되는데..
웹서핑을 해보면 대부분은 50정도를 추천하지만, 일부는 40까지 적용한 예도 있고,
또 저의 경우는 80정도가 적당하더군요.
아래는 이것을 테스트하고, 적당한 값을 찾아 볼 수 있게 하는 스크립트입니다.
Code:
#!/usr/bin/sudo /bin/bash
TEST_FILE_SIZE=1024M
TEST_DIR=/usr/share
TEST_VALUES="100 90 80 70 60 50 40"
TEMP_DIR=${1:-$HOME}
echo 3 > /proc/sys/vm/drop_caches
dd if=/dev/zero of=$TEMP_DIR/testfile0 count=1 bs=$TEST_FILE_SIZE
i=1
for v in $TEST_VALUES;
do
   sysctl -w vm.vfs_cache_pressure=$v
   find $TEST_DIR> /dev/null
   cp $TEMP_DIR/testfile0 $TEMP_DIR/testfile$i
   echo "** vm.vfs_cache_pressure=$v **"
        time find $DIR/ > /dev/null
   ((i++))
done
for ((v=0; v<$i; v++));
do
   rm -f $TEMP_DIR/testfile$v
done
실행시 시간이 오래 걸릴 수 있으니,
파일크기와 테스트할 수치들을 좀 줄여서 실행하세요.
3) 스왑핑을 디스크가 아닌 메모리에..
메모리가 부족해서 스와핑하는데..
어째서 메모리에 메모리 내용을 저장하냐구요?
키워드는 압축입니다.
스왑영역에 자동압축알고리즘을 적용하여
메모리를 압축하는것이죠.
스왑영역은 여럿 존재할 수 있기 때문에..
압축으로도 부족할때 스왑파티션이나 스왑파일을 사용하면 되겠죠.
이것을 구현한것으로는 google의 compcache/ramzswap과 zramswap-enabler등이 있구요.
이미 우분투리눅스이미지에는 compcache적용되어 있을 겁니다.
/usr/share/initramfs-tools/hooks에 해당 스크립트가 있고,
update-initramfs나 update-grub명령 등으로 바뀐 내용을 적용할 수 있습니다.
하지만, 이것은 크기를 지정해주어야 하고 효율도 zramswap-enabler보다 떨어집니다.
단지 initramfs환경에서 구동하기 위해서 필요하겠죠. 일단 하드로 부팅한 후에는 zram을 사용하는것이 좋습니다.
설치 방법은
Code:
sudo apt-add-repository ppa:shnatsel/zram && sudo apt-get update
sudo apt-get install zramswap-enabler
따로 설정할 것은 없습니다.
다만 3.2커널을 사용할 경우 문제가 있으니, 수정을 요합니다.
Code:
#/etc/init/zramswap.conf
#.. 생략 ..
#modprobe zram num_devices=$num_cpus
#위의 부분을 아래로 바까주세요. 아마도 커널 파라미터 이름이 변경되었나 봅니다.
modprobe zram num_devices=$num_cpus 2>/dev/null || modprobe zram zram_num_devices=$num_cpus 2>/dev/null
#.. 생략 ..
zramswap을 사용하게 되면 스왑핑이 실제로 디스크로 거의 이루어지지 않게 되어서, 엄청 빨라집니다.
4) 부팅속도를 빠르게 해봅시다.
기본적으로 우분투에 uread-ahead라는 서비스가 있고, 이것은 디스크 정보를 저장해놨다가 부팅시에 미리 읽어들여서,
부팅속도는 떨어지지만 시스템의 전반적인 속도를 향상시키는 기능을 합니다.
그냥 넵두는것이 좋겠군요.
그러면 어떻게 부팅속도를 빠르게 할까요?
하이버네이션 또는 서스펜드를 이용하면 금새 부팅이 가능합니다.
그러나 이 기능을 사용하기 위해서는 스왑핑이 필요하고, 보통 스왑 용량이 메모리 총용량보다 커야 합니다.
그리고 스왑핑을 하기 위해서 용량 만큼의 디스크 접근이 필요합니다.
uswsusp라는 유틸리티를 추천합니다.
이름은 unswap suspend의 약자로서, 스왑을 이용하지 않고, 자체적으로 용량을 설정하고 압축해서 저장하게 됩니다.
소프트웨어 소스는 universe에 속해 있으므로 다음 명령으로 설치하시고,
sudo apt-get install uswsusp
서스펜드 모드로 들어가기 위해서 절전모드키 외에..
s2disk와 s2ram명령을 지원하고 있으며
s2disk는 상태를 저장하고 시스템 전원을 끄게 되고, 리부팅시에 바로 부팅됩니다.
s2ram은 실제 전원은 끄지 않고, 최대 절전 모드로 숨어있다가, 파워버튼을 누르면 짜잔하고 뜨게 되는겁니다.
만약 부팅시 어느부분에서 시간이 걸리는지 알아보려면,
bootchart를 설치해보세요
부팅상황을 분석해서 /var/log/bootchart/*.png파일을 만들어 줍니다.
그러나 이것도 부팅시간을 잡아먹기 때문에.. 그림을 확인한 후 서비스를 자동시작하지 않게 만들어 주는게 좋겠죠.
5) 램디스크의 활용? 
램디스크를 만드는 방법은 부팅시 부팅메뉴에서 'e'키를 눌러 편집모드로 들어간 후
linux xxx.vmlinuz ... 뒷부분에 ram_disk_size=킬로바이트수치
로 변경해주고 부팅하면 램디스크가 사용가능하며,
참고로,
512 MiB=524288 KiB
256 MiB=262144 KiB
128 MiB=131072 KiB
64 MiB=65536 KiB
32 MiB=32768 KiB
/etc/default/grub파일에서
GRUB_CMDLINE_LINUX_DEFAULT= 부분뒷쪽에 ram_disk_size=xxx라고 적어주시고
sudo update-grub 명령을 주시면 다음 부팅때 램디스크가 생성됩니다.
부팅한 후에는 /dev/ram0는 메모리에서 일정량을 점유하는 램디스크 디바이스가 됩니다.
하지만 파일시스템이 없기 때문에 파일시스템을 만들어 주어야 하고, 디바이스이기 떄문에 마운트도 해주어야 합니다.
Code:
#/etc/rc.local
#...생략
mke2fs -m 0 /dev/ram0 2>/dev/null
if [ $? -ne 0 ]; then
    mkdir -p /mnt/rd 2>/dev/null 
    mount /dev/ram0 /mnt/rd
    chown 1000.1000 /mnt/rd
fi
이것은 전통적인 방법의 램디스크 생성법이지만, 약간 다르지만 tmpfs를 이용하여 부팅시 파라미터를 넘겨주지 않아도 간단히 램디스크를 만들 수 있습니다.
Code:
mount -t tmpfs -o size=[tmpfs size] tmpfs [mount point]
또는 /etc/fstab에
tmpfs [mount point] tmpfs size=[tmpfs size] 0 0
로 적어주고 마운트해주면 되는데 사실은 램디스크와는 조금 다릅니다.
공유메모리를 이용하는것이죠.
/dev/shm이것은 공유메모리를 뜻하는 디바이스입니다.
이제까지는 램디스크의 생성법이었구요.
일단 활용하는 방법은 웹브라우져등의 임시파일이나 캐시등을 해당 램디스크 마운트포인트로 설정해 놓으면
저장하고 읽는 과정은 모두 메모리에서 이루어지기 때문에 빠릅니다.
그러고 시스템이 종료되면 다 날아가겠죠?
다만 이것은 메모리의 일부분을 항상 차지하기 때문에.. 너무 크게 지정하거나 메모리가 적은 시스템의 경우는 오히려 좋지 않다고 봅니다.
저는 개인적으로 램디스크를 추천하지 않으며 오히려 앞서의 방법들을 이용해서 캐시메모리를 최대한 활용할 것을 추천합니다.
다만 램디스크가 정말 필요할 경우는..
리눅스ISO파일을 하드에 저장하고,
Code:
#/boot/grub/custom.cfg
menuentry "Boot to RAMDISK from Ubuntu ISO " {
insmod ext2
insmod fat
insmod ntfs
insmod loopback
set isofile=/ubuntu.iso
search -s isodev -f $isofile
loopback lo $isodev$isofile
linux (lo)/casper/vmlinuz boot=casper toram iso-scan/filename=$isofile quiet splash
initrd (lo)/casper/initrd.lz
}
로 편집 저장하고 부팅하면..
ISO내용을 몽땅 메모리에 복사하고, 디스크를 언마운트해서 포멧이 가능하게 하는 경우입니다.
오류 해결
JavaHL Library 오류
Failed to load JavaHL Library.
These are the errors that were encountered:
no libsvnjavahl-1 in java.library.path
no svnjavahl-1 in java.library.path
no svnjavahl in java.library.path
java.library.path = /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-6-openj
dk/jre/lib/amd64:/usr/lib/jvm/java-6-openjdk/jre/../lib/amd64:/usr/lib64/xulrunner-addons:/usr
/java/packages/lib/amd64:/usr/lib/jni:/lib:/usr/lib

subclipse를 설치하고 svn 관련 오류발생.. ok를 누르면 되지만 뜨지 않게 하려면
JavaHL를 설치하면 해결되는 문제
Subclipse Version에 맞는 JavaHL을 깔아야 한다는 것
JavaHL은 Subversion의 일부고 각 Subversion은 하나의 Subversion client version 만 지원한다
API 차이 때문
제대로 된 SVN/JavaHL Version을 설치하면 된다
Subclipse Version SVN/JavaHL Version
1.6.x 1.6.x
1.4.x 1.5.x
1.2.x 1.4.x
1.0.x 1.4.x
JavaHL ?
JavaHL은 서브버전(Subversion) 프로젝트의 일부. Java 언어를 서브버전 API에 바인딩하는 것. 서브버전은 계층적 API 디자인을 제공한다. 계층적 API 디자인은 (DLL 같은) 네이티브 라이브러리들로 제공된다. 서브버전 커맨드 라인은 이 API를 사용하는 한 방법일 뿐이다. API에는 풍부한 기능이 있다. 또한 하위 호환성도 유지된다. 굉장히 좋은 서브버전 클라이언트와 도구가 많은데, 그건 바로 필요한 모든 기능을 제공하는 풍부하고 안정적인 API가 있기 때문이다.

서브버전은 모든 플랫폼을 지원하기 위해 C로 만들어졌다. (Subversion is written in C to provide excellent cross platform support, but also because C produces libraries that are easy to consume from virtually any other language.) 서브버전 프로젝트는 자바, 펄, 파이썬 그리고 루비를 위한 언어 바인딩을 제공하고 유지하고 있다. 뒤쪽 세 개에 대해서는 SWIG 라이브러리와 기능을 제공한다. 네이티브 라이브러리로 인터페이스 언어 기능을 구현한 것이다. JavaHL은 “하이 레벨” API고 이것은 C++ 코드로 작성됐다. 자바 코드와 네이티브 라이브러리를 연결하는 JNI를 제공하기 위해서다. 이 디자인은 좋은 자바 API를 서브버전에 제공할 수 있게 해 준다.

JavaHL은 근본적으로 네 파트로 구성된다:

자바 쪽에서 말을 걸 수 있도록 해 주는 API를 제공하기 위한 상대적으로 얇은 자바 코드.
C++ 라이브러리 (JavaHL library 혹은 libsvnjavahl-1). 자바 레이어는 자바 네이티브 인터페이스(JNI) 호출(call)을 이용해 이 레이어에 말을 건다. C++ 계층은 “하이 레벨” API가 구현된 계층에 있다. 예를 들면, 자바는 “이 메세지와 함께 파일 목록을 커밋하라” 하고 말한다. C++ 계층은 메모리를 신경쓰면서 더 낮은 레벨의 서브버전 API 호출을 실행해 요청을 완료한다.
서브버전 라이브러리 자신. 커맨드 라인 클라이언트가 설치하고 사용하는 그 라이브러리와 같은 라이브러리다. 또한 TortoiseSVN이나 AnkhSVN 같은 다른 서브버전 클라이언트들도 이런 같은 라이브러리들을 사용한다.
서브버전 라이브러리 의존성. 서브버전은 작동하기 위해 다수의 외부 라이브러리가 필요하다. 가장 큰 부분은 아파치 포터블 런타임(APR)이고, Neon for the HTTP 클라이언트와 보안 제어를 위한 OpenSSL 등의 라이브러리도 필요하다.
JavaHL이 어플리케이션에 사용되고 작동하게 하기 위해 이 네 가지 계층이 필요하다.
왜 서브클립스에 JavaHL이 필요한가?
서브클립스은 자바로 만들어졌다. 그래서 서브버전 API를 사용하기 위해서는 JavaHL 라이브러리를 사용해야 한다. 서브클립스는 JavaHL의 자바 계층을 내장하고 있다. 바로 앞의 항목을 보면, 그게 실제로 작동하기 위해 세 개의 서로 다른 계층이 필요하다는 것을 알 수 있을 것이다. (근본적으로는 네이티브 라이브러리.)
왜 서브클립스가 JavaHL에 필요한 모든 것을 제공하지 않는가?

32비트 윈도우에서 우리는 필요한 모든 것을 제공한다. 그러나 다른 데서는 기술적 이유로 그렇게 할 수 없다. 네이티브 라이브러리들이 서로 다른 운영체제에서 로드되는 방법이 있어야 한다. 자바와 이클립스에서 사용될 때 서로 다른 세 계층을 그렇게 작동시킬 방법은 없다. 그렇게 하기 위해 찾을 수 있는 유일한 방법은 그게 운영체제가 찾을 수 있는 올바른 위치에 제대로 설치됐는지 확인하는 것이다. 윈도우 라이브러리 로딩에는 자바에서 이용할 수 있는 쿼크(quirk)가 있다. 기본적으로, 우리는 역 주문을 통해 의존성을 로드할 수 있고, 그렇게 함으로써 우리는 각각의 라이브러리를 불러올 수 있다. 의존성이 이미 메모리에 로드돼 있어서 로더가 더이상 그들을 불러오려고 시도하지 않기 때문이다.(뭔 말인지;;)

JavaHL을 어떻게 얻을 수 있나요?

운영체제에 따라 다양한다.

윈도우 32비트
서브클립스 자체에 필요한 모든 게 들어있다. 우리의 이클립스 업데이트 사이트에서 JavaHL 플러그인이 설치됐는지만 확인하면 된다.

윈도우 64비트
만약 32비트 JVM을 사용하고 있다면 서브클립스가 제대로 작동할 것이다. 만약 64비트 JVM을 사용하고 있다면 JavaHL 64비트 버전을 제공해야 한다. 그 중 하나는 SlikSVN이고 여기서 얻을 수 있다:


패키지를 설치하면, 서브클립스가 PATH에서 JavaHL을 찾을 것이고, 제대로 작동할 거다.

OS X
가장 쉬운 방법은 OSX 패키지를 다운로드해 설치하는 것이다. OSX 패키지는 openCollabNet을 제공한다. 이것은 JavaHL 라이브러리를 갖고 있는 서브버전을 설치한다. 위치는 /opt/subversion 이다. 그리고 나서 JavaHL 라이브러리를 위해 /Library/Java/Extensions에 심볼릭 링크를 만든다. 이 곳은 OSX JVM이 JNI로 라이브러리를 불러올 때 확인하는 글로벌한 위치다. 그래서 기본적으로, 이 패키지를 설치하면 더 할 게 없다. 서브클립스를 설치한 후 이것을 설치하면 괜찮다. 32비트와 64비트 모두에 사용할 수 있다. MacPorts 또한 손쉬운 서브버전과 JavaHL 패키지를 제공한다. 그러나 스노우 레오파드 MacPorts는 여전이 이 패키지들을 32비트 바이너리로 컴파일한다. 만약 기본으로 있는 64비트 스노우 레오파드 JVM를 사용하면 JavaHL이 로드됐을 때 아래와 같은 에러를 보게 될 것이다.

Failed to load JavaHL Library.
These are the errors that were encountered:
no libsvnjavahl-1 in java.library.path
no svnjavahl-1 in java.library.path
/opt/local/lib/libsvnjavahl-1.0.0.0.dylib:  no suitable image found.  Did find:  /opt/local/lib/libsvnjavahl-1.0.0.0.dylib: mach-o, but wrong architecture

잘못된 아키텍쳐라는 에러 메세지를 주목하라. 이건 64비트 JVM이 32비트 네이티브 라이브러리를 로드할 수 없다는 얘기다. OSX CollabNet 바이너리에는 이런 문제가 없다. 거기엔 32비드와 64비트 버전이 모두 있기 때문이다.

CollabNet은 JavaHL을 포함한 레드햇을 위해 클라이언트 RPM을 제공한다.( http://www.collab.net/downloads/subversion/redhat.html ) 내 경험상, 이 RPM은 다른 리눅스 배포판에서도 작동한다. CentOS나 Suse 같은 RPM 기반 배포판에서는 RPM 설치 문제일 뿐이다. 데비안 기반 시스템에서, RPM을 설치하기 위해 alien 패키지를 사용할 수 있다.

물론 우분투 같은 많은 리눅스 배포판이 서브버전 패키지를 업데이트하기 위한 좋은 방법을 제공한다. 이런 방법을 사용하면 JavaHL이 대부분 잘 설치된다. 전형적으로 JavaHL 라이브러리는 메인 서브버전 패키지에 의존적인 분리된 패키지들에 들어 있다. 데비안/우분투에서는 패키지 이름이 libsvn-java다. 그래서 이런 커맨드만으로 라이브러리를 설치할 수 있다.

sudo apt-get install libsvn-java
일단 라이브러리를 인스톨하면, (이클립스를 사용할 때) 자바한테 어디서 그걸 찾을 수 있는지 말해 줘야 한다. 리눅스 JVM 많은 경우 라이브러리를 찾기 위해 표준 경로를 살피지 않는다. 이건 미래에 분명 바뀔 것이다. 예컨대, 데비안/우분투는 자바에 사용되는 라이브러리로 /usr/lib/jni라는 표준 경로를 사용한다. 그러나, 썬 JVM은 지금 이 경로를 살피지 않는다. 자바에 어디에서 JavaHL 라이브러리를 찾을 수 있는지 말해 주는 가장 쉬운 방법은 JVM이 시작할 때 아래와 같이 명기해 주는 것이다.

-Djava.library.path=/usr/lib/jni
CollabNet 서브버전은 /opt/CollabNet_Subversion 에 설치된다. 따라서 이 패키지를 사용할 경우 이렇게 써야 한다.

-Djava.library.path=/opt/CollabNet_Subversion/lib
라이브러리의 이름은 libsvnjavahl-1.so 다. 경로를 명기할 때 이 파일을 포함해야 한다.

이클립스는 이 세팅을 위해 자신의 매커니즘을 제공한다. 이클립스에는 eclipse.ini 라는 이름의 파일이 있다. 이 파일은 JVM이 실행될 때 살펴 보는 파일이고, JVM에 세팅을 추가한다. 특히, “-vmargs” 라는 라인을 찾아야 한다. 이 라인 아래쪽에 새로운 라인을 추가하고 위 라인을 추가해서 세팅이 JVM에 필요하다고 알려 준다. 한 줄에 인수 하나만 넣어야 한다. 즉, 반드시 새로운 줄에 넣어야 한다. 그리고 한 줄에 위에서 말한 내용을 다 넣어 줘야 한다. 이클립스 3.4에서 그렇게 한 예제다.

-showsplash
org.eclipse.platform
-framework
plugins/org.eclipse.osgi_3.4.0.v20080605-1900.jar
-vmargs
-Djava.library.path=/opt/CollabNet_Subversion/lib
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
-XX:MaxPermSize=256m
기타 문제 해결
이클립스 Preferences 밑의 Team > SVN 에서 JavaHL이 로드됐는지 확인할 수 있다. 만약 라이브러리가 제대로 로드됐다면, 라이브러리 버전을 볼 수 있을 것이다. 그렇지 않다면 “Not available”이라고 나온다. 만약 버전이 사용하기 너무 오래된 거라면, 라이브러리를 로드할 수 없을 것이고 “Not available” 이라고 나올 것이다.

리눅스 사용자에게 나타나는 일반적인 문제는 eclipse.ini에 라이브러리를 로드하는 경로를 적어 넣기는 했지만 작동하지 않는 경우다. 이런 일이 벌어졌을 때 체크할 것은, INI 파일 안의 세팅이 실제로 사용되는지다. 많은 사용자들이 이클립스를 실행할 때 몇몇 커맨드 라인 옵션을 적어 넣어 런처를 커스터마이징한다. 그렇게 하면, 이클립스 런처는 INI 파일 중 몇몇 세팅을 사용하지 않게 된다. 이런 일이 벌어졌는지 확인하는 가장 쉬운 방법은 이클립스에서 Help > About 에 들어가서 Counfiguration Settings를 선택하는 거다. 거기 가면 JVM이 사용하고 있는 setting을 볼 수 있다. 만약 거기에 java.library.path 라인이 없다면, 그건 사용되지 않고 있다는 거다.

리눅스에서 클라이언트는 로드되는데, 이클립스가 첫 번째 작동에서 잠기거나(LOCKS) 충돌을(CRASHES) 일으킨다
이것은 현재 서브버전 1.6이 새로운 GNOME keyring을 지원하는 과정에서 생긴 버그다. 커맨드라인을 사용할 때는 정상적으로 작동하는데, 다른 사용자가 라이브러리를 사용하려고 하면 제대로 작동을 안 한다. 이게 수정될 때까지, 이 기능을 꺼서 문제를 회피할 수 있다. 그렇게 하기 위해, ~/.subversion/config 파일을 열고, 다음을 추가하라.

[auth]
### Set password stores used by Subversion. They should be
### delimited by spaces or commas. The order of values determines
### the order in which password stores are used.
### Valid password stores:
###   gnome-keyring        (Unix-like systems)
###   kwallet              (Unix-like systems)
###   keychain             (Mac OS X)
###   windows-cryptoapi    (Windows)
password-stores =
password-stores를 빈 칸으로 남겨 놓으면 이 기능을 끄는 거다. passwords는 모든 구버전 서브버전에서 권한 폴더에 플래인 텍스트로 저장된다.

JAVAHL LIBRARY 테스트하기
위의 모든 사항을 이행했는데도 JavaHL 라이브러리가 제대로 작동하지 않는다면, 서브버전 JavaHL JUnit 테스트가 설치를 도와줄 수 있다. 전형적으로, 이것은 서브클립스가 내는 에러와 같은 에러를 낸다. 그러나 시도하고 에러를 내고 문제를 진단하기 더 쉽다.

테스트를 실행하기 쉽게 만들기 위해, JUnit과 JavaHL 클래스를 하나의 Jar 파일에 넣은 서브버전 테스트를 번들로 제공한다. 서브버전 1.6용 테스트를 다음 링크에서 다운받을 수 있다.

javahltests.jar

이 Jar 파일은 JavaHL 라이브러리의 서브버전 1.6.x 버전에서만 작동한다. 테스트를 하기 위해 다음을 하면 된다:

$ java -jar javahltests.jar
....................?....................?.
.........
Time: 145.805

OK (50 tests)
The tests create a bunch of repositories and working copies, so run these from a folder you can easily delete or cleanup. Also, you will want to be sure you run the tests using the same JVM that you are using for Eclipse. Finally, you will need to make sure the JavaHL library is on your PATH. So you will probably need to run it something like this:

$ java -Djava.library.path=/opt/CollabNet_Subversion/lib -jar javahltests.jar
....................?....................?.
.........
Time: 145.805

OK (50 tests)



우선 윈도우 7(real OS) 설정 

 윈도우 탐색기에서 E드라이브 오른쪽 클릭 -> 속성 ->공유 탭 ->고급 공유 ->선택한 폴더 공유 체크 -> 확인
 (권한이나 공유 이름은 원하는대로 변경하면 됨)

 vmware 설정

 VM -> Options -> Shared Folders -> Always enabled (입 맛대로 바꾸면 됨) -> Add -> Next -> Host path를 Browsing을 통해 E드라이브를 설정해 주면 됨 -> Next -> Finish

 이 후에 우분투를 reboot하면 /mnt/hgfs/폴더이름 으로 연결이 된다. 만약 안될 경우 아래의 명령어를 터미널에서 입력 후 에러가 있는지 확인(에러 있으면 안됨)


'컴퓨터' 카테고리의 다른 글

eclipse 이클립스 단축키  (0) 2013.11.11
win 7 matlab 윈도우 7 매트랩 설치  (0) 2013.11.07
매트랩 주요 용어  (0) 2013.11.07
X-CTU  (0) 2013.11.07
appcrash 해결방법  (0) 2013.11.07
Posted by 뮹실이

최근에 달린 댓글

05-14 17:26
Yesterday
Today
Total