2016년 12월 10일 토요일

[Java] 자바 시작하기(개발 환경 구성)

자바(Java)프로그래밍을 시작하기위해 가장 선행되어야 할 것은, JRE(Java Runtime Environment, 자바 실행 환경) 설치, 즉 JVM(Java Virtual Machine, 자바 가상 머신)라 불리는 가상머신과 각종 Java API들을 포함하고 있는 JDK(Java Development Kit, 자바 개발 키트)의 설치이다. Java API는 각종 기능의 자바 클래스들이 포함된 자바 라이브러리이고 JVM은 컴파일된 자바 클래스파일들을 실행하는 가상 머신이다. 단순한 자바  프로그램 이용자라면 JVM만이 포함된 JRE를 설치하면 되겠지만 자바 개발자들은 이 2개가 모두 필요하기 때문에 Oracle에서는 JDK에 이 2가지를 포함하여 쉽게 설치할 수 있도록 하고 있다.

JDK를 다운받을려면 오라클 JDK 다운로드 페이지로 이동하자. 링크를 클릭하면 아래와 같은 페이지를 보게될것이다.

Oracle Java SE 다운로드 페이지

좌측 상단에는 각종 Java 제품들의 종류별로 카테고리가 나눠져 있고, 중앙 상단에는 JDK 설치와 NetBeans와 JDK를 함께 설치할 것인지 선택 옵션이 있다. 그리고 중앙 하단 우측에는 JDK, Server JRE, JRE 3개 선택 페이지가 있다. 참고로 형광펜으로 색칠된것을 보면 현재 Java SE는 8u112버젼이 최신 버젼인것을 알 수 있다. Java 8의 112번째 Update 라는 뜻이다.

참고로 JAVA SE는 Standard Edition, 데스크톱 어플리케이션과 간단한 서버 어플리케이션 개발 사용되며 EE는 Enterprise Edition, 복잡한 서버 어플리케이션 개발에, ME는 Micro Edition, 스마트폰과 기타 장치들에 사용된다. NetBeans는 Oracle에서 제공하는 IDE이다.

우리는 JDK가 필요하니 중앙 상단의 JDK설치만 설치를 클릭하자(왼쪽 옵션이다).
클릭 후 새 페이지로 이동하면 OS 별 JDK 리스트를 볼 수 있을텐데 본인 OS에 맞는 JDK를 설치하자. 나는 Ubuntu 16.04 64bit 버젼을 사용하므로 Linux x64(tar.gz)를 다운받았다. 윈도우 사용자들은 Window x32, x64를 윈도우 버젼에 맞게 설치하면 된다. 윈도우 사용자들은 설치파일을 단순히 실행하면 설치가 가능하고, linux 사용자들은 아래와 같이 설치하면 된다.


#파일 다운로드가 완료된 디렉토리로 이동 후 ~
#파일 압축해제
user@user-desktop:~/Downloads$ tar -xvf jdk-8u112-linux-x64.tar.gz
#파일 이름변경
user@user-desktop:~/Downloads$ mv jdk1.8.0_112 jdk1.8
#opt 폴더 내 java 디렉토리 생성
user@user-desktop:~/Downloads$ sudo mkdir /opt/java
#jdk1.8 폴더를 /opt/java 로 이동
user@user-desktop:~/Downloads$ sudo mv jdk1.8 /opt/java

이렇게 하면 다운받은 JDK가 /opt/java 폴더 내로 이동된다. 이후에 리눅스 사용자들은 jdk1.8/bin 디렉토리를 executable path에 추가해 주어야 한다. 윈도우 사용자들도 설치된 jdk를 환경변수에 등록해주어야 한다.


user@user-desktop:~$ sudo vi .profile
#.profile 파일을 열어 export PATH=/opt/java/jdk1.8/bin:$PATH 구문을 추가해주자

그리고 로그아웃 후 다시 로그인 하면 아래와 같이 자바가 설치되었음을 알 수 있을것이다.


user@user-desktop:~$ java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)

2016년 9월 17일 토요일

[Linux] chown(소유권 변경) vs chmod(파일권한 변경) 명령어

Linux 기반 OS를 사용면서, 특히 Software Center에 없는 어플리케이션들을 설치할 때 자주 사용하게 되는 명령어가 있다. 주로 폴더, 또는 파일 이동 후 소유권과 파일권한을 변경할 때 사용하게 되는 명령어인 chownchmod이다.

우선 두 명령어의 차이부터 말하자면, chown은 "change owner", 즉 파일, 또는 폴더의 소유권을 변경하는 명령어이고, chmod는 "change mode", 파일이나 폴더의 권한(읽기, 쓰기, 실행)를 변경한다. "change mode"인 이유는 UNIX 시스템에서 이러한 권한들을 mode라 부르기 때문이다.

파일, 폴더(디렉토리)의 권한과 소유권 보기

간단하다. ls 명령어에 1개의 flag만 추가해주면 된다.

user@user_group:~/exp$ ls -l
drwxrwxr-x  2 user user_group 4096 Sep 17 06:39 dir1
drwxrwxr-x  2 user user_group 4096 Sep 17 06:39 dir2
-rw-rw-r--  1 user user_group    0 Sep 17 06:39 file1

