라이브러리에 대해 조사해보자

 

★sys

sys 모듈은 파이썬 인터프리터가 제공하는 변수들과 함수들을 직접 제어해주는 모듈.

 

갑자기 궁금

컴파일러와 인터프리터 차이점

인터프리터- 프로그램 한줄씩 읽어서 실행하는 방식 (파이썬 , 자바)

컴파일러- 전체 프로그램을 읽어서 한꺼번에 빠르게 실행하는 방식 (c)

 

★명령행에서 인수 전달하기-sys.argv

 

 

명령어 뒤의 모든 것들이 공백을 기준으로 나뉘어서 sys.argv 리스트의 요소가 됨을 알 수 있다.

 

☆강제로 스크립트 종료하기 - sys.exit

sys.exit = Ctrl+z Ctrl+D

 

★자신이 만든 모듈 불러와 사용하기 - sys.path

sys.path는 파이썬 모듈들이 저장되어 있는 위치. 경로 어디서나 불러올 수 있다.

sys.path.append("C:\ .......")

 

★pickle

객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 하는 모듈.

pickle 모듈의 dump 함수를 이용해 딕셔너리 객체인 data를 그대로 파일에 저장하는 방법

 

pickle.load를 이용해 원래 있던 딕셔너리 객체(data) 상태 그대로 불러오는 예.

 

★OS 모듈

OS 모듈은 환경 변수나 디렉터리,파일 등의 OS자원을 제어할 수 있게 해주는 모듈.

 

내 시스템의 환경 변수 값을 알고 싶을때 - os.environ

현재 시스템의 환경 변수값들을 보여준다.

 

os.environ은 환경 변수에 대한 정보를 딕셔너리 객체로 리턴

 

★디렉터리 위치 변경하기 - os.chdir

★디렉터리 위치 리턴받기 - os.getcwd

 

 

 경로가 바뀐것 확인

 

★시스템 명령어 호출하기 - os.system

시스템 자체의 프로그램이나 기타 명령어들을 파이썬에서 호출할 수있다.

 

 

★실행한 시스템 명령어의 결과값 리턴 받기 - os.popen

 

★shutil

파일을 복사해 주는 파이썬 모듈.

 

파일 복사하기 - shutil.copy(src,dst)

src.txt 파일을 dst.txt파일로 복사한다 같은 이름이면 덮어씌운다.

리눅스의 cp 명령어

 

★glob

가끔 파일을 읽고 쓰는 기능이 있는 프로그램을 만들다 보면 특정 디렉터리에 있는 파일 이름을 모두 알아야 할 때

glob 모듈을 사용.

 

디렉터리에 있는 파일들을 리스트로 - glob(경로 이름)

*,?등의 메타 문자를 쓸수도 있다.

 

 

★tempfile

파일을 임시로 만들어서 사용할때 유용한 모듈 tempfile.

tempfile.mktemp()는 중복되지 않는 임시 파일의 이름을 무작위로 리턴

 

 

tempfile.TemporaryFile()은 임시 저장 공간으로 사용될 파일 객체를 리턴 기본적으로 바이너리 쓰기모드.

f.close()가 호출되면 이파일은 사라진다.

 

★time

시간과 관련된 time 모듈에는 유용한 함수가 많다.

 

time.time

time.time()은 UTC(Universal time coordinated 협정 세계 표준시)를 이용하여 현재 시간을 실수 형태로 리턴하는 함수.

 

 

time.localtime

이 함수는 time.time()에 의해 반환된 실수값을 이용해 연도,월,일,시,분,초 형태로 바꿔주는 함수.

 

 

★time.asctime

time.localtime에 의해 반환된 튜플 형태의 값을 인수로 받아 날짜와 시간을 알아보는 함수

 

 

★time.strftime

시간에 관계된것을 세밀하게 표현할 수있는 포맷코드를 제공한다.

 

 

★time.sleep

이 함수는 주로 루프 안에서 많이 사용. 일정한 시간 간격을 두고 루프를 실행할 수 있다.

 

 

1초씩 출력되는 것을 볼수 있다

 

★Calender

파이썬에서 달력을 볼 수 있게 해주는 모듈

 

calendar.calendar(연도)로 사용하면 그해의 전체 달력을 볼수 있다.

 

 

calendar.prmonth(연도, 월)

 

 

★calendar.weekday

weekday(연도,월,일)함수는 그 날짜에 해당하는 요일 정보를 리턴한다.

월요일이 0 화요일 1 일요일 6 값을 리턴한다.

리눅스는 일요일이 0 월요일이 1

 

 

★calendar.monthrange

monthrange(연도,월)함수는 입력받은 달의 1일이무슨 요일인지와 그달이 몇일까지 있는지 확인.

 

 

★random

이 함수는 난수(규칙이 없는 임의의 수)를 발생시키는 모듈  random과 randint

 

 

0.0 에서 1.0 사이의 실수 중 난수 값을 리턴

1 에서 11 사이의 정수중 난수 값 리턴

 

★webbrowser

자신의 시스템에서 사용하는 기본 웹 부라우저가 자동으로 실행되게 하는 모듈.

 

'Python > Python' 카테고리의 다른 글

Python-정규 표현식  (0) 2017.06.16
Python-내장 함수  (0) 2017.06.12
Python-오류 예외 처리  (0) 2017.06.11
Python-모듈  (0) 2017.06.10
Python-Class  (0) 2017.06.08

코볼트 스트라이크 - 원격제어 해킹

 

 

한국에서는 프로그램 설치를 못하게 사이트가 만들어 놓았다.

 

 

Ultrasurf - 한국 IP주소를 미국 IP로 바꿔주는 프로그램

 

 

다운받은 프로그램을 실행시킨다.

 

구글링 whatismyip 검색

내가 현재 사용하는 IP주소 에 대해 알려주는 웹사이트

 

 

내가 현재 사용하고있는 미국 IP주소.

ISP(internet service provider) 허리케인 회사.

-개인이나 기업에게 인터넷 접속 서비스

 

다시 코볼트스트라이크 웹에서 다운을 시도한다 하지만 요즘 바뀌어서 인증이 까다로워져서 포기다.

구글링 열심히 찾은 결과 다운파일을 찾아 시도한다.

 

터미널(코볼트스트라이크 위치 경로)

./teamserver (자신 아이피) (비밀번호설정)

 

새창 터미널 열은후

./cobaltstrike 실행

 

 

설정한 비밀번호 password에 입력.

 

 

그러면 창이 뜨는 것을 볼수 있다. 이제 시작해본다.

 

악성코드를 만들어본다

 

메뉴 Attacks->Packages->Windows Executable

 

 

설명 = 이 대화 상자는 Windows 실행 파일을 생성합니다.이 프로세스를 사용자 정의 할 수있는 코발트 스트라이크

Add를 누른다.

 

 

Name을 만들고 Port에 아무거나 적는다.

 

 

Generate를 눌러 악성코드.exe 저장경로를 설정한다.

 

내가만든 악성코드.exe 파일을 누가 눌르면 밑에 창 처럼 누가 접속했다고 나온다.

 

 

