ctrl + .(period) : warning, compile error 혹은 syncronize, compare시의 다른부분으로 이동하는 단축키


ctrl + ,(comma) : 위의 키와 동일하나 역방향으로 이동


ctrl + 1 : Quick Fix - 이클립스에서 어떻게 고칠것인지에대한 힌트나 제안을 해주는 기능


Ctrl + Space : 입력 보조장치(Content Assistance) 강제 호출


Ctrl + 마우스커서(혹은 F3) : 클래스나 메소드 혹은 멤버 링크타기.


Ctrl + (Shift) + k : 선댁 문자열 (역)검색


Alt + 위아래 : 구문 옮기기


Ctrl + Alt +아래 : 행 복사


Ctrl +S+f : 코드 자동정렬


Ctrl + Shift +  넘버패드 / or  넘버패드 *  : 전체폴딩 닫기 or 열기


Ctrl + Shift +  숫자키 / or \  : 블록 주석 추가 or 제거


Ctrl + F6 : 에디터 변환 ,단축키 지정(기본)해서 Alt + tap처럼 사용


Ctrl + Shift + r : 전체 워크스페이스에서 자원 찾기.


Ctrl + i : 편집시 들여쓰기로 이동, 전체 선택 후 들여쓰기 하면 전부 정렬~


Alt + / : 단어 자동완성


Ctrl + m : 화면 최대/최소


Shift + enter : 행 삽입


Ctrl + 넘버패드- / 넘버패드+  : 접기/ 펼치기


Ctrl + (Shift) + j : 증분검색


Ctrl + l : 원하는 소스 라인으로 이동


Ctrl + Shift + l : 단축키 보기


Ctrl + ,(콤마) / .(dot) : 다음주석(Warning 등) 바로가기


Ctrl + Shift + x : 대문자로


Ctrl + Shift + y : 소문자로


Alt + Shift +위아래 : 영역 선택



Posted by 뮹실이





윈도우 7에서 매트랩 설치후 실행시 한번실행시키면 안되고 두세번 실행해야 켜지는 현상해결법

 

내컴퓨터 속성-고급-환경변수 등록-MATLAB_RESERVE_LO 를 입력하고 값은 영 으로 한다





Posted by 뮹실이
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 뮹실이

2013. 11. 7. 12:38 컴퓨터

매트랩 주요 용어

MATLAB(1) 주요명령과 행렬입력방법   

1. 주요 명령어

▶ who, whos : 작업공간에 기억된 변수의 목록을 보여줌

▶ file ->show graphic property editor : 그래프 세팅

▶ set path : 경로지정. >>path 치면 경로가 나온다.

  MATLAB에서 파일의 경로등록/삭제에 쓰임. save path를 해 줘야한다.

▶ help : 도움말 명령. 예를들어 >>help fft 하면 FFT 함수에 대해서 도움말 제공. 매트랩 내장함수의 사용법을 잘 모를때 쓰면 도움이 된다.

▶ ! : >>!dir 하면 도스창에서 dir한것과 같은 효과. >>!dir&하면 새로운 창 생성

▶ lookfor : help함수처럼 MATLAB 함수나 명령어를 찾음. 많이 쓰인다.

▶ clear : workspace나 메모리에서 특정 항목을 지우는 데 사용한다.

▶ clc : clear_screen. 작업화면을 지우는 데 쓰인다. 도스에서 cls와 기능같음.



2. 행렬의 입력 : 매트랩에서 데이터  처리의 기본이 되는 단위는 행렬이다.

>>a=[1 2 3; 4 5 6; 7 8 9]

a = 

     1  2  3

     4  5  6

     7  8  9

(행 구분은 세미콜론(;) 혹은 개행(new line)을 사용. 열 구분은 콤마 혹은 공백)

▶ a(시작행:끝행,시작열:끝열) : 시작행~끝행과 시작열~끝열을 동시에 포함하는 행렬의 부분만 출력시켜 준다. a(i:j,k:l)

▶ load : file로부터 값을 불러온다. 

          >>load a.txt 하면 a라는 변수를 가진 행렬이 생기게 된다.

