1. 테스트 환경

- Python version = 3.4


2. 사용법

* 중복을 허용하지 않음

* 순서와 상관없음

>>> set1 = set([5, 3, 2, 7])
>>> set1
{2, 3, 5, 7}

>>> set2 = {'H', 'E', 'L', 'L', 'O'}
>>> set2
{'E', 'H', 'O', 'L'}

- 형 변환list( ) , tuple( )

>>> set1 = {1, 2, 3, 4}

>>> list1 = list(set1)
>>> list1
[1, 2, 3, 4]

>>> tuple = tuple(set1)
>>> tuple
(1, 2, 3, 4)

s1 = {1, 5, 7, 8}
s2 = {1, 4, 5, 8}
- 교집합(&) intersection, 합집합(|) union
>>> s1 & s2
{8, 1, 5}

>>> s1 | s2
{1, 4, 5, 7, 8}

>>> s2 - s1
{4}

>>> s2.difference(s1)
{4}
- 값 추가
>>> set1.add ('hello')
>>> set1
{'t', 1, 3, 5, 7, 8, 'hello', 'python', 'a'}
- 값 여러개 추가
>>> set1.update([7, 8, 9])
>>> set1
{'t', 1, 3, 5, 7, 8, 9, 'python', 'a'}
- 값 제거
>>> set1.remove(1)
>>> set1
{'t', 3, 5, 7, 8, 'python', 'a'}

3. 예제
S1 = {1, 3, 5, 7}
S2 = {5, 6, 7, 8, 9}

# 1. 두 집합의 교집합, 합집합, 차집합을 출력

# 2. S1 집합에 자신의 이름을 문자열 자료형으로 추가

# 3. 문자열, 숫자 데이터를 포함한 리스트 자료형을 자료형을 만든 뒤 S2 집합에 추가 (udate 이용)

# 4. S2 집합에서 가장 큰 숫자를 제거
- 풀이
# 1. 
>>> S1 & S2
{5, 7}

>>> S1 | S2
{1, 3, 5, 6, 7, 8, 9}

>>> S1 - S2
{1, 3}

# 2.
>>> S1.add('dongyoon')
>>> S1
{1, 3, 5, 7, 'dongyoon'}

# 3.
>>> S2.update(['가', '나', '다'])
>>> S2
{5, 6, 7, 8, 9, '다', '나', '가'}

# 4.
>>> S2.remove(9)
>>> S2
{8, 5, 6, 7}


1. 테스트 환경

- Python version = 3.4


2. 사용법

* (), 소괄호를 이용

* 리스트는 그안에 내용을 수정, 삭제 그리고 추가가 가능하지만 튜플은 불가능

>>> tu1 = (1, 2)
>>> tu1
(1, 2)
>>> tu2 = (1, )
>>> tu2
(1,)
>>> tu3 = ([1, 1, 1], 6 ,8)
>>> tu3
([1, 1, 1], 6, 8)
>>> tu4 = 1, 2, 'name'
>>> tu4
(1, 2, 'name')
>>> tu5 = (6, (2, 4), 'a', 'b')
>>> tu5
(6, (2, 4), 'a', 'b')
- 튜플 연산
>>> t1 = (1, 2, 3, 'a', 'b', 'c')
>>> t2 = ('lion', 'tiger', 'eagle', 5, 7, [1, 2, 3])
>>> t1[0]
1
>>> t2[5]
[1, 2, 3]
>>> t1 + t2
(1, 2, 3, 'a', 'b', 'c', 'lion', 'tiger', 'eagle', 5, 7, [1, 2, 3])
>>> t1 * 3
(1, 2, 3, 'a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c')

3. 예제
T1 = ('a', 'b', 'c', 'd', 'e')
T2 = (1, 2, 3, 4, 5)
T3 = ('가', '나', '다', '라', '마')

# 1. T1의 3번째 원소와 T2의 2번째 원소를 출력

# 2. T3의 1번째 원소부터 5번째 원소까지를 출력 (슬라이싱 이용)

# 3. T2와 T3 튜플을 합친 결과 출력

# 4. T1 튜플을 2번 출력
- 풀이
# 1.
>>> T1[2]
'c'
>>> T2[1]
2

# 2.
>>> T3[0:5]
('가', '나', '다', '라', '마')

# 3.
>>> T2 + T3
(1, 2, 3, 4, 5, '가', '나', '다', '라', '마')

# 4.
>>> T1 * 2
('a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e')


1. 테스트 환경

- Python version = 3.4


2. 사용법

>>> my_dic = {'name': '동윤', 'year': '1993', 'nowyear': 2018}

- key 값 리스트 반환 > .key( )