접속한 사람 오른쪽 마우스 클릭 interact 클릭 -> Access -> Bypass UAC 클릭

Bypass UAC = user account control 우회

Launch 클릭

 

 

1분정도 기달리면 세션이 더생기면서 원격 해킹할수 있게 된다.

 

 

 

상대방 pc 오른쪽 클릭 explore->File Browser 를 누르면 파일리스트 들이 나온다.

 

 

상대방 파일들을 다운로드 나 지울수도 있고 실행할수도 있게된다.

 

 

process list는 현재 실행중인 프로세스들을 확인가능

explorer.exe = 인터넷 브라우저

선택후 LogKeystrokes 클릭. Screenshot 클릭

 

 

스크린샷 = 설정해준 시간동안 스크린샷을 해주는것

 

메뉴 view -> keystroke 키고 screenshot을 켜준다.

 

 

상대방 pc 사진으로 볼수 있다.

 

 

상대방이 페이스북에 로그인할려고 한다.

 

 

상대방이 처음부터 무엇을 했는지 Keystroke에 정렬되서 나온다.

페이스북 아이디 패스워드 까지 다나오게 된다...ㄷㄷ

 

Explore->Desktop(VNC)   누르면  원격제어 할수있는 환경이 나온다.

 

 

저 아이콘을 누르면 상대방 마우스랑 내 마우스랑 겹치게 되면서 원격제어를 할수 있게 된다.

 

코볼트 라이센스 21일판 무제한판으로 늘리는법

코볼트 경로 터미널창

common파일->License.class

 

jad License.class

여기서 jad는

jad는 JAva Decompiler의 약자입니다.

말그대로 Java디컴파일을 해줍니다.

소스를 열어볼때 사용

 

vi License.jad

소스 밑으로내리면 21L에서 999999L늘린다.

 

mv License.jad License.java

이름변경

 

javac -classpath ../ License.java

자바 환경변수 설정

 

common에 있는 License.class파일을 코볼트.jar압축파일에 끌어 넣는다.

 

★abs

abs(x)는 어떤 숫자를 입력으로 받았을때, 그 숫자의 절대 값을 돌려주는 함수이다.

 

 

★all

all(x)은 반복 가능한 자료형 x를 입력 인수로 받으며 이 x가 모두 참이면 True,거짓이 하나라도 있으면 False

를 리턴한다.

 

반복가능한 자료형이란 for문으로 그 값을 출력할수 있는것 리스트,튜플,문자열,딕셔너리,집합 등이 있다.

 

 

요소0은 거짓이므로 Faluse를 리턴한다.

 

★any

any(x)는 x중 하나라도 참이 있을 경우 True를 리턴하고 x가 모두 거짓일 경우에만 False를 리턴한다.

all(x)의 반대 경우라고 할수 있다.

 

 

★chr

chr(i)는 아스키 코드 값을 입력받아 그코드에 해당하는 문자를 출력하는 함수이다.

아스키 코드란 0~127 사이의 숫자들을 각각 하나의 문자 또는 기호에 대응시켜 놓은것

 

 

★dir

dir은 객체가 자체적으로 가지고 있는 변수나 함수를 보여준다.

아래 사진은 리스트와 딕셔너리 객체의 관련 함수들을 보여주는 예다.

 

 

★divmod

divmod(a,b)는 2개의 숫자를 입력받는다. 그리고 나눈 몫과 나머지를 튜플 형태로 리턴하는 함수다.

 

 

★enumerate

enumerate는 열거하다라는 뜻 이함수는 순서가 있는 자료형(리스트,튜플,문자열)을 입력으로 받아 인덱스 값을 포함하는

enumerate객체를 리턴한다.

 

보통 enumerate 함수는 for문과 함께 자주 사용

 

 

현재 순서(index)와 그값을 알수 있다.

 

★eval

eval(expression)은 실행 가능한 문자열(1+2,'hi'+'a')을 입력받아 문자열을 실행한 결과 값을 리턴하는 함수

 

 

eval은 입력받은 문자열로 파이썬 함수나 클래스를 동적으로 실행하고 싶은 경우 사용

 

★filter

filter은 무엇인가를 걸러낸다. 첫번째 인수로 함수 이름을, 두번째 인수로 그함수에 차례로 들어갈 반복 가능한 자료형을 받는다. 두번째 인수인 반복 가능한 자료형 요소들이 첫번째 인수인 함수에 입력되었을때 리턴값이 참인 것만 묶어서

돌려준다.

 

 

positive함수는 리스트를 입력값으로 받아 각각의 요소를 판별해 양수값만 리턴하는 함수

위에 결과 값은 list

밑에 결과 값은 tuple

filter을 빼면 에러가 발생한다

 

★hex

hex(x)는 정수값을 입력받아 16진수(hexadecimal)로 변환하여 리턴하는 함수다.

 

 

★id

id(object)는 객체를 입력받아 객체의 고유주소값을 리턴하는 함수이다.

 

 

id(5)는 다른객체이므로 다른 고유 주소값이 출력된다

 

★int

int(x)는 문자열 형태의 숫자나 소수점이 있는 숫자등을 정수형태로 리턴하는 함수

 

 

3진수로 표현된 22의 10진수 값은8이다.

 

★isinstance

isinstance(object,class)는 첫번째 인수로 인스턴스, 두번째 인수로 클래스 이름을 받는다.

입력으로 받은 인스턴스가 그 클래스의 인스턴스인지를 판단하여 참이면 True, 거짓이면 False를 리턴한다.

 

 

a가 Person 클래스에 의해서 생성된 인스턴스 이므로 트루

b는 Person 클래스에 의해 생성된 인스턴스가 아니므로 False를 리턴

 

★lambda

lambda는 함수를 생성할때 사용하는 예약어 def와 동일한 역할

보통 함수를 한줄로 간결하게 만들때 사용한다.

 

lambda 인수1, 인수2,...:인수를 이용한 표현식

 

def 가 있는데 lambda가 나온이유는 lambda는 def보다 간결하게 사용할수 있기 때문이다.

lambda는 def를 사용할수 없는 곳에서도 사용할수 있다.

 

 

★len

len은 입력한 길이(요소의 개수) 를 리턴하는 함수이다.

 

★map

