ch0nny_log

[빅데이터분석] Linux_2. 리눅스 함수 및 maria db 설치 본문

빅데이터 분석(with 아이티윌)/리눅스

[빅데이터분석] Linux_2. 리눅스 함수 및 maria db 설치

chonny 2024. 9. 23. 13:00
  • 지난주에 배웠던 리눅스 명령어
    • cd 명령어
    • mkdir 명령어
    • cat 명령어
    • grep 명령어
    • awk 명령어
복습문제1.  직업이 analyst인 사원들의 이름과 월급, 직업을 출력하기
awk -F ',' '$3 =="ANALYST" {print $2,$6,$3}' emp.csv​

설명 : -F 구분자

복습문제2. 1981년도에 입사한 사원들의 이름과 입사일을 출력하기
awk -F ',' '$3 =="ANALYST" {print $2,$6,$3}' emp.csv​
설명 : substr($컬럼번호, 시작자리 인덱스 번호, 끝자리 인덱스 번호)
복습문제 3. 이름의 첫 글자가 A로 시작하는 사원들의 이름과 월급을 출력하기
awk -F ',' 'substr($2, 1, 1) == "A" {print $2, $6}' emp.csv​
복습문제 4. 위의 결과를 result_a_ename.csv 로 저장하기
awk  -F  ','   'substr($2, 1, 1 ) =="A"  {print $2, $6}'  emp.csv  >> result_a_ename.csv

cat result_a_ename.csv​

 


📝6. sort 명령어

  • data 를 특정 컬럼을 기준으로 정렬하는 명령어
예제 . emp.txt 에서 이름과 월급을 출력하는데 월급이 낮은 사원부터 출력하기
cat  emp.txt  <-- 콤마가 아니라 공백으로 컬럼과 컬럼이 분리되어 있음

sort  -nk   6  emp.txt   # 월급이 낮은 사원부터 출력 
sort  -nrk   6  emp.txt  # 월급이 높은 사원부터 출력​

n 은 숫자 정렬할때 사용하는 옵션 -r 은 정렬을 높은것부터 출력할 때 사용하는 옵션 -k 는 어느 컬럼을 정렬할지 번호를 출력할 때 사용하는 옵션

빅데이터 ---> 리눅스 서버 ---> 오라클 ------> 판다스 ↓ ↓ ↓ ↓ 음식재료 크게 칼질 잔잔한 칼질 요리

데이터 엔지니어 데이터 분석가

문제 1. emp.txt 에서 직업이 SALESMAN 인 사원들의 이름과 월급을 출력하는데 월급이 높은 사원부터 출력하기
awk  '$3=="SALESMAN" {print $2, $6}'  emp.txt   | sort -nrk 2​

설명: 이전 명령어 | 이후 명령어 ↑ 파이프(pipe)

파이프 이전 명령어의 결과를 파이프 이후 명령어의 입력으로 보낸다.

문제 2. emp.txt 에서 월급이 1200 이상인 사원들의 이름과 입사일을 출력하는데 최근에 입사한 사원부터 출력하기
awk  '$6  >= 1200  { print $2, $5 }'  emp.txt  |  sort  -rk   2

📝7. uniq 명령어

  • 중복된 라인을 제거하는 명령어
  • 문법: # uniq 옵션 파일명
예제. emp.txt에서 직업만 출력하는데 중복을 제거해서 출력하기

1. 직업만 출력하기
awk -F '' '{print $3}' emp.txt​

2. 위의 결과를 내림차순으로 정렬

awk -F '' '{print $3}' emp.txt | sort -k 1​
3. 중복 제거
awk -F '' '{print $3}' emp.txt | sort -k 1 | uniq​
※ 정렬해서 같은것 끼리 모아놓고 중복을 제거해야함
문제 1. 부서번호를 출력하는데 중복을 제거해서 출력하시오 !
awk  -F  ' '  '{print  $8}'  emp.txt  |  sort  -k   1 | uniq​
문제 2. emp.txt 에서 부서번호가 20번인 사원들의 직업을 출력하는데 중복을 제거해서 출력하기
awk  -F  ' '  '$8==20  {print $3}'  emp.txt   | sort  -k  1  | uniq​