>>> my_dic.keys()
dict_keys(['year', 'name', 'nowyear'])

- values 값 리스트 반환 > .values( )

>>> my_dic.values()
dict_values(['1993', '동윤', 2018])

- 딕셔너리 에 있는 모든 내용을 list 형식으로 반한 (리스트 안은 tuple 형식) > .items( )

>>> my_dic.items()
dict_items([('year', '1993'), ('name', '동윤'), ('nowyear', 2018)])

- 딕셔너리 내용 전체 삭제 > .clear( )

>>> my_dic.clear()
>>> my_dic
{}

- key에 대응하는 value 값 반환 > .get( )

>>> my_dic.get('name')
'동윤'
>>> my_dic.get('year')
'1993'
- my_dic.get(), my_dic[] 차이점
>>> my_dic.get('Hello')
None

>>> my_dic['Hello']
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'Hello'

- key 값 확인 > ' ' in 

>>> 'name' in my_dic
True
>>> 'Hello' in my_dic
False

3. 예제
animals = {'cat' : 1, 'dog' : 10, 'horse': 3}

# 1. 모든 key를 반환하여 keys 에 저장

# 2. 모든 value를 반환하여 values에 저장

# 3. animals 내에 'cat' 이라는 키가 있는지 확인

# 4. animals 의 모든 쌍 삭제
- 풀이
# 1.
>>> keys = animals.keys()
>>> keys
dict_keys(['dog', 'horse', 'cat'])

# 2.
>>> values = animals.values()
>>> values
dict_values([10, 3, 1])

# 3.
>>> 'cat' in animals
True

# 4.
>>> animals.clear()
>>> animals
{}


1. 테스트 환경

- Python version = 3.4


2. 사용법

>>> my_dic = {'apple': '사과', 'bird': '새',
... 'class': '수업', 'school': '학교'}
>>> my_dic
{'class': '수업', 'bird': '새', 'school': '학교', 'apple': '사과'}

>>> my_dic['apple']
'사과'
>>> my_dic['bird']
'새'
>>> my_dic['school']
'학교'

>>> my_dic = {1: 'hello', 2: [1,2,3]}
>>> my_dic[1]
'hello'
>>> my_dic[2]
[1, 2, 3]

- 딕셔너리 추가 > my_dic[' '] = ' '

>>> my_dic = {'apple': '사과', 'bird': '새'}
>>> my_dic['class'] = '수업'
>>> my_dic
{'class': '수업', 'bird': '새', 'apple': '사과'}
>>> my_dic['name'] = 'dongyoon'
>>> my_dic
{'class': '수업', 'bird': '새', 'apple': '사과', 'name': 'dongyoon'}
- 딕셔너리 삭제 > del
>>> my_dic
{'class': '수업', 'bird': '새', 'apple': '사과', 'name': 'dongyoon'}
>>> del my_dic['class']
>>> my_dic
{'bird': '새', 'apple': '사과', 'name': 'dongyoon'}
>>> del my_dic['apple']
>>> my_dic
{'bird': '새', 'name': 'dongyoon'}

3. 예제
my_info ={}

# 1. my_info란 딕셔너리 공간에 'name'을 key로, 이름을 value로 저장

# 2. my_info란 딕셔너리 공간에 'gender'을 key로, 성별을 value로 저장

# 3. my_info란 딕셔너리 공간에 'year'을 key로, 태어난년도를 value로 저장

# 4. my_info란 딕셔너리 공간에 'year'을 key인 쌍을 삭제
- 풀이
# 1.
>>> my_info['name'] = '동윤'
>>> my_info
{'name': '동윤'}

# 2.
>>> my_info['gender'] = '남'
>>> my_info
{'gender': '남', 'name': '동윤'}

# 3.
>>> my_info['year'] = 1993
>>> my_info
{'gender': '남', 'name': '동윤', 'year': 1993}

# 4.
>>> del my_info['year']
>>> my_info
{'gender': '남', 'name': '동윤'}


1. 테스트 환경

- Python version = 3.4 


2. 사용법

- 리스트의 연산

>>> a = [1, 2]
>>> b = ['a', 'b', 'c']
>>> print (a + b)
[1, 2, 'a', 'b', 'c']

- 인덱싱 (Indexing)

>>> my_list = [1,2,3,4,5]
>>> print(my_list[0])
1
>>> print(my_list[3])
4
>>> print(my_list[0] + my_list[3])
5