map(f,iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다.

map은 입력받은 자료형의 각 요소가 함수 f에 의해 수행된 결과를 묶어서 리턴하는 함수이다.

 

 

리스트 요소를 입력받아 각 요소에 2를 곱한 결과값을 돌려준다.

 

 

x에 리스트에 있는 값들이 하나씩 들어가 2배의 결과가 나온다

 

 

lambda를 사용하면 간략하게 만들수 있다.

 

 

리스트의 값 요소들을 1씩 증가시킨다.

★max

그 최대값을 리턴하는 함수

 

★min

max와 반대로 최소값을 리턴하는 함수

 

★oct

정수 형태의 숫자를 8진수 문자열로 바꾸어 리턴하는 함수

 

★ord

아스크 코드값을 리턴하는 함수

chr함수와 반대

 

 

★pow

pow(x,y)는 x의 y 제곱한 결과값을 리턴하는 함수

 

 

★range(인수가 3개일 경우)

세 번째 인수는 숫자 사이의 거리를 말한다.

 

 

★sorted

입력값을 정렬한 후 그결과를 리스트로 리턴하는 함수

 

 

sort라는 함수가 있는데 그 함수는 리스트 객체 그자체를 정렬만하고 결과를 리턴하지는 않는다.

 

 

 

★zip

동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수

 

 

 

 

 

'Python > Python' 카테고리의 다른 글

Python-정규 표현식  (0) 2017.06.16
Python-외장함수  (0) 2017.06.16
Python-오류 예외 처리  (0) 2017.06.11
Python-모듈  (0) 2017.06.10
Python-Class  (0) 2017.06.08

칼리 리눅스

-백트랙의 후속 버전으로써 해킹 및 정보 보안을 테스트 하기 위해 만들어진 리눅스 배포판.

-수많은 해킹 툴들이 준비 되어 있다.

-데비안 기반.

 

백트랙?- 정보보안 테스트 오픈소스 리눅스 배포판. 해킹과 관련된 도구와 설명서.

 

초간단

칼리 리눅스 한글로 설치시 한글 깨짐 해결방법

 

 

1. apt-get update

2. apt-get install fcitx-hangul

3. apt-get install fcitx-lib*

4. apt-get install fonts-nanum*

reboot

 

무엇인가 설치를 다한후 reboot을 하면 좋다.

 

 

한글 이 잘되는 거 확인 가능

프로그램을 만들다 보면 수없이 많은 오류를 만나게 된다.

오류를 무시하고 싶을 때도 있고 별도로 처리하고 싶을 때도 있다.

파이썬은 try,except를 이용해 오류를 처리 할 수 있게 해준다.

 

★오류는 어떤 때 발생할까?

 

오류를 처리하는 방법을 알기 전에 어떤 상황에서 오류가 발생하는지 알아보자.

 

디렉토리 안에 없는 파일을 열려고 시도 했을 때 발생하는 오류이다.

 

 

FileNotFoundError 파일 오류 메시지

 

 

0으로 나누려니까 ZeroDivisionError라는 이름의 오류 발생

 

 

a리스트에서 얻을 수 없는 값이다. 따라서 indexError 발생

 

★오류 예외 처리 기법

 

try, except문

 

try:

...

except [발생 오류[as 오류 메시지 변수]]:

...

 

 

try .. else

 

try문은 else절을 지원한다. else절은 예외가 발생하지 않은 경우에 실행되며 반드시 except절 바로 다음에 위치

해야 한다.

 

 

foo.txt라는 파일이 없으면 except절이 수행되고

파일이 있으면 파일내용 출력하기

 

try .. finally

 

보통 finally절은 사용한 리소스 close해야 할 경우에 많이 사용된다.

 

★여러개의 오류처리하기

 

try문 내에서 여러개의 오류를 처리하기 위해서는 다음과 같은 구문을 이용한다.

 

 

인덱싱 오류가 먼저 발생했으므로 밑에 오류들은 출력되지 않는다.

 

 

2개 이상의 오류를 동시에 처리하기 위해선 괄호를 묶어 사용

 

★오류 회피하기

 

프로그래밍을 하다가 특정 오류가 발생하면 그냥 통과 시켜야 할 때가 있을수 있다.

 

★오류 일부러 발생시키기

 

프로그래밍을 하다보면 종종 오류를 발생시켜야 할 경우도 생긴다.

raise라는 명령어를 이용해 오류를 강제로 발생시킨다.

 

 

 

NotlmplementedError는 파이썬 내장 오류로 일부러 발생시키고자 사용한다.

orange클래스는 fruit클래스를 상속받는다.

그런데 orange클래스에서 apple함수를 구현하지 않아 fruit클래스의 apple함수가 호출된다.

그리고 raise문에 의해 에러메시지가 나온다.

 

상속받는 클래스에서 함수를 재구현하는 것을 메서드 오버라이딩이라 부른다.

 

 

'Python > Python' 카테고리의 다른 글

Python-외장함수  (0) 2017.06.16
Python-내장 함수  (0) 2017.06.12
Python-모듈  (0) 2017.06.10
Python-Class  (0) 2017.06.08
Python-파일 읽고쓰기  (0) 2017.06.06

모듈이란 함수나 변수 또는 클래스 들을 모아 놓은 파일이다.

파이썬으로 프로그래밍을 할때 많은 모듈을 사용한다.

 

★모듈 만들고 불러보기

 

 

import는 현재 디렉터리에 있는 파일이나 파이썬 라이브러리가 저장된 디렉터리에 있는 모듈만 불러올 수 있다.

 

mod.py에 함수 추가

 

 

print(mod.num(3,2))를 해도 출력이 된다.

mod.sum 이런식으로 쓰지 않고 sum,safe_sum처럼 함수를 쓰고 싶은 경우도 있을 것이다.

이럴땐 from 모듈이름 import 모듈 함수 쓰면 된다.

 

 

★if __name__ == "__main__":의 의미

 

 

하지만 import mod를 하면 문제가 생긴다.

 

 

 

__name__ == "__main__"이 참이 되어 if문 다음 문장들이 수행된다.

name대신에 다른걸 쓰면 오류가 발생

 

★클래스나 변수 등을 포함한 모듈

 

 

print(a.solv(3))의 3은 r값이 되어 3.14*6을하면 18.84가 된다.

 

 

★새파일 안에서 이전에 만든 모듈 불러오기

 

 

★모듈을 불러오는 또 다른 방법

 

sys모듈 파이썬을 설치 할때 함께 설치되는 라이브러리 모듈이다.

 

 

sys.path는 파이썬 라이브러리들이 설치되어 있는 디렉터리들을 보여준다. 파이썬 모듈이 위의 디렉터리에

들어 있다면 모듈이 저장된 디렉터리로 이동할 필요없이 바로 불러서 사용 할 수 있다. 실습해보자

 

 

경로가 추가된것을 확인한다.

 

 

나는 안전하게 모듈 접근은 환경 변수 추가를 따로 안하고 그 폴더안에서 진행하는게 낫다고 생각한다.

'Python > Python' 카테고리의 다른 글

Python-내장 함수  (0) 2017.06.12
Python-오류 예외 처리  (0) 2017.06.11
Python-Class  (0) 2017.06.08
Python-파일 읽고쓰기  (0) 2017.06.06
Python-함수  (0) 2017.06.06

프로그래밍 언어중 하나인 c언어에는 클래스가 없다. 굳이 클래스 없이도 프로그램을 만들수 있다는 말이다.

클래스는 지금까지 공부한 함수나 자료형처럼 프로그램 작성을 위해 필요한 요소는 아니다.

하지만 프로그램 작성시 클래스를 사용하면 프로그래머가 얻을 수 있는 이익은 상당하다.

 

계산기에 3이라는 숫자를 입력하고 + 기호를 입력한 후 4를 입력하면 결과값으로 7을 보여준다. 다시 한 번 + 기호를 입력한 후 3을 입력하면 기존 결과값 7에 3을 더해 10을 보여준다. 즉 계산기는 이전에 계산된 결과값을 항상 메모리 어딘가에 저장하고 있어야 한다.

return result문장을 지우면 결과값이 None None출력확인

 

adder 함수는 입력 인수로 num을 받으면 이전에 계산된 결과 값에 더한후 출력하는 함수.

이전에 계산된 결과값을 유지하기 위해서 result라는 전역변수(global)를 사용했다.

 

한 프로그램에서 2개의 계산기가 필요한 상황이 발생하면 어떻할까... 각각의 계산기는 각각 결과값을 유지해야 하기 때문에

adder함수 하나만으로는 결과 값을 유지할수 없다.

함수를 각각 따로 만들어야 한다.

 

하지만 계산기가 점점 늘어날때 이렇게 전역변수와 함수를 추가하긴 힘들것이다. 간단한 해결책이 있다.

 

cal1,cal2 라는 별개의 계산기(객체) 가 각각의 역할을 수행한다.

간단하게 cal3=Calcu()만 추가하므로 간편해진다.

 

programmer()의 결과값을 돌려받은 lee과 dong이 바로 객체이다.

 

객체와 인스턴스의 차이.

- 클래스에 의해서 만들어진 객체를 인스턴스라고 한다. 차이는 lee=programmer() 에서 lee는 객체이다.

lee라는 객체는 programmer의 인스턴스이다. 즉 인스턴스라는 말은 특정 객체(lee)가 어떤 클래스(programmer)의

객체 인지를 관계 위주로 설명할 때 사용된다. 즉 lee은 인스턴스 보다는 lee는 객체라는 표현이 어울리고

lee는 programmer의 객체 보다는 lee는 programmer의 인스턴스 라는 표현이 어울린다.

 

★클래스 함수

 

 

☆self: self라는 변수를 클래스 함수의 첫 번째 인수로 받아야 한다는 것은 파이썬만의 특징이다.

☆__init__: 객체를 만들때 항상 실행된다는 뜻의 함수.

 

★클래스 구조 만들기

대화형 인터프리터에서 pass란 문장만을 포함한 Fourcal 클래스를 만든다.

pass는 아무것도 수행하지 않는 문법. 임시로 코드 작성할때 주로 사용함

 

a=FourCal()로 a라는 객체를 먼저 만들고 type(a)로 a라는 객체가 어떤 타입인지 알아보았다.

a가 FourCal 클래스의 인스턴스임을 알수 있다.

 

★객체에 숫자 지정할수 있게 만들기

 

setdata 메서드의 입력인수

입력인수로 3개의 입력값을 받는다. 그런데 첫 번째 입력 인수는 특별한 의미를 갖는 self변수다.

 

a라는 객체를 만든다음 a.setdata(3,4)처럼 하면 FourCal 클래스의 setdata 메서드가 호출되고

setdata 메서드의 첫 번째 인수에는 자동으로 a라는 객체가 입력으로 들어가게 된다.

 

즉 setdata의 입력인수는 3개지만 a.setdata(3,4)처럼 2개의 입력값만 주어도 a라는 객체가 setdata 함수의

첫 번째 입력을 받는 변수인 self에 대입되게 된다.

 

 

a와 b라는 객체는 모두 first라는 변수를 가지고 있지만 변수의 값은 각각 다르다.

a,b 객체의 first변수는 고유의 저장 영역을 가지고 있는 객체 변수이기 때문이다.

 

객체 변수란??- 그 객체의 고유한 값을 저장할 수 있는 공간이다.

 

★더하기 기능 만들기

 

self.first+self.second= a.first+a.second

 

★곱하기 빼기 나누기 기능 만들기

 

★스토리 있는 클래스 만들기

 

내이름 출력해보기.

 

이동현이 여행을 가다 를 출력해 보자

 

__init__로 바꿔서 해보기

 

★클래스의 상속

상속: 물려받다 .

HouseLee 이라는 클래스가 Housedong 클래스를 상속받는다

 

★연산자 오버로딩

연산자 오버로딩이란 연산자를 객체끼리 사용할 수 있게 하는 기법

 

pey+man처럼 호출되면 __add__(self,other) 메서드의 self는 pey가 되고 other는 man이 된다.

 

 

'Python > Python' 카테고리의 다른 글

Python-오류 예외 처리  (0) 2017.06.11
Python-모듈  (0) 2017.06.10
Python-파일 읽고쓰기  (0) 2017.06.06
Python-함수  (0) 2017.06.06
Python-조건문(if문),반복문  (0) 2017.06.02

★파일 생성하기

파일 객체=open(파일 이름, 파일 열기 모드)

 

 

새파일.txt라는 파일을 C:/Python 디렉터리에 생성하고 싶다면 다음과 같이 작성.

 

close()를 사용해서 열려 있는 파일을 직접 닫아 주는 것이 좋다. 쓰기모드로 열었던 파일을 닫지 않고

다시 사용하려고 하면 오류가 발생하기 때문이다.

 

★파일을 쓰기 모드로 열어 출력값 적기

 

 

★프로그램의 외부에 저장된 파일을 읽는 여러 가지 방법

★readline() 함수 이용하기

 

모든 라인을 읽어서 화면에 출력하고 싶다면 아래와 같이 작성

while True: 라는 무한 루프 안에서 f.readline()을 이용해 파일을 계속해서 한줄씩 읽어 들이도록한다.

만약 더이상 읽을 라인이 없으면 break를 수행한다.

 

★readlines() 함수 이용하기

 

 readlines() 함수는 파일의 모든 라인을 읽어서 각각의 줄을 요소로 갖는 리스트로 리턴한다.

 

★read() 함수 이용하기

 

★파일에 새로운 내용 추가하기

파일 추가모드('a')

★with문과 함께 사용하기

파일을 열면 f.close() 해주어야 한다. 이렇게 파일을 열고 닫는 것을 자동으로 처리해주는 것을 with문이다.

 

★sys 모듈로 입력 인수 주기

type 명령어는 바로 뒤에 적힌 파일 이름을 인수로 받아 그 내용을 출력해주는 도스 명령어 이다.

대부분의 도스 명령어들은 다음과 같이 명령행(도스창)에서 입력 인수를 직접 주어 프로그램을 실행시키는 방식을 따른다.

 

sys모듈의 argv는 명령창에서 입력한 인수들을 의미

 

파일 소문자를 대문자로 만들기.

'Python > Python' 카테고리의 다른 글

Python-모듈  (0) 2017.06.10
Python-Class  (0) 2017.06.08
Python-함수  (0) 2017.06.06
Python-조건문(if문),반복문  (0) 2017.06.02
Python-딕셔너리,집합(자료형)  (0) 2017.05.30

★def 함수

- 함수를 만들때 사용하는 예약어.

- 함수명은 함수를 만드는 사람이 임의로 만들 수 있다.

 

" 이 함수의 함수명은 sum이고 입력 인수로 2개의 값을 받으며 결과핪은 2개의 입력값을 더한 값이다"

 

return - 결과 값을 돌려주는 명령어.

 

★입력값이 없는 함수

박스안에만 출력하면 아무것도 안나온다 그러므로 아래같이 코딩을 해줘야 출력이 나온다.

 

★결과 값이 없는 함수

마지막 문장 sum(숫자,숫자)를 지정해줘야 출력이 나온다.

 

★입력값도 결과값도 없는 함수

 

★여러 개의 입력값을 받는 함수 만들기

ex)여러 개의 입력받을 모두 더하는 함수를 직접 만들어 보자