▶ 이미 존재하는 행렬에 다른 행렬을 추가해서 새 행렬을 만들수도 있다.

  D=[A;C] 는 A 행렬부분 밑에 C행렬이 추가되어 D행렬이 생긴다.

  D=[A,C] 는 A 행렬부분 옆에(오른쪽)에 C행렬이 추가돼 D행렬.

▶ 특별한 행렬

   a=[] : 빈 행렬이다. 행렬은 존재하나 요소가 없다.

   zeros(k) : k by k의 0의 원소를 갖는 정방행렬이 생긴다.

   zeros(m,n) : m by n의 0의 원소를 갖는 정방행렬.

   zeros(size(A)) : 행렬 A와 크기가 같은 영행렬이 생긴다.

   ones() : zeros와 사용법이 같음. 대신 원소값이 1이다.

   eys(n) : n by n 의 단위행렬이 생긴다.

   rand() : 0~1 사이의 값으로 균등분포된 난수들로 이루어진 행렬

   randn() : 0~1 사이의 값으로 정규분포된 난수들로 이루어진 행렬

▶ 벡터의 입력 : 벡터는 행벡터와 열벡터가 있으며 이들은 서로 전치(Transpose)를 통해 바꿀 수 있다. 전치를 할때 주의할 것은 벡터가 복소수일 경우 전치를 하면 켤레화되어 전치가 되어 버린다는 것.

>>a=[1 2 3 4 5] : 행벡터

>>a=[1;2;3;4;5] : 열벡터

a=1:1:5   콜론을 이용한 벡터입력 a=시작값:증분값:최종값

▶ 10의 거듭제곱 : a=4e5 = 4*10^5와 같다.


<행렬의 연산>

덧셈 : C = A + B;

뺄셈 : C = A - B;

곱셈 : C = A * B;           C = AB와 같다.

나눗셈 : C = A \ B; 혹은 C = A / B;

           A\B는 inv(A)B와 같은 기능, A/B는 Ainv(B)와 같다.

행렬의 나눗셈을 통해서 연립방정식의 해를 쉽게 구할 수 있다.

거듭제곱 : A^5 행렬 A를 5번 곱한거랑 같다.


▶ 행렬 조작

  rot90(A) : CCW(반시계방향)으로 90도 회전

  rot90(A,k) : k는 정수. k가 양이면 반시계, 음이면 시계방향으로 90*k만큼회전

  flipus(A) : 상하방향. fliplr(A) : 좌우방향

▶ 행렬의 배열 연산 : (.*)   (./)  (.\)  (.^)와 같이 도트를 첨가해 준다.

   그리고 연산되는 행렬의 차원이 서로 같아야 한다.

▶ 벡터의 내적(inner product)

   >>dot(A,B) 또는 sum(A.*B)

▶ 벡터의 외적(cross product)

  >>cross(A,B)




MATLAB(2) 그래픽 기능 I   

3. 그래픽(그래프그리기) 기능

▶ figure(n) 그림창 n을 호출한다. n은 정수인데 수를 굳이 쓰지 않아도 됨.

▶ set() 선의 종류 및 마커(marker)의 성질을 선택

   set(plot(x,y),'LineStyle','--') : 선의 모양이 실선에서 파선으로 그려짐

▶ axis([x축시작 x축끝 y축시작 y축끝]) : x축과 y축의 범위를 결정해 준다.

▶ grid on, grid off : 격자를 생성/없애줌

▶ xlabel('This is X axis') : x축을 라벨링함. y축, z축도 비슷하게 사용

▶ title('제목') : 그 그래프에 제목을 입력하고자 할때 사용


● figure() : (1)새로운 그림창 생성 (2) 이미 띄워진 그림창을 활성화

            즉, 여러개의 그래프를 출력하고자 할때 figure명령 사용하면 유용

● subplot(abc) : a by b 모양의 a*b개의 구역을 만들고 c번째를 선택.

   >>subplot(22k)는 아래처럼 4개 구역이 나뉘어지게 되는 것이다.

                                  221          222

                                  223          224