📝 8. diff 명령어

- 두 파일간의 차이점을 찾아서 알려주는 명령어

예제.
1. 파일이 똑같은게 2개가 있어야해서 emp.csv 를 emp200.csv 로 복사하기
cp  emp.csv  emp200.csv

ls  -l   *.csv

cat emp200.csv​

2. emp.csv 와 emp200.csv 의 차이가 있는지 확인하기

diff emp.csv emp200.csv​
차이가 없기 때문에 아무것도 나오지 않음

 

문제 1. emp200.csv 의 내용을 gedit으로 수정하기

저게 무지개빛으로 활성화 되어있어야 수정 가능







문제 2. emp.csv 와 emp200.csv 의 차이를 확인하기  
diff emp.csv emp200.csv​

※ 원본과의 비교가 중요한 이유?
데이터의 차이를 확인함으로써 정확한 데이터 분석을 할 수 있게 됨

 

문제 3. emp200.csv 에서 ALLEN 의 데이터 행을 지우고 저장하기
gedit emp200.csv​

ALLEN의 행을 지우고 저장

문제 4. emp.csv 와 emp200.csv의 차이를 확인하기
diff emp.csv emp200.csv​

 


📝 9. find 명령어

  • 검색하고자 하는 파일을 찾을 때 사용하는 명령어
  • 문법 : #find 디렉토리 -name 파일명 -print
  • ^ 검색할 디렉토리 ^ 검색할 파일명
예제 
find  /root  -name  'emp.csv'  -print​
문제1. /root 디렉토리 밑에 emp 로 시작하는 파일들을 조회하기
find /root -name 'emp*' -print​
문제 2. /root 디렉토리 밑에 kkk 라는 디렉토리를 생성하기  
pwd
mkdir  kkk
ls  -ld  kkk​
설명: ls 는 list 의 약자로 조회하겠다는것이고 -ld 는 옵션으로 디렉토리를 조회하겠다는 것입니다.

 

문제 3. /root 밑에 있는 emp200.csv 를 /root/kkk 밑에 이동시키기
mv  /root/emp200.csv  /root/kkk/emp200.csv​

설명 : mv는 move의 약자.

mv 옮기기 전 디렉토리와 파일명 옮긴후 디렉토리와 파일명

문제 4. /root 밑에 epwdmp200.csv 가 있는지 조회하기
find /root -name 'emp200.csv' -print​
문제 5. /root 밑에 emp.txt 를 /root/kkk 밑에 복사하기
cp  /root/emp.txt   /root/kkk/emp.txt​
문제 6. /root 밑에 emp.txt 가 있는지 조회하기
find  /root  -name  'emp.txt'  -print​
문제 7. /root 에 있는 emp.txt만 조회하기
find  /root  -maxdepth 1 -name  'emp.txt'  -print​

1이라고 하면 root 바로 밑의 것만

2라고 하면 kkk 밑의 것도 조회됨


📝 10. sed 명령어

  • grep 명령어가 파일의 특정 내용을 검색하는 기능을 갖는다면
  • sed 명령어는 검색뿐만 아니라 내용을 변경해서 보여주는 명령어
예제.
cd
ls -l emp.csv
sed 's/KING/yyy/g' emp.csv​

위의 명령어는 KING 의 이름을 yyy로 변경해서 보여달라는 것이지 실제로 변경된것은 아님

문제 1. 위의 결과를 result100.csv 로 저장하기
sed 's/KING/yyy/g' emp.csv >> result100.csv
cat result100.csv​
문제 2. (데이터 엔지니어 업무인 데이터 파이프라인 구축) 미국 영화 평점 데이터를 리눅스 서버에 올리기
https://cafe.daum.net/oracleoracle/SDMs/412

- 데이터 관련 교육의 데이터 게시판 412 번 게시글
- 압축 풀고 파일들을 전부 리눅스 서버에 올리기
ls -lrt​