sum_num라는 함수는 입력값이 몇개든 상관이 없다. *args처럼 입력 변수명 앞에 *을 붙이면

입력값들을 전부 모아서 튜플로 만들어 주기 때문이다.

*args는 임의 변수지만 관례적으로 자주 사용한다

range 함수 접근 실패

 

def sum_num(*args)처럼 함수의 인수로 *args(*입력 변수)만 사용할수 있는 것은 아니다

 

내가 만들어본 코드다.

 

★return의 또 다른 쓰임새

return문을 만나는 순간 결과 값을 돌려준 다음 함수를 빠져나가게 된다

 

또 다른 예제

입력 인수가 name,old, man=True 3개다.

man=True 는 함수의 인수 초깃값을 설정하는 방법이다.

주의 man=True는 마지막에 써야한다. 

 

★함수 안에서 선언된 변수의 효력 범위

2가 출력되어야 할것 같지만 결과값은 1로 나온다. 그 이유는 함수 안에서 새로 만들어진

변수는 함수 안에서만 사용되는 "함수만의 변수"이기 때문이다. 밖의 변수는 아니다.

 

print(a)에서 에러가 발생한다. 이유는 a라는 변수를 어디에서도 찾을수 없기 때문.

 

★함수 안에서 함수 밖의 변수를 변경하는 방법