4. 선도(line plot)의 종류

★ plot() : x-y축이 모두 선형 배율을 가진다.

★ loglog() : x-y축 모두가 로그 배율을 가진다.

★ semilogx() : x축에는 로그배율, y축에는 선형 배율

★ semilogy() : y축에는 로그배율, x축에는 선형 배율

★ plotyy() : 2개의 그래프가 하나의 그림 창에 그려진다

                 이때 y는 서로 다르게 스케일링 된 것이 좌우 라벨창에 표시됨

*******************************************************************

>>plot(x좌표행렬,y좌표행렬,'Color+LineStyle+Marker')

선색깔 : 사이안(c)   마그네타(m)   노랑(y)     빨강(r)    녹색(g)

           파랑(b)      흰색(w)          검정(k)

선모양 : 기본(-)    파선(--)      없음(none)      점선(:)     -.-.-형태(-.)

마커 : +     ^(△)   O   *   .  x     square(□)    diamond(◇)    v(▽)

        >(▷)      <(◁)        pentagram(☆)      none(기본값)


>>plot(x1,y1,x2,y2,x3,y3,...) 여러쌍의 데이터를 그림창에 한꺼번에 표현

   선의 색을 지정하지 않아도 알아서 식별되도록 처리해준다.

*******************************************************************


<이미 존재하는 그래프에 새로운 그래프 추가>

>>hold (=hold on)

>>hold (=hold off) 

보통, 이미 열려있는 그림창에 hold on을 시켜 원하는 선도를 삽입한 후

hold off로 닫아준다.


<복소수 관련 함수>

§ isreal(A) : 입력값이 복수수이면 0, 실수이면 1

§ real(A) : 실수부만 호출

§ imag(A) : 허수부만 호출

§ abs(A) :  복소수의 크기 계산 a+bi => sqrt(a^2+b^2)

§ angle(A) : 각도를 계산 (-파이~파이의 범위)




MATLAB(3) 그래픽 기능 II   

<객체의 라벨링>

▶ title(제목) xlabel, ylabel, zlabel(xyz라벨링) grid(격자)