- 이 파일들을 전처리해서 database에 입력하고, 파이썬과 연동해서 시각화와 데이터 분석을 할 예정
- 데이터 전 처리는 리눅스 명령어로 해줘야함
- 확장자가 특이한 파일들이 있는데, 이 파일들의 데이터를 잘 검색하려면 데이터 전처리를 잘 해줘야함

문제 3. (데이터 엔지니어 업무인 데이터 파이프 라인 구축2) movies.dat 파일의 전체 행수가 몇건인지 출력하기
wc -l movies.dat #3883​
문제 4. (데이터 엔지니어 업무인 데이터 파이프 라인 구축3) movies.dat 파일의 위의 3줄만 출력하기
head -3 movies.dat​

번호 :: 제목 :: 장르

데이터와 데이터 사이의 구분자가 콤마가 아니라 ::임

위의 데이터를 mySQL 데이터 베이스에 테이블로 구성하려면 ::를 콤마로 변경해서 저장해야함

문제 5. sed 명령어를 이용해서 구분자 콜론2개(::)를 콤마(,)로 변경해서 movies_comma.csv로 저장하기
sed s/::/,/g movies.dat >> movies_comma.csv
head -10 movies_comma.csv​
문제 6. (데이터 엔지니어 업무인 데이터 파이프 라인 구축) ratings.dat 의 전체 행이 몇건인지 출력하기
wc -l ratings.dat #1000209​
문제 7. (데이터 엔지니어 업무인 데이터 파이프 라인 구축) ratings.dat 의 상위 3개 행만 출력하기
head -3 ratings.dat​

 

문제 8. (데이터 엔지니어 업무인 데이터 파이프 라인 구축) ratings.dat 의 ::를 콤마로 변경해서 ratings_comma.csv로 저장하기
sed s/::/,/g ratings.dat >> ratings_comma.csv
head -10 ratings_comma.csv​
문제 9. (데이터 엔지니어 업무인 데이터 파이프 라인 구축) users.dat 파일도 위와 같이 전처리해서 users_comma.csv로 저장하고 head 명령어로 위의 3줄을 출력하기

유저 id :: 성별 :: 나이 :: 직업번호 :: 우편번호
head -3 users.dat

sed s/::/,/g users.dat >> users_comma.csv
head -3 users_comma.csv​

📝 11. cp 명령어

- 파일을 복사하는 명령어

예제.
cp 파일명   복사할 파일명
cp 위치/파일명   위치/복사할 파일명
cp emp.csv emp1000.csv
cp  /root/emp.csv  /root/kkk/emp2000.csv​
문제 1. /root 밑에 test_data 라는 폴더를 만들고 여기 /root 밑에 있는 emp.csv를 복사하기
[root@localhost ~]# cd
[root@localhost ~]# 
[root@localhost ~]# whoami
root
[root@localhost ~]# mkdir test_data
[root@localhost ~]# 
[root@localhost ~]# cp /root/emp.csv /root/test_data/emp.csv​

※중요!! 내가 가지고 있는 파일들 중에 중요도가 높은 데이터는 반드시 cp 명령어로 백업하기


📝 1 2. rm 명령어

  • rm 명령어는 파일이나 디렉토리를 삭제하는 명령어
  • 정말 신중하게 수행해야함
예제. /root 밑의 emp.csv 파일을 삭제해보기
cd
pwd
ls -l emp.csv
rm emp.csv
ls -l emp.csv​


# 원상복구하기

#원상복구 
[root@localhost ~]# cp /root/test_data/emp.csv /root/emp.csv
[root@localhost ~]# ls -l emp.csv
-rw-r--r--. 1 root root 679  9월 19 13:53 emp.csv

 

문제 1. dept.csv 를 리눅스 서버에 올리기
문제 2. dept.csv 를 dept_backup.csv로 복사하기
[root@localhost ~]# cp dept.csv dept_backup.csv
[root@localhost ~]# cat dept_backup.csv​
문제 3. /root 밑에 있는 dept.csv 를 삭제하기
rm dept.csv​
문제 4. dept_backup.csv를 복사해서 dept.csv로 붙여넣기
cp dept_backup.csv dpet.csv​

 