1.return 이용

 

2.global 이용

프로그래밍 할때 global명령어는 사용하지 않는게 좋다. 독집적으로 존재하는 것이 좋기 때뭄ㄴ이다.

외부 변수에 종속적인 함수는 좋은 함수가 아니다.

첫번째 return 방법 사용을 권한다.

'Python > Python' 카테고리의 다른 글

Python-Class  (0) 2017.06.08
Python-파일 읽고쓰기  (0) 2017.06.06
Python-조건문(if문),반복문  (0) 2017.06.02
Python-딕셔너리,집합(자료형)  (0) 2017.05.30
Python-리스트,튜플(자료형)  (0) 2017.05.29

★if문의 기본 구조

if 조건문:

수행할 문장1

수행할 문장2

...

else:

수행할 문장A

수행할 문장B

...

 

들여쓰기 중요

 

★조건문이란?

-참과 거짓을 판단하는 문장

☆비교 연산자

 

 

☆논리 연산자

 

 

 

★다양한 조건을 판단하는 elif

lf <조건문>:

<수행할 문장1>

<수행할 문장2>

...

elif <조건문>:

<수행할 문장1>

<수행할 문장2>

...

elif <조건문>:

<수행할 문장1>

<수행할 문장2>

...

...

else:

<수행할 문장1>

<수행할 문장2>

...

 

실습

1. 비밀번호가 일치하면 로그인 시켜라.

2. ID와 Passwd가 모두 일치할때,

   lD는 일치하고 Passwd가 불일치 할때,

   lD는 불일치하고 Passwd는 일치할때,

   lD와 Passwd 모두 불일치 할때 출력하라.

 

 

★반복문

while문

☆기본 구조

-조건문이 참인 동안에 while문 아래에 속하는 문장들이 반복해서 수행된다.

 

 while <조건문>:

<수행할 문장1>

<수행할 문장2>

<수행할 문장3>

...

 

10 < 10 거짓 종료

 

★강제로 빠져 나가기-break

 

 

 ★조건에 맞지 않는 경우 맨처음으로 돌아가기-continue

 while문을 빠져나가지 않고 continue사용

 

 continue 대신 break를 쓰면 값이 1 출력

 

 실습

break 대신 continue를 쓰면 오류

 

 ★for문

☆기본 구조

for 변수 in 리스트(또는 튜플, 문자열):

수행할 문장1

수행할 문장2

...

 

☆전형적인 for문

 

☆다양한 for문의 사용

 

☆for문의 응용

총 5명의 학생이 시험을 보았는데 시험 점수가 60점이 넘으면 합격이고 그렇지 않으면 불합격이다.

합격인지 불합격인지 결과를 보여주세요

marks=[90,25,67,45,80]

 

for문이 한 번씩 수행될 때마다 number는 1씩 증가한다

 

 

☆for문과 continue

while문에서만 쓰는게 아니라 for문에서도 continue를 사용할수 있다.

60점이상인 사람에게는 축하메시지를 아닌사람은 아무런 메시지도 전하지 않는 프로그램을 만들자.

mark < 60이 참이 되어 continue문이 수행된다.

 

☆for문과 자주 사용하는 range함수

range(10)은 0부터 10미만의 숫자를 포함하는 range객체를 만들어준다.

range(시작 숫자, 끝 숫자) 이때 끝 숫자는 포함되지 않는다.

 

★range 실습

i변수에 리스트의 숫자들이 1부터 10까지 하나씩 차례로 대입되면서 sum=sum+i라는 문장을

반복적으로 수행하고 최종적 55가 된다.

 

60점이상이면 합격이라는 출력.

len함수는 리스트 내 요소의 개수를 돌려주는 함수이다.

len(makrs)는 5가 되고 range(5)가 된다.

 

★for와 range를 이용한 구구단

 

입력 인수 end를 넣어 준 이유는???

print(i*j, end=" ") end를 넣어준이유는 결과값을 출력할때

다음줄로 넘기지 않고 그줄에 계속해서 출력하기 위해서다.

 

end를 빼면

 

print(" ")를 빼면

 

★리스트 안에 for문 포함하기

for문을 포함하는 리스트 내포(list comprehension)를 이용하면 좀더 편리하고 직관적인 프로그램을 만들수 있다.

 

 

 

 

첫번째 방법이 더 와닿는거 같다.

 

★짝수에만 3을 곱하여 담고 싶다면 if조건을 사용할수 있다.

코딩줄이 줄어드는게 장점이지만 한줄로 길게 쓰는건 보기 않좋은거 같다.

 

 

☆for문 이용해서 평균값 구하기

 

'Python > Python' 카테고리의 다른 글

Python-파일 읽고쓰기  (0) 2017.06.06
Python-함수  (0) 2017.06.06
Python-딕셔너리,집합(자료형)  (0) 2017.05.30
Python-리스트,튜플(자료형)  (0) 2017.05.29
Python-숫자형,문자열,자료형  (0) 2017.05.28

★딕셔너리 자료형(Dictionary)

-리스트나 튜플처럼 순차적으로 해당 요소 값을 구하지 않고, key를 통해 Value를 얻는다.

 

☆딕셔너리 만드는 법

변수={key1:Value1, Key2:Value2, Key3:Value3,...}

{}로 둘러 싸여 있고, 쉼표로 구분하고, 키 값에는 리스트를 제외한 모든 자료형이 가능하다.

 

☆딕셔너리 쌍 추가,삭제하기

순서를 따지지 않고 순서에는 원칙이 없다.

쌍 추가하기