▶ legend : 그래프에 범례를 더한다.

   legend('str1','str2',...,'strN'',정수)

    정수가 0(MATLAB에서 고려한 최적위치), 1(오른쪽 위,기본치)

    2(왼쪽 위), 3(왼쪽 아래), 4(오른쪽 아래) -1(그래프 영역 오른쪽 밖)

▶ text(x좌표,y좌표,'String') : 그래프 좌표의 어떤 지점에 marker를 지정하고

   그곳을 라벨링할 때-예를 들면 그 그래프가 어떤 함수인지를 표시할 때

▶ gtext('String') : 그림창이 열리면 좌표(십자표시)가 나타나는데 적당한

   곳을 선택해서 입력한다. 마우스를 이용한 좌표의 입력이다.

▶ 특수문자 : MATLAB 책 134 페이지 참조.



<극 좌표계 polar coordinate system>

크기(반지름)와 각도(방위각)으로 좌표가 결정된다.

▶ polar(각도, 반지름, '컬러,스타일,마커')

plot 명령과는 달리 한 figure에 다중 입력은 되지 않는다.



<막대, 면적 그래프> - 2D & 3D

▶ bar(x축,y축,'색깔') : 2차원    barh(x,y,'color') : 수평방향

▶ bar3(), barh3() : 3차원 표현이다.

▶ y가 행렬일 경우 -> bar 그룹이 생성된다. 마치 히스토그램처럼

▶ 기냥 y만 입력 -> x좌표는 1,2,3... 이렇게 차례로 할당된다.

▶ 기타 형태의 막대 그래프

   bar3(x,y,'group') : 그룹지어진 그래프

   bar3(x,y,'stack') : 적층된 그래프, 스택 형태로 쌓여진 그래프


<면적 그래프>

▶ area(x,y) 

   y가 행렬일 경우에는 적층된 형태로 면적 그래프가 그려진다.


<파이 차트 pie chart>

▶ pie(y) : 벡터 y의 각 요소의 퍼센트를 계산해서 차트로 표시(반시계방향할당)

▶ pie(y, explode) : 파이 차트에서 어떤 부분을 차트로부터 분리하고자 할때

   이때 explode는 y와 같은 크기의 행렬인데, 0이면 그 부분은 분리되지 않고

   0이 아니면 파이에서 분리된 모양으로 표시가 된다.

▶ pie(y, explode, {'data1','data2',...,'dataN'}) : 라벨링은 이와 같이 한다.


<히스토그램>

▶ hist() : 직각 좌표계에서의 히스토그램이다.

   히스토르갬은 행렬 형태의 data를 bar 형태로 만든 것과 비슷하다.


<이산 데이터 그래프>

▶ bar(x,y) : 막대 모양의 그래프를 그린다.

▶ stem(x,y) :  가지 모양으로 수직으로 뻗은 그래프를 그림

   stem(x,y,'색,선모양,마커')

   stem(x,y,'~~~','fill') : 선의 끝의 원을 색으로 채울 때 사용

   stem3(x,y) : 3차원 이산 그래프

▶ stairs(x,y) : 계단 그래프를 그린다.


<선 그리기>

▶ line(Ax,Ay) 또는 line3(Ax,Ay,Az)

   Ax=[x1,x2]   Ay=[y1,y2]   Az=[z1,z2]




MATLAB(4) 제어의 흐름   

<관계, 동등연산자>

▶ 동등(==), 다름(~=), 논리곱(&), 논리합(|), 부정(~)

   <(작음), >(큼), <=(작거나 같음), >=(크거나 같음)

   xor(A,B) 배타적 논리합

▶ 복소수 데이터의 관계 연산 : 허수부를 무시하고 연산된다.

▶ 복소수 데이터의 동등 연산 : 허수부를 고려한다.


<기타 관계를 나타내는 함수>

▶ isfinte() : 입력이 유한(1), 무한 또는 not a number(0)으로 반환

▶ isinf() : 위와 반대의 경우

▶ isnan() : 입력이 숫자인지 아닌지를 조사(Not A Number)

▶ isequal() : 복수의 입력 변수들이 수치적으로 같으면 1, 그외 0

▶ isnumeric() : 입력값이 수(1), 그 외의 경우 0

▶ isreal() : 입력값의 모든 요소가 실수이면 1, 복수수이면 0 반환

▶ ~isreal() : 입력값의 하나 이상의 복소수 존재시 1

▶ isglobal() : 입력 변수가 전역 변수일 경우 1.



<< 조 건 문 >>

▶ if 와 elseif : if로 시작해서 end로 끝을 맺어준다.

a. if 단독으로 사용된 경우

b. if와 else가 사용된 경우 => if에서 의 조건이 아닌 모든 것은 else가 된다.

c. if와 elseif와 else가 다 사용된 경우

  => if에서 조건이 아닌 나머지 경우가 elseif에서 검색되고 이것 역시 만족

  하지 않는 조건이 그 다음의 elseif, 또 그 다음..., 이렇게 되고 이 모든 조건

  을 만족하지 않는 조건이 바로 else가 된다.

★ 각각의 쓰임새가 다르기 때문에 이를 숙지하고 있어야 한다.


<< switch 문 >>

여러가지 경우를 평가할 때 유용하다.

C언어에서는 (,)대신 (:)가 사용, otherwise대신 default, end대신 {~~}사용

▶ switch(a)

        case 수식 1,

                문장 1;

        case 수식 2,

                문장 2;

        case 수식 3,

                문장 3,

             ......

        otherwise,

                문장 xx;

   end


<< 반 복 문 >>

● while (n<=100)

       s=s+n;

       n=n+1;

   end

● while(1)

   ....

   end           % 이 경우엔 무한 반복하게 된다(Ctrl + C로 정지시킬 수 있음)

● MATLAB에는 C언어의 증가 연산자와 감소연산자(++, --)가 없다.


★ for k=k의촉값 : k의증분값 : k의 최종값

        문장

   end


~!~ TIP ~!~

o C언어에서는 배열의 인덱스로서 i j를 사용하지만

  MATLAB에서는 i j가 허수로 최급되므로 인덱스로의 사용을 삼가는 게 좋다.

o error('message') : 메시지 문자열을 명령 프롬프트에 출력 후 종료.

o warning('message') : 오류 메시지만 출력. 종료 안하고 계속 진행.

o disp() : 변수명을 출려가지 않고 그 변수의 값만 출력

o input() : 키보드로부터 어떤 값을 입력받을 때 사용

  R = input('Input the Value = ');

  문자를 입력받고자 할 때 R = input('출력메시지','s');

o for나 while을 행렬로 대체할 수 있다면 실행속도가 상대적으로 느린

  for, while문 대신 행렬식 연산을 이용하는게 더 좋다.


<< 분 기 문 >>

:: 어떤 특수한 상황에서 for나 while같은 반복문을 탈출하기 위해 사용

▶ break : 例를 들어 while의 논리식이 영원한 참이라면? 무한루프를 돌게 된다.

  이때 if와 break를 적절히 사용해서 원하는바 대로 루프를 빠져나올수 있다.

▶ return : break는 break가 존재하는 그 루프만을 빠져나가지만 return은

   그 루프를 바져나감과 동시에 현재의 값을 m-file로 작성된 MATLAB 함수의

   반환값으로 반환시켜 버린다. C언어의 return문과 같은 역할




MATLAB(5) M-file사용   

(1) 스크립트로서의 사용

◎ 명령어 또는 함수들의 "일괄처리가 주 목적이다.

◎ workspace에서의 변수들과 m-file 내의 변수들이 서로 영향을 끼친다.

   (함수와의 가장 큰 차이라고 볼 수 있다)


(2) 함수로서의 사용

◎ 외부로부터 값을 입력받아서 연산을 수행한 후 다시 외부로 값을 반환해줌

◎ 파일명은 가급적 함수명과 동일하도록 사용한다.

◎ 변수의 범위 : global 변수 => 스크립트 경우처럼 workspace와 m-file 서로영향

                 local 변수 => m-file과 workspace에서의 변수 서로 영향 안 끼침


★ function 출력인자 = 함수이름(입력인자)


● function [out1,out2, ... ,outN] = function_name(input1,input2, ... ,inputM)

   다중입력, 다중 출력방식

● function out = function_name(input1,input2, ... ,inputM)

   다중입력, 단일 출력방식

● function function_name(input1,input2, ... ,inputM)

   다중입력, 출력은 없음. 주로 그래프 그리기처럼 출력인자가 필요없을 경우 사용

● function function_name()

   입력, 출력이 없음. m-file과 workspace간의 변수가 영향 안미침을 제외하고는 

   스크립트와 그 기능이 거의 같다.




MATLAB(6) 문자열 취급 & 메뉴윈도우   

문자열을 취급할 때에는 C언어와는 달리 작은 따옴표(' ')를 사용한다.

▶abs(str)  : str이 수이면 절대값계산, 문자열이면 ASCII값으로 반환

▶isstr(str) : str이 문자열이면 1, 그 외에는 0

▶strcmp(str1,str2) : 두 문자열을 비교해서 일치하면 1, 그 외 0 (대소문자구분)

▶upper(str) : 문자열을 대문자(uppercase)로 변환

▶lower(str) : 문자열을 소문자로 변환

▶char(str) : ASCII형태의 문자열을 실제 문자열로 변환

▶str2double(str) : 문자열이 숫자(실수)일 경우 숫자로 변환해 준다.



Dialog 및 메뉴 윈도우

▶menu('제목','아이템1','아이템2',...'아이템n')

  화면에 메뉴가 뜨며, 아이템 k를 선택하면 결과로 k값이 반환된다.

(예) choice=menu('음식','닭고기','김치','찌게'); 한 상태에서 김치를

      선택하면 choice값은 2가 되는 것이다.

▶inputdlg('프롬프트','타이틀') : 프롬프트는 문자열 포함 cell array이고

  이 cell array가 2개 이상일 경우 값을 입력받는 부분이 그 수만큼 생성

->값을 입력받으면 이는 문자열의 cell array가 되며 숫자로 변환하고자 할때

  str2double(str)과 같은 함수를 이용한다.




MATLAB(7) 파일의 입출력   

<<파일의 입출력>>

(1) save와 load를 사용한 파일의 입출력

→MATLAB의 save에 의해 저장된 2진 파일(MAT파일)

→ASCII파일. 텍스트 편집기 등을 사용해 저장된 문자없이 숫자만 이뤄진 것.


▶ save

save 파일명 : workspace에 있는 모든 변수를 한 파일로 저장

save 파일명 변수1, 변수2, ... ,변수n : 임의의 변수를 한 파일로 저장

save 파일명 -ascii : 기본 파일저장형식인 2진파일(MAT파일)을 ASCII파일로 저장


(!!중요!!)ASCII 파일로 저장할 경우

→ cell array는 ASCII로 저장되지 않는다.

→ 변수를 ASCII파일로 저장하면 변수명은 저장안되고 변수값만 저장된다.

→ 복소수 데이터를 ASCII 파일 저장시 실수부만 저장이 된다.


▶ load 파일명

→ MAT 파일로 저장된 경우 변수의 이름과 같이 정확히 로딩됨

→ 일반 ASCII로 저장된 형식의 경우 그 파일명이 그 데이터의 변수가 된다.



(2) I/O(입출력) 함수들을 사용하는 방법

절차 : 파일을 열기(fopen) → 정보를주고받기(읽기,쓰기) → 파일을 닫기(fclose)

▶ [FileID] = fopen('FileName','permission')

permission : a. 파일접근방식 'r'(읽기) 'w'(덮어쓰기) 'a'(이어쓰기)

                  b. 파일교환모드 b(2진모드) t(텍스트모드)

fpt = fopen('test.txt','rt')

파일 열기에 성공하면 3이 상의 값이 반환된다.

이제 변수 fpt는 C언어에서의 파일 포인터 역할을 하게 된다.


▶ FileClose = fclose(FileID)

파일 닫기에 성공하면 0의 값을 반환한다(FileClose변수를 굳이 쓸 필욘없음)

   fclose('all') : 현재 개방된 모든 파일을 닫고자 할 때



★ fscanf : 파일로부터 데이터를 읽어들이기 위해 사용

A = fscanf(FileID,'format',size)

[A count] = fscanf(FileID, 'format', size)

→size에서 결정된 크기만큼 읽어들인 후 A에 저장한다.

→count는 읽어들인 데이터의 개수를 나타낸다(n, inf, [m,n])

→포맷 %d %f %s %c %e(지수) %u(unsigned)


★ fprintf : 파일에 임의의 데이터를 쓰기 위해 사용된다.

count = fprintf(FileID,'format',인자1,인자2, ...)

파일에 성공적으로 data의 바이트 수가 count에 반환된다.

→ 포맷에 대해서는 328페이지 참조

→ \n(개행문자) \t(탭문자) \\(역슬래쉬) %%(퍼센트)

→ %-md

   -는 왼쪽 정렬맞추기. -가 없으면 오른쪽 맞추기

   m은 출력할 정수의 폭 (%-m.nf의 경우엔 소수점 이하 n자리까지의 부동소수)

   d는 파일 전환자정자 f u 등이 쓰이겠지?

(ex) fprintf(fpt,'%-5d',k)

Posted by 뮹실이

2013. 11. 7. 12:36 컴퓨터

X-CTU

x-ctu 사용법


기본 모듈 셋팅은 API 체크 안하고 Baud Rate 9600 에서


PC settings 탭 - baud rate , port 맞추고 test/query, API 설정 체크


read 하면 검색됨, 원하는 설정 후 write 신호


modem configuration 탭 - always 체크 하지 않으면 업뎃 되는것만 재설정 됨


test 시 PAN ID 겹치지 않도록, 기본이 235


PAN ID 설정, SCAN Channel 설정(옵션), Baud Rate 57600 으로 설정


코디네이터 설정시 XB24-B 에서 Coordinator API 로  Firmware 버전 1120


라우터 설정시 XB24-B 에서 Router API 로 Firmware 버전 1320


http://www.tessol.com/product/product_view.asp?product_idx=72

Posted by 뮹실이

2013. 11. 7. 12:33 컴퓨터

appcrash 해결방법

원인 : 알기 힘듬

 

해결 방법 1 : 키보드 입력 방법에 마이크로 스트프입력기 추가 후 기존의 2007을 제거

(상세 : 제어판 -> 시계, 언어 및 국가별 옵션 -> 국가 및 언어 -> 키보드 및 언어

-> 키보드 변경 -> 일반 -> 추가 -> 한국어 -> 키보드 -> Microsoft 입력기 체크

-> 확인 -> 일반 -> 기본입력언어 -> microsoft 입력기 선택 -> 설치된 서비스

-> microsoft office IME 선택 -> 제거 -> 확인)

 

오류 발생했던 프로그램 다시 실행해 appcrash 해결 확인

 

appcrash는 해결되지만 한글입력이 안되면

-> c:\windows\system\ 밑에 있는 ctfmon.exe를 실행해야함

    (xp의 경우는 커맨드 창에서 msconfig에서 시작프로그램으로 등록하면되지만

    윈도우7에서는 msconfig에 체크항목으로 나오지 않는다 따라서 레지스트리에 등록해

    부팅할때 강제로 실행되도록 한다.

     레지스트리 등록방법 : 실행창에서 regedit 입력 후

HKEY_LOCAL_MACHINE\

SOFTWARE\

Microsoft\

Windows\

CurrentVersion \ 

run에 들어가서  오른쪽창에서 우클릭 -> 새로만들기 -> 문자열 값 -> ctfmon

-> 값 데이터에 "ctfmon"="CTFMON.exe" 입력

)

Posted by 뮹실이

Error C2471: cannot update program database 프로그램 데이터베이스를 열 수 없습니다

 

해결 방법

 

솔루션 정리 후 다시 빌드

 

안되면 옵션 변경

 

C\C++  ->  General  ->  Debug Information format  ->  C7 Compatible (/Z7)

C\C++  ->  Code Generation  ->  Enable String Pooling  ->  Yes (/GF)

Linker  ->  General Debug Info  ->  Yes (/DEBUG)

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

X-CTU  (0) 2013.11.07
appcrash 해결방법  (0) 2013.11.07
우분투 인터넷 안될때  (0) 2013.11.04
TcpNoDelay, TcpAckFrequency 값 수정  (0) 2013.11.04
와이어샤크 wireshark 패킷분석프로그램  (0) 2013.10.25
Posted by 뮹실이

우분투 인터넷 연결 안될때


ip 설정 후

vi /etc/network/interfaces

iface eth0 inet static

address xxx.xxx.xxx.xxx

netmask 255.255.255.0

broardcast xxx.xxx.xxx.xxx

gateway xxx.xxx.xxx.xxx

dns-nameservers xxx.xxx.xxx.xxx


resolv.conf에 dns 를 추가해서 해결

vi /etc/resolv.conf


DNS 추가 

nameserver xxx.xxx.xxx.xxx

nameserver xxx.xxx.xxx.xxx

Posted by 뮹실이

윈도우


http://nenunena.tistory.com/148


http://support.microsoft.com/kb/823764/ko


http://support.microsoft.com/kb/170359/ko


http://windowexe.tistory.com/351



리눅스 


http://stackoverflow.com/questions/17842406/how-would-one-disable-nagles-algorithm-in-linux

Posted by 뮹실이

http://www.wireshark.org/download.html




쳐 화면에서 filter 쓰는 방법


필터 입력 창에 tcp.port == 12345 && ip.src == 172.1.1.10 입력 후


apply 클릭

Posted by 뮹실이
이전버튼 1 2 이전버튼

최근에 달린 댓글

06-11 05:29
Yesterday
Today
Total