📝 13. rmdir 명령어 

디렉토리나 폴더를 통채로 삭제하는 명령

예제
 mkdir kkk2 
 ls -ld kkk2
 
 rmdir kkk2
 ls -ld kkk2​

 

 

문제 1. /root 밑에 mmm이라는 폴더를 만들기
mkdir mmm
ls -ld mmm​

 

문제 2. /root 밑에 emp.csv 를 /root/mmm 밑에 복사하기
cp emp.csv /root/mmm/emp.csv​

 

문제 3. /root 밑의 mmm디렉토리를 삭제할것
rmdir mmm​
rm -r mmm

rm -rf mmm로 하면 지울까요? 리고 물어보지 않고 바로 지움


📝 14. mv 명령어 

파일의 이름을 바꾸거나 파일을 다른 디렉토리로 이동하는 명령어

예제. 
mv 기존 파일명  새로운 파일명
mv dept.csv    dept100.csv
ls -l dept*.csv​
문제 1. 다시 dept100.csv를 dept.csv로 이름을 바꾸기
mv dept100.csv dept.csv​
문제 2. /root 밑에 있는 dept.csv를 /root/test_data 밑으로 이동하기
mv dept100.csv dept.csv​

📝 15. vi 편집기 명령어 

  • vi 편집기 명령어는 리눅스의 메모장 같은 프로그램에 텍스트를 쓰거나 수정 혹은 삭제하게 할 수 있는 명령어
  • vi 편집기의 3가지 모드
    1. command 모드 : vi 편집기의 기본 모드이고 vi 를 실행하면 바로 보이는 화면 을 말합니다. command 모드에서 좌우상하로 이동할 수 있습니다.
      • h : 왼쪽으로 이동
      • l : 오른쪽으로 이동
      • j : 아래로 이동
      • k : 위로 이동
      • G : 한번에 맨 아래로 이동
      • 1G : 한번에 맨 위로 이동
        • :set nu 엔터 
        • :set nonu 엔터
          예: 스티브 잡스 연설문인 jobs.txt 를 리눅스로 올리시오 !
        1. edit 모드 : a,i,o,x 등을 누르면서 내용을 입력 또는 수정, 삭제하는 명령모드
          • i : 입력모드
          • a : 입력모드인데 계속 덧붙여서 쓰겠다
          • o : 입력모드인데 그 다음 라인에 쓰겟다
          • x : 철자 하나 삭제
          • dd : 하나의 행을 삭제
          • u : 작업 취소
          • 만약 edit 모드에서 command 모드로 변경하고 싶다면 esc 키를 누르기
      1. 종료 모드 : 저장, 종료, 강제종료 등의 명령어를 입력하는 모드
        • :wq! → 저장 하고 종료 (단축키 : ZZ)
        • :q! → 저장 안하고 종료 (단축키 : ZQ)

 

문제 1. /root/밑에 bbb.txt 를 생성하는데 아래의 내용이 저장되게 하기
select ename,sal
	from emp
	where empno = 7788;​
vi bbb.txt

select ename,sal
	from emp
	where empno = 7788;
	
#esc 여러번 누른 다음

:wq!

cat bbb.txt​



 

문제 2. /root/ 밑에 ccc.txt 를 생성하는데 아래의 내용이 저장되게 하기
vi ccc.txt

 select  ename, sal, job
   from  emp
    where deptno = 10;
 
 #esc 여러번
 
 :wq!
 
 cat ccc.txt​

📝 16. vi 편집기내에서 특정 문자를 검색하는 방법 

문제 1. job.txt 에서 was라는 단어를 검색하기
vi jobs.txt

/was
n

:q!​
문제 2. emp.csv를 열어서 SCOTT을 조회하기
vi emp.csv

/SCOTT


:q!​

 


📝 17. vi 편집기내에서 특정 문자를 변경하는 방법 

예제.
vi emp.csv
:%s/기존문자/변경할문자/g