>>> my_list = [1, 2, ['a', 'b'], 'python']
>>> print(my_list[2])
['a', 'b']
>>> print(my_list[2][0])
a
>>> print(my_list[2][1])
b
- 슬라이싱 (Slicing)
>>> a = [1, 2, 3, 4, 5]
>>> print(a[1:4])
[2, 3, 4]
>>> print(a[:3])
[1, 2, 3]
>>> print(a[2:])
[3, 4, 5]
>>> a[2] = 'Hello'
>>> print(a)
[1, 2, 'Hello', 4, 5]

3. 예제
my_list = ['a', 1, 2, 3, 'b', ['apple', 'banana'], 4]

# 1. my_list 4번째 값 출력

# 2.  my_list 에서 3번째 값을 "hello"로 로 변경한 뒤 my_list출력

# 3. my_list 에서 처음부터 6번째 값까지 출력

# 4. 인덱스를 이용하여 리스트 my_list에서 banana의 값 출력

- 풀이

# 1.
>>> print(my_list[3])
3

# 2.
>>> my_list[2] = 'hello'
>>> print(my_list)
['a', 1, 'hello', 3, 'b', ['apple', 'banana'], 4]

# 3.
>>> my_list[0:6]
['a', 1, 'hello', 3, 'b', ['apple', 'banana']]

# 4.
>>> print(my_list[5][1])
banana


1. 테스트 환경

- Python version = 3.4


2. 사용법

- 해당 값의 인덱스 반환 > .index( )

>>> a = [1, 6, 5, 3, 4, 2]
>>> a.index(6)
1
>>> a.index(5)
2
>>> a.index(4)
4
>>> a.index(3)
3
>>> a.index(2)
5
>>> a.index(1)
0

- 리스트 요소 추가 - 마지막 부분에 값 추가 > .append( )

>>> a = [1, 6, 5, 3, 4, 2]
>>> a.append(7)
>>> a
[1, 6, 5, 3, 4, 2, 7]
>>> a.append([8, 9])
>>> a
[1, 6, 5, 3, 4, 2, 7, [8, 9]]

- 리스트 요소 추가 - 인덱스 번호 위치 에 값 추가 > .insert( )

>>> a.insert(3, [7, 1])
>>> a
[1, 6, 5, [7, 1], 3, 4, 2]
>>> a.insert(5, [8, 9])
>>> a
[1, 6, 5, [7, 1], 3, [8, 9], 4, 2]

- 리스트 요소 삭제 - 인덱스 번호 위치 에 값 삭제 > .pop( )

>>> a
[1, 6, 5, 3, 4, 2, 7, [8, 9]]
>>> a.pop(1)
6
>>> a
[1, 5, 3, 4, 2, 7, [8, 9]]
>>> a.pop(3)
4
>>> a
[1, 5, 3, 2, 7, [8, 9]]

- 리스트 요소 삭제 - 해당 값이 첫번째로 나오는 인덱스 삭제 > .remove( )

>>> a = [1, 6, 6, 3, 4, 2, 3]
>>> a.remove(6)
>>> a
[1, 6, 3, 4, 2, 3]
>>> a.remove(3)
>>> a
[1, 6, 4, 2, 3]

- 리스트 뒤집기 > .reverse( )

>>> a = [1, 6, 6, 3, 4, 2, 3]
>>> a.reverse()
>>> a
[3, 2, 4, 3, 6, 6, 1]

- 리스트 정렬 - 오름차순 > .sort( )

>>> a = [1, 6, 5, 3, 4, 2]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5, 6]
- 리스트 정렬 - 내림차순 > .sort(reverse=True)
>>> a = [1, 6, 5, 3, 4, 2]
>>> a.sort(reverse=True)
>>> a
[6, 5, 4, 3, 2, 1]


3. 예제

a = [1, 9, 2, 3, 4, 5, 7]

# 1. a를 오름차순으로 변경 한 뒤 출력

# 2. a에서 9를 꺼낸 뒤 출력

# 3. a의 5 뒤에 6을 추가한 뒤 출력

# 4. a의 맨 마지막에 8을 추가하고 출력

# 5. a를 내림차순 한 뒤 출력
- 풀이
# 1.
>>> a.sort()
>>> a
[1, 2, 3, 4, 5, 7, 9]

# 2.
>>> a.pop(1)
9
>>> a
[1, 2, 3, 4, 5, 7]

# 3.
a.insert(6, 6)
print a

# 4.
>>> a.append(8)
>>> a
[1, 9, 2, 3, 4, 5, 7, 8]

# 5.
>>> a = [1, 9, 2, 3, 4, 5, 7]
>>> a.sort(reverse=True)
>>> a
[9, 7, 5, 4, 3, 2, 1]


1. 테스트 환경

- OS: CentOS 7.5 기준


2. 설정 방법

- parameter setting

vi /etc/sysctl.conf
- parameter apply
sysctl -p
>> growpart <하드디스크명> <파티션번호>
- parameter check
sysctl -a