쌍 삭제하기

 

☆딕셔너리를 사용하는 방법

딕셔너리에서 Key를 사용해 Value값 얻기

중복되는 Key는 1개를 제외한 나머지 값은 모두 무시

리스트를 Key로 사용할 수 없음

★딕셔너리 관련 함수들

Key 리스트 만들기(keys)

Value 리스트 만들기(values)

key,Value 쌍 얻기(items)

key,Value 쌍 모두 지우기(clear)

key로 Value 얻기(get)

해당 Key가 딕셔너리 안에 있는지 조사하기(in)

 

 

None을 리턴 - 존재하지 않는 키로 값을 가져올 경우 오류 발생

 

실습

딕셔너리 a에서 'B'에 해당하는 값을 추출하고 삭제하자.

a={'A':90,'B':80,'C':70}

 

 

★집합 자료형(Set)

☆집합 자료형 만드는 법

set 키워드 사용

 

☆집합 자료형의 특징

- 중복을 허용하지 않는다

- 순서가 없다.(Unordered)

 

☆집합 자료형 활용하는 방법

교집합

합집합

차집합

 

☆집합 자료형 관련 함수들

값 1개 추가하기 (add)

s1.add(0,'a') X

s1.insert(0,'a') X

 

값 여러개 추가하기 (update)

add 함수안에 리스트 들어가면 오류발생 확인

update함수 사용해야 함

 

특정 값 제거하기 (remove)

del 함수 적용 X

del s1[1] X

del s1['a'] X

 

실습

a리스트에서 중복된 숫자들을 제거하자

집합 자료형으로 변환 -> 리스트 자료형으로 다시 변환

 

'Python > Python' 카테고리의 다른 글

Python-함수  (0) 2017.06.06
Python-조건문(if문),반복문  (0) 2017.06.02
Python-리스트,튜플(자료형)  (0) 2017.05.29
Python-숫자형,문자열,자료형  (0) 2017.05.28
Python-연산자,변수,자료형,git  (0) 2017.05.21

★iptables 란?

- 커널의 ip 패킷 필터링(Packet Filtering)기능을 하는 Netfilter에 규칙을 설정하고 관리하는 도구

- 체인이라고 불리는 방향성을 가진 규칙을 연결한 테이블이다.

 

★패킷 필터링

- 네트워크를 통과하는 모든 패킷들은 패킷 헤더에 출발지와 목적지 그리고 어떤 프로토콜을 이용하는지에

관한 정보를 담고 있다. 이러한 패킷의 헤더 정보를 보고 호스트로 들어오는 (INPUT)패킷과 나가는 패킷(OUTPUT)

통과하는 패킷 (FORWARD) 패킷 등을 검사하여 (TABLE과 비교 ) 불필요한 패킷이나 잘못된 패킷을 폐기

(DROP)하고 규칙과 일치하는 패킷만 허용(ACCPECT)시키는 기능을 한다.

 

 

 

 

 

★규칙 확인 및 제거

service iptables start

chkconfig iptables on

chkconfig --list iptables

 

iptables -L       //리스트 형태로 출력

iptables -nL     //숫자로 출력

 

iptables -L --line-numbers      //라인번호 + 리스트 형태로 출력, 규칙제거시 유용!

 

iptables -S     //체인에 설정된 규칙을 명령어 형태로 출력

/etc/sysconfig/iptables와 동일

 

iptables -D [chain] [num]

 

iptables -F    //모든 규칙제거 방화벽 초기화 ssh설정 날라가고 xsehll 접속x

netstat -nltp 22  //22번 포트 열려 있음을 확인

 

★기본 정책 설정 및 데몬 관리

 

iptables-save > /etc/iptables.tmp

- 기본 설정 파일 외 다른 파일에 저장시 사용

iptables-restore < /etc/iptables.tmp

- 해당 파일의 내용으로 설정을 되돌릴시 사용

iptables-save > /root/default_policy

iptables -A [chain] -p [protocol] --[S/DPORT] [PortNum] -j [Target]

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

- 어떤 IP든 22번 포트로의 접근이 가능하도록 설정

service iptables save

- 시스템 재기동 시 자동 실행되도록 저장

 

★실습 SSH통신하기

Client-Linux로부터 SSH접속은 허용하고, Server-B와 그외 다른 호스트 및 네트워크로부터의

SSH접속은 차단한다.

iptables -A [chain] -p [protocol] --[S/DPORT] [PortNum] -j [Target]

 

★Server-B, Client-Linux

yum -y install openssh-client

service iptables stop

 

★Server-A

iptables -A INPUT -p tcp -s 100.100.100.120 --dport 22 -j DROP

iptables -A INPUT -p tcp -s 100.100.100.130 --dport 22 -j ACCEPT

 

Server-B, Client-Linux

첫번째 규칙이 먼저 적용되 다 접속이 가능

 

Client-Linux

 

Server-B

 

다시 순서대로 시도

iptables -F 로 규칙 모두 삭제후 다시 순서대로 입력

iptables -A INPUT -p tcp -s 100.100.100.120 --dport 22 -j DROP

iptables -A INPUT -p tcp -s 100.100.100.130 --dport 22 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

 

Server-B, Client-Linux

 

Client-Linux 접속 성공

 

Server-B 접속 실패

 

 

★실습1

Server-A 에서 nslookup 명령어로 Google.com IP확인하기 (DNS 53:UDP)

nslookup google.com

 

nslookup에서 ip확인이 안되 firefox에서 주소를 쳐봤더니 역시 서버 찾을수 없음 확인

 

service iptables restart

vi /etc/resolve.conf

 

iptables -A INPUT -p udp --sport 53 -j ACCEPT

nslookup google.com

 

★실습2

Server-A firefox를 이용해 네이버 접속하기

iptables -A INPUT -p tcp --sport 80 -j ACCEPT

 

 

★실습3

Client-Linux가 Server-A의 WEB 접속을 허용하도록 설정

 

Server-A

yum -y install httpd

service httpd restart

 

Client-Linux

yum -y install elinks

 

Server-A

iptables -A INPUT -p tcp -s 100.100.100.130 --dport 80 -j ACCEPT

 

Client-Linux

elinks 100.100.100.110

 

 

★iptables 응용-로그기록

-규칙에 맞는 패킷을 로그에 기록

-기본적으로 생성되는 커널 로그 파일은 /var/log/messages이며 이곳에 로그가 저장

 

★LOG타겟 사용 - 실습

Server-A

iptables -I INPUT 1 -s 100.100.100.120 -j LOG

 

Server-B

ssh 100.100.100.110

 

Server-A

tail -f /var/log/messages    //실시간으로 로그 변경 확인

Server-A 접속

 

접속을 시도하면 로그가 저장되고 있다.

 

LOG타겟 사용-실습2

Server-B 접근 시 차단하며, 차단한 기록을 로그 파일에 저장한다.

 

Server-A

iptables -I INPUT 2 -s 100.100.100.120 -j DROP

 

Server-B

ssh 100.100.100.110

 

Server-A

tail -f /var/log/messages   //실시간으로 로그 변경 확인

접속을 시도하면 접속이 불가능하다

 