예 : :%s/KING/aaaa/g​
문제 1. emp.csv를 열어서 SALESMAN 을 kkkk로 변경하기
vi emp.csv
:%s/SALESMAN/kkkk/g

esc키  여러번 누르고
:wq!​
문제 2. 스티브 잡스 연설문에서 about 이라는 단어들을 kkkk로 변경하기
vi jobs.txt
:%s/about/kkkk/g

esc 여러번
:wq!​

 


📝 18. 리눅스에 maria db 설치 

리눅스 ---------- mySQL (유료) ----- Maria db(무료) ---- 파이썬 연동

https://cafe.daum.net/oracleoracle/Sho9/13 <- 참고 링크

■ 리눅스에 마리아 디비 설치

1. putty 에서 root 유져로 접속합니다.

2. centos 7의 기본 레포지토리의 url 을 다음의 내용으로 수정합니다.

# cp  /etc/yum.repos.d/CentOS-Base.repo  /etc/yum.repos.d/CentOS-Base.repo_backup

# vi  /etc/yum.repos.d/CentOS-Base.repo

열고 안의 내용을 전부 지워버리고 아래의 내용을 붙여 넣습니다.

[base]

name=CentOS-$releasever - Base

baseurl=http://vault.centos.org/7.9.2009/os/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

enabled=1

3. mariadb repo 파일을 만든다.

# vi /etc/yum.repos.d/MariaDB.repo

아래 내용을 복사해서 붙여넣습니다. ( i 입력후 편집모드로 바꾼후 붙여넣는다.)

[mariadb]

name = MariaDB

baseurl = https://archive.mariadb.org/mariadb-10.3.37/yum/centos7-amd64/

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

편집종료(esc 키 입력) 하고 저장후 종료합니다. ( :wq! )

4. yum 으로 mariadb 를 설치합니다.

# sudo  yum install  mariadb-server

5. 서버설정파일을 설치된 설정파일로 변경한다.

# cp /usr/share/mysql/wsrep.cnf /etc/my.cnf

"cp: overwrite `/etc/my.cnf'? y"

6. UTF-8, max_allowed_packet 1G 및 테이블명 대소문자 구분안하도록 설정을 추가한다.

# vi /etc/my.cnf

[mysqld]를 찾아서 그 아래에 추가 또는 수정해준다

[mysqld]

character-set-server=utf8

collation-server=utf8_general_ci

max_allowed_packet=1073741824

lower_case_table_names=1

7. mariadb 서버 시작

systemctl start mariadb

8. mysql 를 root 계정으로 접속해본다.

mysql -u root -p

패스워드는 그냥 안쓰고 엔터

9. 접속후 데이터 베이스 생성하고 emp 와 dept 생성한다.

[root@localhost yum.repos.d]# mysql -u root -p

MariaDB [(none)]>

MariaDB [(none)]> create database orcl;

Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> use orcl

Database changed

MariaDB [orcl]>

문제1.아래의 첨부 스크립트를 실행하여 emp 와 dept 테이블을 생성합니다
create table emp
(empno int(4) not null,
Ename varchar(10),
Job varchar(9),
Mgr int(4),
Hiredate date,
Sal int(7),
Comm int(7),
Deptno int(4) );

create table dept
(deptno int(2),
dname varchar(20),
loc varchar(20) );

INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
INSERT INTO dept VALUES (30,'SALES','CHICAGO');
INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON');

INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,'81-11-17',5000,NULL,10);
INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,'81-05-01',2850,NULL,30);
INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,'81-05-09',2450,NULL,10);
INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,'81-04-01',2975,NULL,20);
INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,'81-09-10',1250,1400,30);
INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,'81-08-21',1500,0,30);
INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,'81-12-11',950,NULL,30);
INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,'81-02-23',1250,500,30);
INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,'81-12-11',3000,NULL,20);
INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,'80-12-09',800,NULL,20);
INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,'82-12-22',3000,NULL,20);
INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,'83-01-15',1100,NULL,20);
INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,'82-01-11',1300,NULL,10);
commit;​