[Linux] 리눅스 기본 명령어
1. 기본 명령어
ls
-
현재 위치의 파일 목록을 조회하는 명령어 입니다.
-
주요 옵션
-
ls -l
: 파일들의 상세정보를 나타냅니다. -
ls -a
: 숨어있는 파일들도 표시합니다. -
ls -t
: 파일들을 생성된 시간별로(최신것 부터) 표시합니다. -
ls -rt
: 파일들을 오래된 시간부터 표시합니다. -
ls -F
: 파일을 표시할 때 마지막에 유형을 나타내는 파일명을 끝에 표시합니다. ( '/' - 디렉토리 , '*' - 실행파일 , '@' - 링크 )
각 옵션들은 자유자재로 합성해서 사용가능합니다.
-
- ex)
ls -lrt
: 파일들의 상세정보를 나타내며, 오래된 것부터 포시합니다.
cd
-
경로를 이동할 때 사용하는 명령어 입니다.
-
주요 옵션
-
cd ~
: 어느 곳에든지 홈디렉토리로 바로 이동합니다. -
cd ..
: 상위 디렉토리로 이동합니다. -
cd /dir
: 절대경로 dir 로 이동할 경우 사용합니다. -
cd -
: 이동하기 바로 전의 디렉토리로 이동합니다.
-
touch
-
파일의 용량이 0인 파일을 생성, 날짜 변경하는 명령어 입니다.
-
주요 옵션
-
touch filename
: filename 의 파일을 생성합니다. -
touch -c filename
: filename 의 시간을 현재시간으로 변경합니다. -
touch -t 200001011200 filename
: filename 의 시간을 날짜정보(YYYYMMDDhhmm) 로 변경합니다. -
touch -r filename1 filename2
: filename2의 날짜정보를 filename1 의 날짜정보와 같게 변경합니다.
-
mkdir
-
새로운 디렉토리를 만들 때 사용하는 명령어입니다.
-
주요 옵션
-
mkdir dirname
: dirname 의 디렉토리를 생성합니다. -
mkdir -p dirname/subdname
: 존재하지 않는 디렉토리의 하위디렉토리까지 생성합니다. -
mk -m 644 dirname
: 특정 퍼미션을 갖는 디렉토리를 생성합니다.
-
cp
-
파일을 복사하는 명령어 입니다.
-
주요 옵션
-
cp file cfile
: file 을 cfile 이라는 이름으로 복사합니다. -
cp -f file cfile
: 복사할 때 복사대상이 있으면 지우고 강제로 복사합니다. -
cp -R dir cdir
: 디렉토리 복사할 때 사용하며, 폴더안의 모든 하위경로와 파일들을 모두 복사합니다.
-
mv
- 파일을 이동하는 명령어 입니다.
- cp 와 차이점
- cp는 파일을 복사하여 원본 파일이 남아있지만 mv 는 원본 파일이 남지 않는다
- 이름 변경시에도 사용가능합니다.
-
주요 옵션
-
mv fname mfname
: fname 의 파일을 mfname 의 이름으로 이동/변경 합니다. -
mv -b fname mfname
: mfname 의 파일이 존재하면 mfname 을 백업한 뒤에 이동합니다. -
mv -f fname mfname
: mfname 의 파일이 존재하면 백업 없이 덮어씁니다.
-
rm
-
파일이나 디렉토리를 삭제할 때 사용하는 명령어 입니다.
-
주요 옵션
-
rm fname
: fname 을 삭제합니다. -
rm -f fname
: fname 을 묻지 않고 삭제합니다. -
rm -r dir
: dir 을 삭제합니다.- 디렉토리는
-r
옵션 없이는 삭제할 수 없습니다.
- 디렉토리는
-
cat (catenate)
-
파일이름을 인자로 받아서 그 내용을 출력할 때 사용합니다.
-
주요 옵션
-
cat fname
: fname 의 내용을 출력합니다. -
cat fname1 fname2
: fname1 과 fname2 의 내용을 이어서 출력합니다. -
cat fname1 fname2 | more
: fname1, fname2 를 출력하는데 페이지별로 출력합니다. -
cat fname1 fname2 | head
: fname1, fname2 를 출력하는데 처음부터 10번째까지만 출력합니다. -
cat fname1 fname2 | tail
: fname1, fname2 를 출력하는데 끝에서부터 10번째까지만 출력합니다.
-
redirection ( '>' , '>>' )
-
리눅스 스트림의 방향을 조정하는 명령어 입니다.
-
명령 > 파일
: 명령의 결과를 파일로 저장합니다.cat fname1 fname2 > fname3
: fname1,fname2 를 출력하고 fname3 이라는 파일에 저장합니다.
-
명령 >> 파일
: 명령의 결과를 파일에 추가합니다.cat fname4 >> fname3
: fname3 에 fname4 의 내용을 추가합니다.
-
명령 < 파일
: 파일의 데이터를 명령에 입력합니다.cat < fname1
: fname1 의 내용을 출력합니다.
- ex)
cat < fname1 > fname2
: fname1 의 내용을 출력하는 결과물을 fname2 에 저장합니다.
alias
-
자주 사용하는 명령어를 간단한 명령어로 설정하는 명령어 입니다.
- 해제하고자 하는 경우에는
unalias
를 사용합니다.
- 해제하고자 하는 경우에는
-
alias new = 'command'
: command 를 실행하는 새 명령어 new 를 만듭니다. -
ex)
alias ls='ls -l'
: ls 를 실행하면 -l 옵션을 갖는 ls를 실행합니다. -
alias
: 현재 alias 목록을 출력합니다. -
unalias new
: new 라는 alias 를 해제 합니다.
2. 필수 명령어
history
-
쌍느낌표(Double exclamation)
!!
- 바로 직전 명령어를 실행한다.
-
주요 옵션
-
!! | grep Linux
- 이 기능을 다음과 같이 쉽게 응용 할 수 있다. 이전 명령어에 쉽게 추가하기
-
sudo !!
-
다음과 같이 root 권한 명령어인데 'sudo' 없이 사용한 명령어를 쉽게 불러와 사용할수 있다.
-
이는 방향키를 올려서 이전 명령어를 불러 오고 다시 앞쪽으로 이동하여 에디트하는 번거로움을 피할수 있다.
-
-
echo !! > script.sh
- 가끔 출력 결과를 파일이나 스크립트로 저장할 필요가 있을때가 있다. 이런 경우 '!!'를 사용하여 반복을 피할 수 있다.
-
'!'의 기능은 조금 다른데, 이는 명령어 이력번호를 호출하는데 사용된다.
-
! 이력번호
-
이전 명령어들이 각각 고유 식별번호가 존재하는데, 그 식별번호를 사용하여 재 사용이 가능하다.
-
!1093
- 이 명령어는 1093번 명령어를 재실행한다.
-
-
!-이력상대순번
: 마지막 명령어로 부터 뒤로 두번째 명령어를 재호출할때!-2
이렇게 사용하면 된다. -
주요 옵션
-
!^
: 이전 명령어의 첫번째 argument이다. -
!$
: 이전 명령어의 마지막 argument이다. -
!*
: 이전 명령어의 전체 argument가 있다.
-
-
응용 - 특정 명령어의 인수를 사용할 수 있다.
$ ls !ls:2
chmod, chown, chgrp
chmod
: 파일과 디렉터리의 권한을 변경할 때 사용합니다.
-
testfile2 파일의 소유자는 root이고 권한은 소유자 (읽기/쓰기), 그룹 (읽기), 다른 사용자 (읽기)의 권한이 부여된 파일
-
권한 부분은 직관적으로 표기하기 쉽게 숫자로도 설정이 가능합니다.
- 형식
chmod [권한] [변경할 파일 또는 디렉터리]
-
변경 방법
-
개별 단위 부여
-
chmod g+rw/go+rwx testfile2
-
문자를 활용하여 파일의 g(그룹), u(사용자), o(다른 사용자), a(모두)에 권한을 지정하는 방법입니다.
-
(+), (-)를 사용하여 권한을 부여하거나 제외시킬 수 있습니다.
-
-
숫자 단위 변경
-
chmod 777/766/744 testfile2
-
숫자를 활용하여 똑같이 g(그룹), u(사용자), o(다른 사용자), a(모두)에 권한을 지정하는 방법입니다.
- 숫자가 의미하는 권한이 무엇인지만 확실하게 알고 있으면 이렇게 사용자, 그룹, 다른 사용자에게 권한을 편하게 부여할 수 있습니다.
r=4, w=2, x=1 따라서 더하면 7!!! 확실하게 기억합시다.
-
-
chown
: 파일과 디렉터리의 소유주를 변경할 때 사용합니다.
-
chown -R
: 디렉터리 안의 파일들의 소유권도 동일하게 변경됩니다. -
형식
chown [소유주] [변경할 파일]
chown [소유주] [변경할 디렉터리]
chown [소유주]:[그룹] [변경할 디렉터리]
chgrp
: 파일의 그룹만 변경할 때 사용합니다.
- 형식
chgrp [그룹] [변경할 파일]
who
- 현재 시스템에 login 하고 있는 사용자의 리스트를 보여줍니다.
whereis
-
소스, 실행파일, 메뉴얼 등의 위치를 알려줍니다
-
ex)
whereis perl
: perl의 위치를 알려준다
vi
-
vi 편집기 상태로 들어감
-
ex)
vi newfile
: vi 편집기 상태로 들어감
tar, compress, gzip
tar
-
.tar, _tar로 된 파일을 묶거나 풀때 사용하는 명령어
- 압축파일이 아님
-
형식
-
tar cvf [파일명(.tar, _tar)] 압축할 파일(또는 디렉토리)
: 묶을 때 -
tar xvf [파일명(.tar, _tar)]
: 풀 때
-
compress
-
확장자 .Z 형태의 압축파일 생성
-
형식
-
compress [파일명]
: 압축시 -
uncompress [파일명]
: 해제시
-
gzip
-
확장자 .gz, .z 형태의 압축파일 생성
-
형식
-
gzip [파일명]
: 압축시 -
gzip -d [파일명]
: 해제시
-
.tar.Z
- 이것은 tar로 묶은 후에 compress를 사용하여 압축한 것으로 uncompress를 사용해서 압축을 푼 다음,
다시 tar를 사용해서 원래의 파일들을 만들어내면 됩니다.
- 아니면 다음과 같이 한 번에 풀 수도 있다.
zcat [파일명].tar.Z
: 해제 시
.tar.gz또는 .tar.z
gzip -cd [파일명]
: 해제시
.tar.gz 또는 .tar.z .tgz
- gzip을 사용해서 푼 다음 다시 tar를 사용해서 원래 파일을 만들어 낼 수 있으나, 다음과 같이 하면 한 번에 처리를 할 수 있다.
gzip -cd 파일.tar.gz | tar xvf - 또는 tar xvzf 파일.tar.gz tar xvzf 파일.tgz
grep
-
특정 파일에서 지정한 문자열이나 정규표현식을 포함한 행을 출력해주는 명령어입니다.
-
tail
이나ls
등 다양한 명령어와 조합하여 응용되는 경우가 많다. -
형식
grep [옵션][패턴][파일명]
- 문자열로 찾기
# 특정 파일에서 'error' 문자열 찾기
grep 'error' 파일명
# 여러개의 파일에서 'error' 문자열 찾기
grep 'error' 파일명1 파일명2
# 현재 디렉토리내에 있는 모든 파일에서 'error' 문자열 찾기
grep 'error' *
# 특정 확장자를 가진 모든 파일에서 'error' 문자열 찾기
grep 'error' *.log
-
주요 옵션
-
c
: 일치하는 행의 수를 출력한다. -
i
: 대소문자를 구별하지 않는다. -
v
: 일치하지 않는 행만 출력한다. -
n
: 포함된 행의 번호를 함께 출력한다. -
l
: 패턴이 포함된 파일의 이름을 출력한다. -
w
: 단어와 일치하는 행만 출력한다. -
x
: 라인과 일치하는 행만 출력한다. -
r
: 하위 디렉토리를 포함한 모든 파일에서 검색한다. -
m 숫자
: 최대로 표시될 수 있는 결과를 제한한다. -
E
: 찾을 패턴을 정규 표현식으로 찾는다. -
F
: 찾을 패턴을 문자열로 찾는다.
-
-
grep은 다른 명령어와 조합해서 사용하는 경우도 많습니다.
-
실시간 로그 보기 (tail + grep)
-
tail -f mylog.log | grep 192.168.15.86
-
mylog파일을 실시간으로 액세스하고 IP주소가 192.168.49.16인 행만 추출
-
-
특정 파일에서 여러개 문자열 찾기
-
cat mylog.txt | grep 'Apple' | grep 'Banana'
-
|
파이프를 사용하면 grep명령어를 여러 개 사용하여 특정 파일에서 여러 개의 문자열을 찾을 수 있을 수도 있습니다. -
위의 명령어대로 입력한다면 mylog.txt 파일에서 Apple과 Banana이 있는 문자열들을 찾을 수 있겠습니다.
-
-
find
-
리눅스 파일 시스템에서 파일을 검색하는 데 사용되는 명령어입니다.
- 다양한 표현식을 사용하여 원하는 파일의 목록을 추출할 수 있습니다.
-
형식
find [옵션] [경로] [표현식]
- ex)
find . -name "*log*"
: 현재 위치에서 log가 들어가는 파일 모두 찾기
-
주요 옵션
-
P
: 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용. -
L
: 심볼릭 링크에 연결된 파일 정보 사용. -
H
: 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외. -
D
: 디버그 메시지 출력.
-
-
경로
-
find의 인자값으로는 경로를 받습니다.
-
상대 경로, 절대 경로 모두 가능하며 대부분의 리눅스의 경우 이 경로 인자 값을 생략한다면 현재 위치(
.
)를 입력받은 것으로 간주 -
유닉스의 경우 이 경로를 입력받지 않으면 명령어 실행이 안되니 유의하셔야 합니다.
-
-
표현식
-
name
: 해당 이름의 파일을 찾음. 해당 이름에는 정규 표현식을 활용할 수 있음 -
type
: 지정된 파일 타입에 해당하는 파일 검색 -
user
: 해당 유저에게 속한 파일 검색 -
empty
: 빈 디렉토리 혹은 크기가 0인 파일 검색 -
delete
: 검색된 파일 혹은 디렉토리 삭제 -
exec
: 검색된 파일에 대해 지정된 명령 실행 -
path
: 지정된 문자열 패턴에 해당하는 경로에서 검색. -
print
: 검색 결과를 출력. 검색 항목은 newline으로 구분. (기본 값) -
print0
: 검색 결과를 출력. 검색 항목은 null로 구분. -
size
: 파일 크기를 사용하여 파일 검색. -
mindepth
: 검색을 시작할 하위 디렉토리 최소 깊이 지정. -
maxdepth
: 검색할 하위 디렉토리의 최대 깊이 지정. -
atime
: n일 이내에 액세스된 파일을 찾음. -
ctime
: n일 이내에 만들어진 파일을 찾음. -
mtime
: n일 이내에 수정된 파일을 찾음. -
cnewer file
: 해당 파일보다 최근에 수정된 파일을 찾음.
-
- 파일명으로 찾기 (-name)
# 현재 디렉토리에서 test가 포함되는 파일 찾기
find . -name "*test*"
# 현재 디렉토리에서 .txt 확장자 모두 찾기
find . -name "*.txt"
# 현재 디렉토리에서 .txt 확장자 파일 검색 후 모두 삭제
find . -name "*.txt" -delete
# 현재 디렉토리에서 test로 시작되는 파일 찾기
find . -name "test*"
# 현재 디렉토리에서 test로 끝나는 파일 찾기
find . -name "*test"
- 타입으로 찾기 (-type)
# 현재 디렉토리에서 모든 디렉토리 찾기
find . -type d
# 현재 디렉토리에서 test가 들어가는 디렉토리 찾기
find . -name "*test*" -type d
# 현재 디렉토리에서 모든 파일 찾기
find . -type f
d : 디렉토리
f : 일반적인 파일
l : 심볼릭 링크
- 파일 크기로 찾기 (-empty, -size)
# 현재 디렉토리에서 빈 디렉토리이거나 크기가 0인 파일 검색
find . -empty
# 현재 디렉토리에서 test가 들어가는 빈 디렉토리이거나 크기가 0인 파일 검색하여 삭제
find . -name "*test*" -empty -delete
# 현재 디렉토리에서 1024byte인 파일 검색
find . -size 1024c
# 현재 디렉토리에서 1024byte보다 큰 파일 검색
find . -size +1024c
# 현재 디렉토리에서 1024byte보다 작은 파일 검색
find . -size -1024c
# 현재 디렉토리에서 1kb보다 크고 10kb보다 작은 파일 검색
find . -size +1k -size -10k
b : 블록단위
c : byte
k : kbyte
w : 2byte 워드
- exec를 사용하여 검색한 대상에 추가 명령어를 수행
# 현재 디렉토리에 "test"가 들어가는 파일을 찾아서 상세정보 출력
find . -name "*test*" -exec ls -l {} \;
# 현재 디렉토리에 있는 파일에서 "test"가 들어가는 내용 찾기
find . -type f -exec grep "test" {} \;
# 현재 디렉토리에 ".txt" 확장자를 찾아서 모두 삭제
find . -name "*.txt" -exec rm {} \;
locate
-
리눅스(Linux)에서 파일을 검색하기 위해 주로
find
명령어를 사용합니다.find
명령어는 다양한 옵션이 있어서 원하는 파일을 거의 완벽하게 찾아낼 수 있지만 처음부터 하나하나 검색을 수행하기 때문에 속도가 느린것이 단점입니다.
-
단순하게 파일명으로 빠른 검색이 필요할 때는
locate
명령어를 사용하는 것이 좋습니다.
- 설치
sudo apt-get -y install mlocate
- 형식
sudo updatedb
locate 파일이름
-
locate 명령어가 파일 검색에서 빠른 속도를 보이는 이유는 검색DB(파일 목록 데이터베이스, mlocate.db 파일)를 미리 생성하기 때문입니다.
- locate 명령어를 처음 사용하는 경우라면 사용하기 전에
sudo updatedb
명령어로 DB파일을 만들어야 합니다. 그 다음locate
명령 다음에 검색하고 싶은 파일이름을 입력하면 됩니다.
- locate 명령어를 처음 사용하는 경우라면 사용하기 전에
-
locate 명령은 미리 만들어 놓은 DB파일에서 파일을 검색하기 때문에 최근에 삭제된 파일도 검색이 되는 문제가 발생하게 됩니다.
-
이런 문제를 피하고 싶다면 locate 명령어를 사용하기 전에
updatedb
를 실행해야 합니다. -
참고로
updatedb
작업은 크론(cron)에 등록되어 있어서 매일 새벽에 자동으로 실행됩니다.
-
크론(cron)
- 윈도우에서는 스케줄러와 비슷하다
- "특정 시간에 특정 작업을 해야한다."
참고
-
주요 옵션
-n
: 검색할 파일의 수를 지정
kill
- 프로세스 종료하기
- 각 프로레스는 고유한 번호를 가지고 있고 이를 PID(process identification number)라 부른다.
- PID는 1번부터 시작하고 프로세스가 실행되면서 하나씩 증가하여 부여되는데, 우분투에서 PID 1번은 init 프로세스가 실행되며, 2번은 kthreadd 프로세스가 실행된다.
- init 프로세스는 나머지 모든 시스템 프로세스의 부모 프로세스
- kthreadd 프로세스는 모든 스레드의 부모 프로세스
-
형식
- 15번 시그널을 프로세스에 보내 프로세스를 종료한다. (15번 시그널은 프로세스를 종료하라는 신호)
kill PID
-
주요 옵션
-
kill -9 PID
: 9번 시그널을 프로세스에 보내 프로세스를 강제 종료한다. (9번 시그널은 강제 종료 신호) -
pkill -x CMD
: kill과 달리 PID가 아니라 프로세스의 명령 이름(CMD)로 프로세스를 찾아 종료.- kill과 달리 명령 이름을 찾아 종료하므로 같은 명령이 여러 개 검색될 경우 한 번에 모두 종료된다.
-
mount
-
사용법
-
추가된 디스트 Volume 확인
sudo fdisk -l
-
파일시스템 생성
sudo mkfs.ext4 /dev/vdb
-
mount 받을 디렉토리 생성
sudo mkdir /bluexmas_db
-
mount 하기
sudo mount /dev/vdb /bluexmas_db
-
mount 확인
df -h
-
unmount 하기
sudo umount /bluexmas_db
-
unmount 확인
df -h
-
[자동 mount]
1.sudo blkid
- UUID 확인
2.sudo vi /etc/fstab
- fstab 파일에 파티션 추가
3.# 파티션 추가 UUID=6e0b7ac6-d17d-4829-839f-80662339cf6b /bluesanta ext4 defaults 0 0
<br/><br/>
### man
<br/>
- 로컬 시스템에서 여러 참고 문서들을 이용하여 특정 명령이나 자원들의 메뉴얼을 출력하는 영역으로 유닉스에서는 총 8개의 영역으로 되어 있으나 리눅스 커널 부분이 추가되어 총 9개의 영역으로 구성되어 있다.
- 형식
$ man [options][section] command
- 사용법
- `[SPACE]` : 한 페이지 밑으로 내려간다
- `[ENTER]` : 한 줄 밑으로 내려간다.
- `[b]` : 전 페이지로 올라간다.
- `[q]` : man 명령을 종료한다.
<br/>
- 메뉴얼 섹션
![](https://media.vlpt.us/images/corone_hi/post/407d6fe1-b039-4599-841e-1335363e09a2/image.png)
<br/>
- 주요 옵션
- `k` : 해당 키워드로 발견되는 모든 매뉴얼의 내용을 검색하여 보여준다.
- `-f` : 해당 키워드에 대한 완벽히 일치되는 매뉴얼 페이지에 대한 정보를 보여준다.
- `-w` : man 명령 실행 시에 호출되는 '메뉴얼 페이지' 파일의 위치를 보여준다.(--path)
- `-s, -S` : 특정 section을 지정할 때 사용한다. (--sections=섹션번호)
<br/><br/>
### ps
<br/>
- 프로세스 목록 보기
- 형식
ps
- 현재 셸이나 터미널에서 실행한 사용자 프로세스의 정보를 출력
- 출력정보 PID : 프로세스 번호
- 출력정보 TTY : 현재 터미널 번호
- 출력정보 TIME : 해당 프로세스가 사용한 CPU 시간의 양
- 출력정보 CMD : 프로세스가 실행 중인 명령
<br/>
- 주요 옵션
- `ps au` : 터미널에서 실행한 프로세스의 상세 정보 출력
- 출력정보 USER : 사용자 계정 이름
- 출력정보 PID : 프로세스 번호
- 출력정보 %CPU : CPU 사용량을 퍼센트로 표시
- 출력정보 %MEM : 물리적 메모리 사용량을 퍼센트로 표시
- 출력정보 VSZ : 사용하고 있는 가상 메모리 크기(KB)
- 출력정보 RSS : 사용하고 있는 물리적 메모리의 크기(KB)
- 출력정보 TTY : 터미널 번호
- 출력정보 STAT : 프로세스의 상태(필요하면 상태 나타내는 주요 문자의 의미 정리)
- 출력정보 START : 프로세스 시작 시간
- 출력정보 TIME : 해당 프로세스의 CPU 사용 시간
- 출력정보 COMMAND : 프로세스가 실행 중인 명령
- `ps ax | more` : 시스템에서 실행 중인 모든 프로세스 출력(너무 많아 프로세스 목록을 제대로 확인하기 힘드므로, more 명령 함께 사용)
- `ps aux | more` : 시스템에서 실행 중인 모든 프로세스의 자세한 정보 출력
- `ps -fu user` : 특정 사용자(여기선 user)가 실행한 프로세스의 목록 확인
- 출력정보 PPID : 부모 프로세스의 PID 번호
- 출력정보 C : CPU 사용량(% 값)
- 출력정보 STIME : 프로세스의 시작 날짜나 시간
>[특정 프로세스 정보 검색하기]
- `ps -ef | grep 명령` : ps명령을 통한 특정 프로세스 정보 검색. 사용 예) ps -ef | grep bash (배시 셸에 대한 정보 검색)
- `ps -fp $(pgrep -x 명령)` : pgrep 명령을 이용해 특정 프로세스 정보 검색 (pgrep로 검색하려는 프로세스의 PID를 찾아 ps 명령으로 자세한 정보를 확인)
<br/><br/>
Author And Source
이 문제에 관하여([Linux] 리눅스 기본 명령어), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@corone_hi/Linux-리눅스-기본-명령어저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)