★LOG타겟 사용-실습3

다른 로그 기록과 차단한 로그 기록을 구별하기 위해 차단 로그 앞에 prefix(접두사)를 붙여 관리한다.

 

Server-A

iptables -D INPUT 1  //기존 로그 규칙 삭제

iptables -I INPUT 1 -s 100.100.100.120 -j LOG --log-prefix "Dropped IP:"

- 로그에 접두사 "Dropped IP:"를 붙여서 저장이 되도록 --log-prefix 옵션 사용

 

Server-B

ssh 100.100.100.110

 

Server-A

tail -f /var/log/messages

 

접두사 와 출발지 MAC주소 확인  차단된IP 확인할수 있다

 

 

★iptables와 연결 추적 (Connection Tracking)

-서비스 연결 상태에 따라서 그연결을 감시하고 제한할수 있다.

-연결 추적 방식은 연결 상태를 저장하기 때문에, 시스템 관리자가 연결을 허용하거나 거부할수 있다.

 

 

☆tcp 프로토콜 동작이해(시험)

SYN -> ACK+SYN-> ACK 

 

 

iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j  ACCEPT

- syn만 실행중 Xshell접속 안됨

 

VM에서 테스트

 

 

Server-A 접속 실패

 

 

iptables -D INPUT 6

 

Server-A xshell 접속 됨

 

★핑 테스트

ping 127.0.0.1      //자기 자신을 뜻하는 가상 인터 페이스 루프백으로 핑 테스트 -> 불가능

iptables -A INPUT -i lo -j ACCEPT

ping 127.0.0.1     //가능

 

<Server-A, Server-B>

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

 

<Server-A> <------> <Server-B>

 

 

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

xshell/ 쉘 스크립트  (0) 2017.05.25
xshell/ WEB,APM,XE  (0) 2017.05.21
xshell/ PXE & KICKSTART  (0) 2017.05.15
xshell/ NFS  (0) 2017.05.14
xshell/ SAMBA  (0) 2017.05.14

★리스트 자료형(List)

★리스트?

-비어있는 리스트,숫자,문자열,숫자+문자열,리스트 자체를 요소 값으로 가질 수 있다.

즉 리스트 안에는 어떠한 자료형도 포함시킬 수 있다

 

 

★리스트의 인덱싱과 슬라이싱

리스트의 인덱싱

 

중첩 리스트

 

★리스트의 슬라이싱 

 

★리스트 연산자

리스트 더하기(+)

리스트 반복하기(*)

 

☆리스트 연산 오류

정수인 a[2]의 값인 3과 문자열인 hi를 더해 "3hi"를 출력시키게 하기 위해서는 a[2]를 문자열로 바꿔줘야 한다.

그렇지 않으면 (TypeError) 발생

 

★리스트의 수정,변경과 삭제

 

★a[1:2]=['a','b','c']수정과 a[1]=['a','b','c']수정은 다르다!.

a[1:2]는 a[1]에서 a[2]사이의 리스트를 바꾼다는 말이고

a[1]는 리스트 a의 두번째 요소를 바꾼다는 말이므로 다르다.

 

★리스트 관련 함수들

리스트에 요소 추가(append)

리스트 정렬(sort)

리스트 뒤집기(reverse)

위치 반환(index)

리스트에 요소 삽입(insert)

리스트 요소 제거(remove)

리스트 요소 끄집어내기(pop)

리스트에 포함된 요소 개수 세기(count)

리스트 확장(extend)

 

 

remove - 리스트의 첫 번째로 나오는 x를 삭제하는 함수

pop() - 리스트의 맨 마지막 요소를 돌려 주고 그요소는 삭제하는 함수

pop(x) - 리스트의 x번째 요소를 돌려주고 그요소는 삭제하는 함수

삭제할때 del , remove , pop

 

리스트에 포함된 요소x의 개수 세기(count)

count(x) - 리스트 내에 x가 몇개 있는지 조사해 그 개수를 돌려주는 함수

 

