instructions of Linux-Understading BigData(4)
Intro
학교 수강과목에서 학습한 내용을 복습하는 용도의 포스트입니다.
빅데이터 개념과 오픈소스인 아파치 하둡과 맵리듀스 및 스파크를 이용한 빅데이터 적용을 공부합니다.
맵 리듀스의 경우 사용하기에 다소 진입장벽이 있는편입니다.
스파크처럼 통합 환경을 제공하지 않아 원하는 유틸리티나 라이브러리를 별도로 연결해서 사용해야하기 때문입니다. 이를 해소하는 것이 스파크라는 분산 데이터 처리 통합 엔진입니다.
따라서 맵 리듀스로 먼저 공부해보고, 스파크로 넘어갑니다.
스파크 엔진의 경우 Java가 아닌 Scalar라는 언어로 사용하며, 기존 우리가 알고 있는 SQL을 통해 고급 질의가 가능하며, 시각화나 스트림 처리 및 기계학습등 까지의 높은 수준의 분석을 제공하는 통합 프레임 워크입니다.
빅데이터 컴퓨팅(분산시스템상의 분산처리 환경)의 기본 개념과 원리를 이해하고 이를 실습해보는 과정에서 2대 이상의 리눅스 클러스터 서버를 구축 및 활용할 것입니다.
빅데이터이해(1) 보러가기
빅데이터이해(2) 보러가기
빅데이터이해(3) 보러가기
이번엔 리눅스 클러스터 상에서 하둡과 스파크가 동작하기 때문에 리눅스의 파일에 관련된 명령 및 기본 명령어를 정리하겠습니다.
아래 순서로 학습이 진행됩니다.
- 파일 작업 명령어
- 기본 관리 명령어
- 사용자 관리
파일 작업 명령어
리눅스의 파일과 디렉토리는 계층적인 트리구조로 이루어져있습니다.
최상위는 항상 root 디렉토리에 기반을 합니다.
사용자가 로그인을 하면 처음 위치하는 디렉토리는 홈입니다.
“~”로 홈을 대신 부르기도 합니다.
기본적으로 “/home/userID” 형식으로 생겼습니다.
사용자의 홈 디렉토리를 식별하는 $HOME이라는 환경변수를 지정하게 되는데, 이러한 환경변수들은 “.profile”, “.login”, bourne again shell record라는 즉, “.bashrc”, “.cshrc” 등에 저장됩니다.
참고로 .으로 시작하는 파일은 숨겨진 파일입니다.
절대경로와 상대경로의 개념을 알아야합니다.
- 절대경로 : 모든 경로명을 반드시 루트 디렉토리인 “/”로 시작되어 특정한 파일이나 디렉토리를 표시
- 상대경로 : 현재 작업 디렉토리에 대해 상대적인 경로이름 이용
만약 우리가 root/export/home/bigdata에 위치해있다면 home 디렉토리는 ../으로 상대위치를 표시하며 usr로 가려면 ../../../usr/라고 상대위치를 표시할 수 있습니다.
- ls
- 기능 : 파일 및 디렉토리의 목록을 출력합니다.
- 형식 : ls [옵션] [ {디렉토리 | 파일} ]
- 옵션
-l : 파일 크기, 저장날짜, 허가권(permission), 소유권 등을 포함해 자세히 보기
참고로 허가권에는 Read, Write, eXecution 등이 있습니다.
-a : 마침표로 시작하는 숨겨진 파일을 포함한 모든 파일 보여주기
-t : 시간 순서대로 정렬하여 보기
-R : 하위 디렉토리의 파일까지 재귀적으로 보여주기
참고로 -al 등 섞어 사용도 가능합니다.
- 기능 : 파일 및 디렉토리의 목록을 출력합니다.
- cd
- 기능 : 디렉토리 이동
- 형식 : cd [디렉토리명]
- 디렉토리명
~ : 자신의 홈 디렉토리
~(계정이름) : 다른 사용자의 홈 디렉토리
. : 현재 디렉토리
.. : 상위 디렉토리
- : 바로 직전에 사용한 디렉토리 - pwd는 현재 작업중인 디렉토리를 보여주는 명령어입니다.
- 기능 : 디렉토리 이동
-
cat
cf) 파일의 생성 및 보기 시에는 vi, emacs, nano, gedit(GUI) 등의 문서 편집기를 이용합니다.
cf) cat(catenate)은 파일을 새로 만들거나 덮어쓰거나 어펜드하는 것이 가능합니다.
보통 cat 명령을 이용할 때에는 리다이렉션이라는 기호를 함께 사용하곤 합니다.
cat > test.dat 또는 cat >> test.dat 등이 그 예입니다.
리다이렉션 없이 사용할 때에는 (ex)cat test.dat) 파일의 내용을 화면에 출력하는 기능을 합니다. -
more
파일의 내용이 큰 경우에는 화면을 넘어가기 때문에 more 명령어를 이용하여 한번에 한 화면씩 내용을 보여주게됩니다.
다음 화면 전환시에는 스페이스바를 누르시면되고, 종료 시에는 q를 누릅니다. - head, tail
- head -n 파일 : 처음 n줄 보기
- tail -n 파일 : 마지막 n줄 보기
n의 default값은 10 입니다.
- head -n 파일 : 처음 n줄 보기
- cp
- 기능 : 소스파일을 목적파일에 복사
- 형식 : cp [옵션] 소스파일 목적파일
- 옵션
-f : 강제적 복사 목적파일이 이미 존재하더라도 확인을 요구하지 않습니다.
-i : 대화형 복사로 사용자에게 확인을 한 번 더 받습니다.
- 기능 : 소스파일을 목적파일에 복사
- mv
- 기능 : 파일을 이동하는 명령이며, 윈도우의 rename 명령에 해당합니다.
- 형식 : mv [소스파일] [목적파일] or mv [소스파일들 …] [디렉토리]
후자의 형식대로 명령을 입력하게되면 소스파일들을 지정한 디렉토리로 이동합니다.
mv명령에도 -f와 -i 옵션이 있습니다.
- 기능 : 파일을 이동하는 명령이며, 윈도우의 rename 명령에 해당합니다.
- mkdir, rmdir
- 기능 : 디렉토리를 생성합니다, 디렉토리를 삭제합니다.
- 형식 : mkdir [디렉토리명], rmdir [디렉토리명]
- 기능 : 디렉토리를 생성합니다, 디렉토리를 삭제합니다.
문제를 하나 내보겠습니다.
명령어 “mv test.* ..”를 입력하게되면 어떤 일이 일어날까요?
현재위치의 상위 디렉토리로 확장자 상관없이 test라는 이름을 가진 모든 파일이 이동되는 것 입니다. *는 와일드카드입니다.
- rm
- 기능 : 파일을 삭제합니다.
- 형식 : rm [옵션] 파일명
- 옵션
-f : 강제 삭제
-i : 대화형 삭제
-r : 재귀적으로 실행, 파일을 삭제할 때 하위 디렉토리를 포함해 모든 파일을 삭제합니다.
- 기능 : 파일을 삭제합니다.
문제를 하나 내겠습니다.
현재 위치의 모든 파일을 다 삭제하고자 할때는 어떤 명령어를 입력하면 될까요?
정답은 rm -rf *입니다.
- ln
- 기능 : 원본파일을 가리키는 링크 파일을 생성
- 형식 : ln [옵션] 원본파일 링크파일
- 옵션
-s : 심볼릭 링크로 설정하는 옵션
-l : 링크파일에 어떤 링크가 있는지 확인하는 옵션
- 기능 : 원본파일을 가리키는 링크 파일을 생성
cf) 링크의 종류
- 하드링크 : 원래의 파일과 동일한 i-node를 가리킵니다.
i-node는 메타데이터(파일의 속성) 등이 저장되는 곳 입니다.
그렇기 때문에 원본 파일 이동 시에도 원본 파일에 접근이 가능합니다. - 소프트링크 : symbolic link라고도 부르며, 새로운 i-node가 생성되어 원본 파일과 연결됩니다.
다른 파티션 뿐 아니라 다른 네트워크 장치에 있는 파일에도 링크를 걸 수 있습니다.
하지만 원본파일이 이동되면 접근할 수 없습니다.
마치 윈도우의 바로가기 기능과 흡사합니다.
- chmod
- 기능 : 파일 권한 변경하기
파일의 허가권은 파일타입, 소유자, 그룹, 기타사용자 총 네 개의 부분으로 나누어져 있습니다.
허가권을 표시할 때에는 읽기 권한인 R, 쓰기 권한인 W, 실행 권한인 X 순서대로 표시하게 되며 권한이 없는 경우에는 해당하는자리를 -로 표시하게 됩니다.
아예 허가권이 없는 파일의 경우는 ---로 표시되겠죠?
허가권 자리별 의미를 아래 캡처에 정리해드리겠습니다.
위 예제의 경우 디렉토리가 아닌 파일이며, 소유자는 읽고 쓸수 있는 권한이있고 실행권한은 없으며, 그룹과 기타 사용자에게는 읽기 권한만 있는 파일이라는 것을 알 수 있습니다.
파일 허가권은 여러 조합이 나올 수 있겠죠?
관련하여 이미 잘 정리해두신 포스팅 링크를 여기 에 걸어두겠습니다.
이러한 권한을 변경하기 위해서는 아래 형식의 명령어를 입력하게 됩니다.
chmod [옵션] change ,{change}* {fileName}+
- 기능 : 파일 권한 변경하기
문제를 하나 봅시다!
-rw-rw-r-- 2 lee lee 21 3월 22 14:35 test.dat
이라는 파일을 아래처럼 바꾸려면 어떤 명령어를 입력하면 될까요?
-rwxr----- 2 lee lee 21 3월 22 14:35 test.dat
정답은 chmod u+x,g-w,o-r test.dat 입니다.
이 방법이 번거롭다면 8진수로 계산하여 권한을 설정할 수도 있습니다.
위 문제를 8진수로 변경한다면 정답은 chmod 740 test.dat 입니다.
- find
- 기능 : 디렉토리 트리에서 파일을 찾고자 할 때 사용
- 형식 : find 탐색을시작할디렉토리 [옵션]
- 기능 : 디렉토리 트리에서 파일을 찾고자 할 때 사용
/etc 이하 디렉토리에서 “pass”로 시작하는 파일의 경로를 찾으려면 아래 명령어를 입력하시면 됩니다.
find /etc -name pass* -print
/usr/src 이하 디렉토리에서 이름이 core인 모든 파일을 찾아 삭제하려면 아래 명령어를 입력하시면 됩니다.
find /usr/src -name core -exec rm
- locate
- 기능 : 파일이름으로 간단하게 파일을 찾는 명령
- 형식 : locate 파일명
- 기능 : 파일이름으로 간단하게 파일을 찾는 명령
- which
- 기능 : 파일의 위치 보기
- 형식 : which 파일명
이 명령어는 찾고자하는 파일의 전체 경로(full path)를 알아볼 때 유용합니다.
which 명령어는 환경변수에 설정되어있는 실행 경로만을 검색하므로 find 명령어랑 차이가 있죠.
- 기능 : 파일의 위치 보기
- whereis
- 기능 : 명령어 위치보기
- 형식 : whereis 명령어 및 매뉴얼
환경변수에 등록되어있는 각종 경로를 검색하여 명령어 및 매뉴얼 위치를 검색합니다.
- 기능 : 명령어 위치보기
-
리다이렉션
프로그램의 출력을 파일로 보내거나 입력하는 기능입니다.
overwrite는 >, append는 >>, input은 <입니다. - grep
- 기능 : 지정된 파일에서 지정된 문자열을 읽어 해당 줄을 반환해주는 등의 기능
- 형식 : grep 문자열 파일명
- 기능 : 지정된 파일에서 지정된 문자열을 읽어 해당 줄을 반환해주는 등의 기능
- 파이프
- 기능 : 한 명령의 실행결과가 | 기호 다음의 명령으로 전달되는 기능입니다.
- 형식 : 앞선명령 | 이후의명령
- 기능 : 한 명령의 실행결과가 | 기호 다음의 명령으로 전달되는 기능입니다.
- 세미콜론
- 기능 : 같은 라인에 여러개의 명령어를 한 번에 입력하는 용도
- 형식 : 첫번째 명령; 두번째 명령
- 기능 : 같은 라인에 여러개의 명령어를 한 번에 입력하는 용도
- 백그라운드
- 기능 : 명령의 종료를 기다리지 않고 바로 다음 명령을 기다리는 프롬트 상태
- 형식 : 명령 끝에 & 입력
이는 실행이 긴 프로세스나 명령에 유용하며, 참고로 &가 없는 일반 명령 실행은 포그라운드라고 합니다.
- 기능 : 명령의 종료를 기다리지 않고 바로 다음 명령을 기다리는 프롬트 상태
- ps
- 기능 : 프로세스 상태 확인
- 형식 : ps [옵션]
- 옵션
-e,A : 모든 프로세스
-f : 절대경로 표시
-l : 긴형식으로 표시
-u : 실행 유저와 실행 시간 표시
-j : 작업 제어 형식으로 표시
-s : 시그널 형식으로 표시
-m : 메모리 정보
-a : 다른 사용자의 프로세스
-x : 터미널 제어 없는 프로세스
- 기능 : 프로세스 상태 확인
- kill
- 기능 : 프로세스 종료 시키기
- 형식 : kill [옵션] 프로세스id
- 옵션
-s또는 -number : 프로세스에 시그널 번호를 보냅니다.
-9 : 프로세스를 강제로 종료시킵니다.
- 기능 : 프로세스 종료 시키기
기본관리 명령어
- sudo
리눅스는 아시다시피 멀티태스킹, 멀티유저 운영체제이기때문에 사용자모드와 커널모드(=관리자모드) 이중모드로 동작을 합니다.
엄격히 구분이 되어있는 이 두 모드에 대해 사용가능한 명령어가 따로 있습니다.
수퍼유저 권한 사용 방법은 크게 세 가지가 있습니다.
- root 계정으로 로그인
- su 명령을 사용하여 root 계정 권한 획득
- sudo 명령어를 사용하여 root 권한으로 명령어 실행
예제를 봅시다.
test.dat 파일의 사용자 소유권 변경을 하려면 어떤 명령어를 입력하면 될까요?
chown username filename
- root 계정으로 로그인
위 명령어를 통해 파일 filename의 소유권을 사용자 username으로 지정합니다.
하지만 관리자가 아니기 때문에 이 명령어를 입력했을 때 오류가 납니다.
일시적 관리자 권한을 가져다 쓸 수 있는 sudo라는 명령어를 이용하여 다시 명령을 하면 해결할 수 있습니다.
sudo chown username filename
이렇게요.
cf) APT 패키지 관리도구 : 우분투에서는 패키지를 설치 및 관리하기 위해 APT(Advanced Package Tool) 소프트웨어 관리 도구를 사용하며, 패키지 저장소를 통해서 패키지를 다운로드 받습니다.
cf) 패키지저장소(repository) : 패키지와 패키지 정보 등을 저장하여 집중 관리하는 서버를 말합니다. 저장소의 위치 즉 인덱스 정보는 /etc/apt/sources.list 파일에 저장됩니다.
저장내용 형식은 deb[deb-src] URI release section 와 같습니다.
저장이 되어있어야 우리가 그 패키지를 설치할 수 있어요.
APT 패키지 관리 명령어들도 더 알아봅시다.
apt-get install package명
// 패키지를 다운로드 받아 설치
apt-get source package명
// 소스코드 다운로드
apt-get remove package명
// 설치된 패키지를 삭제
apt-get update
// /etc/apt/sources.list에 저장된 패키지 인덱스 정보 업데이트
apt-get upgrade
// 설치되어있는 패키지를 검사하여 최신 버전으로 업그레이드
apt-get search package명
// 설치되어있는 패키지 검색
apt-cache pkgnames 또는 dpkg -l
// 시스템에 설치되어있는 모든 패키지 목록을 보여줌
apt-cache stats
// 설치된 패키지의 상태정보 출력
apt-cache show package명
// 패키지에 대한 소프트웨어 정보 출력
아래 명령어를 입력해 x86info라는 패키지를 설치해보는 실습을 해봅시다.
sudo apt-get install x86info
패키지 설치가 정상적으로 완료된 후 x86info 명령어를 입력하면 CPU에 대한 정보가 출력됩니다.
리눅스에서 작업을 하다보면 경우에 따라서 /etc/apt/sources.list에 저장소를 추가해야하는 경우가 있습니다.
그럴 땐 아래명령어를 입력하여 추가하기 전에 먼저 기존 저장소를 백업합니다.
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
이후에 새 저장소를 추가하고 업데이트를 진행해줍니다.
sudo apt-get update
추가 방법은 sources.list파일에서 주석을 제거하거나, add-apt-repository 명령을 사용합니다.
물론 저장 내용의 형식을 맞춰서 작성해줘야겠지요.
sudo add-apt-repository “ deb http://kr.archive.ubuntu.com/ ubuntu/ precise main restricted”
위 두가지 방법 말고도 ppa(personal package archive) 추가 해야하는 경우도 있습니다.
말 그대로 우분투 공식 패키지저장소에 없는 개인 패키지 저장소인데요, 이럴땐 아래 명령어를 이용하시면 됩니다.
sudo add-apt-repository ppa:ondrej/php5
어떤 방법으로든 추가했다면 업데이트를 진행해주세요.
- gzip, gunzip
- 기능 : 파일을 압축합니다, 압축파일을 압축해제합니다.
- 형식 : gzip [옵션] 파일명, gunzip [옵션] 파일명
- 기능 : 파일을 압축합니다, 압축파일을 압축해제합니다.
- tar
패키지 배포 등에 많이 사용하게 될 명령어입니다.
- 기능 : 파일이나 디렉토리를 하나로 묶거나 푼다.
- 형식 : tar 옵션 파일명 [위치]
- 옵션
-c : 하나의 파일로 묶기(compress)
-x : 묶인 파일 풀기(extract)
-v : 파일을 묶거나 풀 때 진행 과정을 자세히 보여줌(verbose)
-f : 묶음 파일명, tar 명령어를 사용할 때 반드시 사용됨(file)
-z : gzip과 관련하여 여러파일들의 압축 및 압축해제를 동시에 수행
- 기능 : 파일이나 디렉토리를 하나로 묶거나 푼다.
- man, info
- 기능 : 도움말 찾기
- 형식 : man 명령어, info 명령어
cf) 온라인 매뉴얼도 존재하며 아래에 링크남겨두겠습니다.
http://man.he.net/
- 기능 : 도움말 찾기
사용자 관리
리눅스의 모든 파일과 프로그램은 특정 사용자에게 소유됩니다.
사용자 ID에 기반해서 구분이 되고 배운바와 같이 일반 사용자와 root 사용자인 슈퍼유저가 있습니다.
사용자 계정 정보는 /etc/passwd에 “로그인이름:패스워드:사용자ID:그룹ID:사용자이름또는코멘트:홈디렉토리:로그인쉘경로명”의 순서로 저장되어있습니다.
각 사용자는 자신의 홈디렉토리가 있습니다.
일반적으로 /home/ 밑에 자신의 계정에 해당하는 디렉토리가 있지요.
홈디렉토리 등은 useradd 명령과 그의 옵션 -d를 통해 편집이 가능합니다.
- chsh
- 기능 : 디폴트쉘 변경
- 형식 : chsh -s /bin/쉘이름
- 기능 : 디폴트쉘 변경
cf) 쉘: 명령어 라인 해석기(command -line argument interpreter, CLI)로 운영체제가 수행할 명령어를 직접 입력하는 수단을 제공합니다.
즉 사용자 인터페이스죠.
우리가 사용하는 우분투의 쉘 종류는 bourne again shell이라하여 bash라고 부릅니다.
프롬트 $만 보더라도 알 수 있습니다.
대개 쉘은 디폴트로 지정이되어있지만, 위 명령어로 변경도 가능합니다.
$SHELL에는 로그인 shell 절대경로 저장되어 있어서 아래 명령어를 입력하면 확인이 가능합니다.
echo $SHELL
참고로 달러 표시는 환경변수부를 때 앞에 붙이는 것입니다.
쉘 스크립트 : 쉘 명령들의 리스트로 작성된 파일입니다. 변수값 지정 및 참조 등이 가능합니다.
chmod를 이용해 쉘 스크립트 파일에 실행권한을 부여해줘야겠지요?
chmod +x 쉘스크립트파일명
./쉘스크립트파일명
이렇게 실행하시거나 권한이 없는 경우엔 sh 명령으로 실행도 가능합니다.
사용자가 로그인을 할때 자동으로 실행되는 스크립트들이 있습니다.
이를 시작 스크립트 또는 startup script라고 부릅니다.
우분투에서 사용하는 BASH의 시작스크립트는 아래와 같습니다.
- .profile(또는 bash_profile) : 로그인 쉘로 로그인 후 실행, .bashrc 쉘을 실행하고 명령의 경로등을 지정
- .bashrc : 비로그인 쉘로 예를들어 터미널을 오픈하는 경우처럼 인증 없이 실행되어 더 많이 사용, 모든 사용자가 공통으로 시작할때 사용하는 환경이 저장된 /etc/bash.bashrc 쉘을 포함(또는 복사), 프롬트 등의 사용자 기본 환경 설정이 이에 추가되어 사용됩니다.
기타 계정 등록 관련 파일은 /etc/shadow, /etc/group 등이 있습니다.
전자에는 패스워드 엔트리가 저장되며, 후자에는 각 사용자가 속한 하나 이상의 그룹에 대한 정보를 저장하고 있습니다.
- adduser
- 기능 : 사용자 계정 추가
- 형식 : adduser 사용자이름
사용자 계정을 추가할 때에는 수퍼유저로서 etc/passwd를 편집해서 추가할 수도 있지만 adduser 명령을 사용하여 추가할 수도 있습니다.
- 기능 : 사용자 계정 추가
- deluser
- 기능 : 사용자 계정 제거
- 형식 : deluser 사용자이름
- 기능 : 사용자 계정 제거
- shutdown
- 기능 : 시스템 종료
- 형식 : shutdown [-t sec] [-rkhncfF] time [warningMSG]
- 옵션
-k : 실제로 종료하지 않고 모든 사용자에게 경고 메시지만을 전송
-r : 시스템 종료 후 재부팅(reboot)
-h : shutdown 후 시스템을 종료(halt)
-f : 재부팅할 때 fsck(file system check)를 하지 않음
-c : shutdown 명령어를 취소
time : 몇분 후에 시스템을 종료할 것인가를 지정
warningMSG : 사용자에게 보내질 종료 메시지
cf) shutdown 뿐아니라 halt, reboot, poweroff 명령어를 이용해도 됩니다.
가상머신을 사용하는 경우엔 쉽게 종료할 수있고, 저장도해놓을 수 있지만 실제 머신에서는 시스템을 종료할 때에 shutdown이나 위 세 명령어 등을 이용해서 정상적으로 종료시켜주려고 주의해줘야하겠지요.
- 기능 : 시스템 종료
개인이 공부하고 포스팅하는 블로그입니다. 작성한 글 중 오류나 틀린 부분이 있을 경우 과감한 지적 환영합니다!