l flag는 long listing format을 뜻하고, 사용시 디렉토리와 파일에 대한 자세한 정보를 보여준다.
보면 실제 표는 아니지만 표와같은 형식을 띄고 있는데,
첫번째 블락이 권한 문자열(Permission string),
두번째 블락이 해당 디렉토리 내부의 파일과 디렉토리 갯수,
세번째 블락이 소유주,
네번째가 소유주가 속한 그룹,
다섯번째가 크기,
6,7,8번째는 마지막으로 파일/디렉토리에 접근한 시각,
아홉번째가 파일/디렉토리의 이름을 의미한다.
dir1을 예로 들면 drwxrwxr-xdir1에대한 permission이다.
형식은 언제나 똑같다. 첫번째 글자는 해당 파일이나 디렉토리가 디렉토리(d), 일반파일(-), 특수파일(s)인지를 뜻한다.
보면 알겠지만 dir1, dir2d가 첫글자이니 디렉토리이고, file1-가 첫글자이니 일반파일이다.
그리고 그 뒤의 3글자, dir1의 경우에는 rwx인 3글자는, r->read, w->write, x->execute 해당 소유주의 읽기, 쓰기, 실행 권한을 의미하고, -로 표시된것은 그 권한이 없다는것을 뜻한다.
그 다음의 3글자는 소유주그룹의 권한, 마지막 3글자는 위의 2그룹에 포함되지 않는 다른 모든유저(All other users)의 권한을 가르쳐준다.
dir1을 보면, 디렉토리이고 user계정에서 읽고,쓰고,실행 할 수 있으며, user_group그룹에서도 읽고, 쓰고, 실행하며, 그 이외의 계정들에서는 읽고, 실행만 가능한것을 알 수 있다.

chown

파일이나 디렉토리의 소유주를 바꾸는 명령어이다.
"chown user:group /file/path" 형식으로 명령을 실행하면 된다. dir1의 소유주를 root 그룹의 root로 바꾸려면

user@user_group:~/exp$ sudo chown root:root dir1
user@user_group:~/exp$ ls -l
drwxrwxr-x 2 root root 4096 Sep 17 06:39 dir1
drwxrwxr-x 2 user user 4096 Sep 17 06:39 dir2
-rw-rw-r-- 1 user user    0 Sep 17 06:39 file1

chmod

파일이나 디렉토리의 권한을 바꾸는 명령어이다. 문자로 사용할수도 있고, 8진수형식(Octal Format)으로도 사용이 가능한다.

chmod 명령어 문자 옵션
문자권한
rRead(읽기)
wWrite(쓰기)
xExecute(실행, 디렉토리일경우 검색)
XExecute(디렉토리일경우에만 실행, 검색)
s소유주와 같은 권한으로 파일 실행 가능(setuid bit)
t쓰기권한에 관계 없이 소유주만 삭제 가능(sticky bit)
u현재 파일을 소유한 사용자(user)
g소유한 사용자의 그룹 멤버들
ou 와 g에 속하지 않는 모든 사용자들

권한을 추가하는데는 +, 제거하는데는 -를 사용한다 예를들면 다른 모든 사용자들에게 dir1의 쓰기(wirte)권한을 주고 실행(x)권한을 제거하기 위해서는 아래와 같은 명령을 사용하면 된다

#권한 변경전
user@user_group:~/exp$ ls -l
drwxrwxr-x 2 root root 4096 Sep 17 06:39 dir1
drwxrwxr-x 2 user user 4096 Sep 17 06:39 dir2
-rw-rw-r-- 1 user user    0 Sep 17 06:39 file1

#권한변경 명령
user@user_group:~/exp$ sudo chmod o+w-x dir1

#권한변경 후
user@user_group:~/exp$ ls -l
drwxrwxrw- 2 root root 4096 Sep 17 06:39 dir1
drwxrwxr-x 2 user user 4096 Sep 17 06:39 dir2
-rw-rw-r-- 1 user user    0 Sep 17 06:39 file1

dir1 디렉토리의 마지막 3문자, 현 사용자, 사용자 그룹을 제외한 다른 모든 사용자들의 권한을 의미하는 3자리가 변경된게 보인다.

chmod 8진수형식(Octal Format)
8진수 값읽기(Read)쓰기(Write)실행(Execute)
7OOO
6OO-
5O-O
4O--
3-OO
2-O-
1--O
0---

8진수 형식은 권한을 8진수로 표시하게 된다. 실행은 8진수 1, 쓰기는 2, 읽기는 4, 이 3 숫자의 합으로 3가지 권한의 모든 조합을 표시할 수 있다. 또 8진수형식 chmod를 사용할 때는 사용자를 따로 지목하지 않고, 3자리 8진수로 모든 권한을 표시한다.

예를들면 3자리 8진수의 각 숫자들은 위에서 말했던 권한문자열에서 사용자, 사용자그룹, 다른 모든 사용자들을 의미한다.

8진수 777은 사용자, 사용자그룹, 다른모든 사용자들이 rwx권한을 가지게 되므로, rwxrwxrwx 권한 문자열을 의미하게 된다.

#권한 변경전
user@user_group:~/exp$ ls -l
drwxrwxrw- 2 root root 4096 Sep 17 06:39 dir1
drwxrwxr-x 2 user user 4096 Sep 17 06:39 dir2
-rw-rw-r-- 1 user user    0 Sep 17 06:39 file1

#권한변경 명령
user@user_group:~/exp$ sudo chmod 777 dir1 
#777 = rwxrwxrwx
user@user_group:~/exp$ sudo chmod 750 dir2 
#750 = rwxr-x---
user@user_group:~/exp$ sudo chmod 700 file1
#700 = rwx------

#권한변경 후
user@user_group:~/exp$ ls -l
drwxrwxrwx 2 root root 4096 Sep 17 06:39 dir1
drwxr-x--- 2 user user 4096 Sep 17 06:39 dir2
-rwx------ 1 user user    0 Sep 17 06:39 file1