리스트 확장(extend(

extend(x) - x에는 리스트만 올수 있으며 원래의 a리스트에 x리스트를 더하게 된다.

 

실습

['Life','is',too','short']라는 리스트를 Life is too short라는 문자열로 만들어 출력하라

 

★튜플?

- 리스트와 비슷하지만 2가지 차이점이 있다.

- 리스트는 []으로 둘러싸지만 튜플은 ()으로 둘러싼다.

- 리스트는 그 값의 생성,삭제,수정이 가능 하지만 튜플은 안된다.

 

튜플 요소값 삭제,변경 시 오류

 

튜플의 인덱싱과 슬라이싱, 더하기와 곱하기

 

실습

(1,2,3)이라는 튜플에 4라는 값을 추가해 (1,2,3,4)처럼 출력하라

 

'Python > Python' 카테고리의 다른 글

Python-조건문(if문),반복문  (0) 2017.06.02
Python-딕셔너리,집합(자료형)  (0) 2017.05.30
Python-숫자형,문자열,자료형  (0) 2017.05.28
Python-연산자,변수,자료형,git  (0) 2017.05.21
Python-환경구성 맛보기  (0) 2017.05.20

 

★숫자형

복소수.real=실수 부분 리턴

복소수.imag=허수 부분 리턴

복소수.conjugate()=켤레복소수 리턴

 

켤레 복소수? 부호를 바꾼 복소수

 

abs(복소수)=절댓값 리턴

 

★문자열 자료형

문자열(string)- 문자 단어등으로 구성된 문자들의 집합

  - 따옴표로 둘러싸여 있으면 모두 문자열

-큰따옴표(")

-작은따옴표(')

-큰따옴표 연속3개(""")

-작은따옴표 연속3개(''')

 

문자열 안에 포함

-작은 따옴표 포함시 큰따옴표로,큰따옴표 포함시 작은따옴표로 묶어주고 백슬래시(\n)를 이동해 둘다

포함 시킬수 있다.

 

여러 줄인 문자열을 변수에 대입

줄바꾸기(\n)

print( ) 에 변수를 넣어야 정확한 값이 나온다.

 

연속된 작은 따옴표 3개 (''')또는 큰 따옴표(""")이용

''' 사용은 공백 한칸씩 띄어주는 것 확인

 

★문자열 연산하기

문자열 더해서 연결하기

문자열 곱하기

 

★문자열 인덱싱과 슬라이싱

인덱싱(indexing):무엇인가를 '가리킨다'

 

슬라이싱(slicing):무엇인가를 '잘라낸다'

>>> a[0] + a[1:6] + a[6: ]
'I love python'

 

실습) 'pithon'이라는 문자열을 'python'으로 바꾸기

슬라이싱으로 완성 시켜야 된다.

 

★문자열 포매팅(Formatting)

문자열 내의 특정한 값을 바꿔야 할 경우 사용. 문자열내에 어떤 값을 삽입 하는 방법

 

2개이상 값넣기

 

★문자열 포맷 코드

 

★포맷 코드와 숫자 함께 사용하기

정렬과 공백

"%10s" : 전체 길이가 10 인 공간에서 오른쪽 정렬

"%-10s" : 전체 길이가 10 인 공간에서 왼쪽 정렬

소수점 표현하기

 

★문자열 관련 함수들

1.문자 개수 세기(count)

 

2.위치 알려주기(find)

처음 나온 위치를 반환

존재하지 않는다면 -1을 반환

 

3.위치 알려주기(index)

존재 하지 않는다면 오류 발생

 

4.문자열 삽입(join)

5.대문자로 변환(upper)

6.소문자로 변환(lower)

7.왼쪽 공백 지우기(lstrip)

 

8.오른쪽 공백 지우기(rstrip)

9.양쪽 공백 지우기(strip)

10.문자열 나누기(split)

 

11.문자열 바꾸기(replace)

 

★실습

1. 주민번호가 849213-2014242 일때 생년원일과 그뒤 숫자 부분을 나누어 출력하라

2. 홍길동(881322-1023232)을 성명, 주민번호로 구성되는 리스트를 만들고

성별을 체크하여 추가해 출력하라.

 

3. [1,2,3,4]라는 리스트를 [4,3,2,1]로 변경해라

'Python > Python' 카테고리의 다른 글

Python-딕셔너리,집합(자료형)  (0) 2017.05.30
Python-리스트,튜플(자료형)  (0) 2017.05.29
Python-연산자,변수,자료형,git  (0) 2017.05.21
Python-환경구성 맛보기  (0) 2017.05.20
뇌를자극) 수 텍스트와 비트1  (0) 2017.03.11

★bash script 작성시 #!/bin/bash 쓰는 이유

- 쉘은 여러가지가 있다. sh,bash,csh, 등등 스크립트를 어떤 쉘로 작성하겠다고 설정.

 

★Webhard

- 인터넷의 속도가 빨라지면서 사용자들은 usb나 CD/DVD를 사용하는 것보다 인터넷에 파일을

저장하고 보관하는 기능을 원하게 되었고, 이러한 기능을 해주는 것은 웹하드 라 불른다

- 오픈소스 AjaXplorer(Pydio)를 사용해 사용자의 서버 또는 클라우드에서 실행되는 파일공유 및

동기화 소프트웨어를 통해 구성

- 사용자는 자신의 계정이 있고 인터넷이 연결된 곳이 라면 어느곳이든 웹 브라우저로 접속해 자신의

파일을 다운로드 하거나 업로드 할수 있다.

 

★쉘 스크립트(shell script)

- 텍스트로 작성된 프로그램으로 한줄씩 순차적으로 읽어 실행되도록 작성된 프로그램

 

yum -y install gcc   //컴파일러 패키지 설치

vi ~/.vimrc

 

set number      //행번호 출력

set tabstop=4     //탭의 공백 문자개수를 4개로 지정

set shiftwidth=4    //탭 이동시 사용할 공백문자를 지정하는 옵션

set smartindent   //엔터를 입력하여 개행시 자동으로 들여쓰기 옵션

set cindent    //c언어 코드 작성시 c문법에 맞게 들여쓰기 옵션

 

 

vi /etc/passwd

자동 set number가 작동 확인

 

★C언어 vs 쉘 스크립트

 

cd /

mkdir /shell_script

cd shell_script/

vi c-style-sourc.c    //c언어 테스트 파일 생성

 

vi shell-style.sh     //확장자는 상관이 없지만 관례적으로.sh사용

!/bin/bash

// shebang : 스크립트의 맨 처음에 배쉬를 사용하겠다는 의미, 스크립트를 실행시켜줄 프로그램의

경로를 커널에게 전달하는 역할

echo "Hello Linux"

 

gcc -o [컴파일 결과] [컴파일 대상]

gcc -o c-style-compile.c c-style-source.c    //컴파일

ll

./c-style-compile.c

Hello Linux  //결과 확인

 

chmod +x shell-style.sh

./shell-style.sh          //실행권한x필요

sh ./shell-style.sh      //실행권한x 없이 실행

 

c언어로 작성된 프로그램은 컴파일하여 기계어로 변환된 목적파일로 만들어 준뒤 링크과정을

거치고 실행권한x가 있어야만 실행이 가능하지만 쉘 스크립트로 작성된 프로그램은 실행권한만 주면된다

.sh 확장자를 가진 파일은 실행권한이 없고 컴파일시 허가거부 확인

 

- c언어로 작성된 프로그램은 vi cat같은 명령어로 내용을 확인 할 수없는 바이너리 구조 변형되지만 쉘 스크립트

는 파일의 변환과정이 없다.

- c언어로 작성된 프로그램은 기계어로 변환되었기 때문에 커널에 의해 실행되지만 쉘 스크립트(bash,sh,ksh,zsh,bsh)

는 쉘이 한줄씩 읽어서 실행

 

★쉘 스크립트 문법 확인

sh -n [파일명]

vi first_script.sh

chmod +x first_script.sh

sh first_script.sh

 

vi second_script.sh

-echo 명령어 이후에 " " 큰 따옴표 안에서 백쿼터(' ')를 사용하여 명령어 사용이 가능하다.

 

컴파일 확인

 

★Read 명령어

-파일이나 입력한 문자열을 읽을때 사용한다.

-사용자가 enter 키를 입력할때 까지 프로그램을 중지시킨다.

 

Read 명령어 옵션

read answer        //한 라인을 읽고 읽은 내용을 answer변수의 값으로 할당

read first last      //한 라인을 읽고, 공백 또는 newLine을 기준으로 첫번째 단어는 first변수의 값

으로 두번째 단어는 last변수의 값으로 할당

read       //한 라인을 읽고,REPLY 변수(내장/예약되어있는 변수)의 값으로 할당

read -a array        //array 이름으로 된 배열의 단어 목록을 읽는다.

read -e    //대화형 쉘에 사용

read -p prompt   //prompt출력하고 입력을 기다리고 입력 내용을 REPLY변수에 저장

read -r line     //백 슬래쉬 포함하는 입력을 허용

 

vi question_script.sh

 

sh question_script.sh   //컴파일

 

★case~esac문 사용

-여러가지 경우의 수가 있을경우 사용

 

vi case.sh

#[인자] == stop 과 같을때 아래 명시한 문장 실행

 

 

★자동으로 본딩해주는 스크립트

★과정

1. 네트워크 카드 추가

2. ifcfg-eth0, ifcfg-eth1, ifcfg-bond0 파일 생성

3. /etc/modprobe.d/bonding.conf 파일 생성

4. 본딩 적용

5. 네트워크 재시작

6. 설정 확인

7. 본딩 테스트

 

★구성

 

테스트용 디렉토리 및 파일준비

mkdir /bonding_script

yum -y install lrzsz

설치 후 공유 폴더 두개(MASTER, SLAVE)를 해당 디렉토리로 이동

 

vi bonding.sh

 

 

★VMware 터미널에서 실행

 

ifconfig 본딩확인

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

xshell/ IPTABLE  (0) 2017.05.29
xshell/ WEB,APM,XE  (0) 2017.05.21
xshell/ PXE & KICKSTART  (0) 2017.05.15
xshell/ NFS  (0) 2017.05.14
xshell/ SAMBA  (0) 2017.05.14

+ Recent posts