3. parameter 설명

- CentOS 7.5 기본값

# 하나의 프로세스에서 다른 프로세스로 보내질 수 있는 최대 메시지 사이즈
kernel.msgmnb = 16384


#하나의 메시지 큐에서의 최대 바이트 수
kernel.msgmnb = 16384


# 최대 메시지 큐 식별자의 수
kernel.msgmni = 3958


# 배열당 최대 세마포어 수, 시스템 전체 최대 세마포어 수, 세마포어 호출당 최대 operation 수, 최대 배열 수
kernel.sem = 250        32000   32      128


# 공유 메모리 최대 페이지수
kernel.shmall = 18446744073692774399


# 공유 세그먼트 최대 사이즈 (바이트 수)
kernel.shmmax = 18446744073692774399


# 공유 세그먼트 최대 수
kernel.shmmni = 4096


# 각 네트워크 장치 별로 커널이 처리하도록 쌓아두는 queue의 크기
net.core.netdev_max_backlog = 1000


# 소켓 버퍼 사이즈의 전송하는 기본값
net.core.rmem_default = 212992


# 소켓 버퍼 사이즈의 전송하는 최대값
net.core.rmem_max = 212992


# 소켓 버퍼 사이즈의 전송받는 기본값
net.core.wmem_default = 212992


# 소켓 버퍼 사이즈의 전송받는 최대값
net.core.wmem_max = 212992


# RFC182에 따른 IP spoof 방지를 위한 설정
net.ipv4.conf.default.rp_filter = 1


# 패킷 포워딩
net.ipv4.ip_forward = 1


# 서버에서 로컬 포트사용범위
net.ipv4.ip_local_port_range = 32768    60999


# FIN timeout 시간
net.ipv4.tcp_fin_timeout = 60


# keepalive_probes 를 보낼 간격
net.ipv4.tcp_keepalive_intvl = 75


# 연결이 끊어졌다고 판단할 때까지, keepalive probe를 보낼 수
net.ipv4.tcp_keepalive_probes = 9


# keepalive 보내는 시간간격
net.ipv4.tcp_keepalive_time = 7200


# SYN_Flooding 공격에 대한 대비, 백로그큐(Backlog Queue)가 가득차면 다른 접속 요구 불가
net.ipv4.tcp_max_syn_backlog = 128


# 동시에 유지 가능한 timewait 소켓의 수
net.ipv4.tcp_max_tw_buckets = 8192


# 서버 쪽에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수
net.ipv4.tcp_orphan_retries = 0


# TCP 연결을 끊기 전에 재시도할 횟수
net.ipv4.tcp_retries2 = 15


# 클라이언트의 소켓으로부터 RST을 받아 TIME_WAIT 상태로 가는 경우 즉시 소켓을 종료 설정
net.ipv4.tcp_rfc1337 = 0


# TCP 스택이 메모리를 어떻게 사용할것인지 메모리 페이지 단위 (read)
net.ipv4.tcp_rmem = 4096        87380   6291456


# 일정한 시간과 IP별로 보내고 받는 SYN 재시도 횟수
net.ipv4.tcp_syn_retries = 6


# TCP 연결에서 Three-way Handshake가 성공적으로 이루어지지 않으면 더 이상 소스 경로를 거슬러 올라가지 않세 하는 설정
net.ipv4.tcp_syncookies = 1


# TCP 스택이 메모리를 어떻게 사용할것인지 메모리 페이지 단위 (write)
net.ipv4.tcp_wmem = 4096        16384   4194304



'Linux > CentOS' 카테고리의 다른 글

[Partition] root 파티션 용량 추가 (growpart)  (0) 2018.11.14
[Network] Configure Static IP Address  (0) 2018.11.12

1. 설명:

- LVM 구성 아닌 상태에서 하드디스크에 / 에 남는 용량 추가 

2. 테스트 환경

- OS: Centos 7.5

- Package: cloud-utils-growpart


ex)

/dev/sda 300GB (하드디스크)

/dev/sda1 / 50GB (파티션1)


2. 설정 방법

- package install

yum install cloud-utils-growpart
- 용량 추가 partition setting
growpart /dev/sda 1
>> growpart <하드디스크명> <파티션번호>
- partition resize
resize2fs /dev/sda1
* ERROR
The filesystem is already nnnnnnn blocks long. Nothing to do! 

해결방법: 
reboot 진행 후, resize



'Linux > CentOS' 카테고리의 다른 글

[Parameter] CentOS Parameter (계속 추가 예정)  (0) 2018.11.14
[Network] Configure Static IP Address  (0) 2018.11.12

+ Recent posts