Python은 Linux 시스템 관리 작업을 자동화하기에 최적의 프로그래밍 언어입니다. 방대한 라이브러리 생태계를 갖추고 있어 다양한 작업의 효율성을 크게 높일 수 있습니다. 이 글에서 소개하는 예제들을 활용하면 Linux 시스템 명령 실행, 파일 및 디렉터리 관리, 네트워킹 작업 수행, 인증 프로세스 자동화까지 단 몇 초 만에 처리할 수 있습니다.
Python이란 무엇인가?
Python은 범용 프로그래밍 언어로 가장 잘 알려져 있습니다. 1980년대 후반부터 1990년대 초반에 걸쳐 네덜란드 출신 컴퓨터 과학자 귀도 반 로섬(Guido van Rossum)이 개발했으며, 동적 타이핑 언어이자 'ABC' 프로그래밍 언어의 후속작으로 설계되었습니다.
오늘날 Python은 웹 개발부터 복잡한 수학·과학 계산에 이르기까지 폭넓은 분야에서 활용되는 세계적으로 가장 인기 있는 프로그래밍 언어 중 하나로 자리 잡았습니다. 우아한 문법과 비교적 쉬운 학습 곡선 덕분에 초보자와 전문가 모두에게 사랑받고 있습니다.
Linux에 Python 설치하기
많은 Linux 배포판에는 Python이 기본적으로 설치되어 있습니다. 시스템에 Python 3가 설치되어 있는지 확인하려면 python3 명령어에 --version 플래그를 붙여 실행해 보세요.
python3 --version
Python이 설치되어 있다면 위 명령어는 현재 설치된 Python 버전을 화면에 출력합니다.
Ubuntu나 Debian 계열 시스템에 Python을 설치하려면 다음 명령어를 사용합니다.
sudo apt update && sudo apt upgrade -y sudo apt install python3.10
또는 Python 공식 사이트에서 '.tgz' 또는 '.xz' 압축 파일 형태로 직접 다운로드하여 설치할 수도 있습니다.
'os' 모듈 활용하기
Linux 시스템 관리자에게 가장 유용한 Python 라이브러리 중 하나가 바로 'os' 모듈입니다. 디렉터리와 파일 처리를 비롯해 다양한 작업을 자동화할 수 있으며, 시스템 명령 실행도 가능합니다.
예를 들어 이 모듈을 사용하면 새 디렉터리를 손쉽게 생성할 수 있습니다.
#OS 모듈 불러오기
import os
#새 디렉터리 이름
dir_name = "example"
try:
#새 디렉터리 생성
os.mkdir(dir_name)
#디렉터리가 성공적으로 생성된 경우 결과 출력
print(f"Directory '{dir_name}' created successfully")
#디렉터리가 이미 존재하는 경우 결과 출력
except FileExistsError:
print(f"Directory '{dir_name}' already exists")
반대로 모듈을 사용해 디렉터리를 삭제할 수도 있습니다.
#OS 모듈 불러오기
import os
#삭제할 디렉터리 이름
dir_name = "example"
try:
#디렉터리 삭제
os.rmdir(dir_name)
#디렉터리가 성공적으로 삭제된 경우 결과 출력
print(f"Directory '{dir_name}' deleted successfully")
#디렉터리가 존재하지 않는 경우 결과 출력
except FileNotFoundError:
print(f"Directory '{dir_name}' doesn't exist")
파일과 디렉터리의 이름을 변경하는 것도 간단합니다.
#OS 모듈 불러오기
import os
#현재 디렉터리 또는 파일 이름
current_name = "example"
new_name = "example2.0"
try:
#디렉터리 또는 파일 이름 변경
content = os.rename(current_name, new_name)
#변경 성공 메시지 출력
print(f"Directory/File '{current_name}' was successfully renamed to '{new_name}'")
#디렉터리나 파일이 존재하지 않으면 오류 메시지 출력
except FileNotFoundError:
print(f"Directory/File '{current_name}' doesn't exist")
'os' 모듈을 사용하면 파일도 손쉽게 삭제할 수 있습니다.
#OS 모듈 불러오기
import os
#삭제할 파일 이름
file_name = "example.txt"
try:
#파일 삭제
os.remove(file_name)
#파일이 성공적으로 삭제된 경우 결과 출력
print(f"File '{file_name}' deleted successfully")
#파일이 존재하지 않는 경우 결과 출력
except FileNotFoundError:
print(f"File '{file_name}' doesn't exist")
현재 작업 중인 디렉터리(working directory)도 간단히 확인할 수 있습니다.
#OS 모듈 불러오기
import os
try:
#현재 작업 디렉터리 가져오기
cwd = os.getcwd()
#현재 작업 디렉터리 이름 출력
print(cwd)
#오류 발생 시 출력
except:
print("An error occurred")
특정 디렉터리 안의 파일이나 하위 디렉터리 같은 내용물도 쉽게 조회할 수 있습니다.
#OS 모듈 불러오기
import os
#디렉터리 이름
dir_name = "example"
try:
#디렉터리 내용 가져오기
content = os.listdir(dir_name)
#디렉터리 내용 출력
print(content)
#디렉터리가 존재하지 않으면 오류 출력
except FileNotFoundError:
print(f"Directory '{dir_name}' doesn't exist")
모듈을 사용해 현재 로그인한 사용자 이름을 출력할 수도 있습니다.
#OS 모듈 불러오기
import os
try:
#현재 사용자 이름 가져오기
user = os.getlogin()
#현재 사용자 이름 출력
print(user)
#오류 발생 시 메시지 출력
except:
print("An error occurred")
뿐만 아니라 Linux 셸 명령어도 모듈을 통해 실행할 수 있습니다.
#OS 모듈 불러오기
import os
#실행할 셸 명령어
command = "sudo apt update && sudo apt upgrade -y"
try:
#시스템 명령어 실행
result = os.system(command)
#명령어 실행 결과 출력
print(result)
#오류 발생 시 메시지 출력
except:
print("An error occurred")
'socket' 모듈로 네트워킹 작업 수행하기
Python에는 다양한 네트워킹 작업을 수행하고 포트 스캐너, 게임 서버처럼 복잡한 네트워크 유틸리티를 만들 수 있도록 설계된 전용 모듈이 있습니다. 바로 'socket' 모듈인데, 이 모듈은 시스템에서 기본적인 네트워킹 작업을 처리하는 데에도 활용할 수 있습니다.
예를 들어 자신의 시스템 IP 주소와 호스트명(hostname)을 확인할 수 있습니다.
#socket 모듈 불러오기
import socket
try:
#호스트명 가져오기
host = socket.gethostname()
#호스트의 IP 주소 가져오기
ip = socket.gethostbyname(host)
#IP 주소 출력
print(f"IP address: {ip}")
#호스트명 출력
print(f"Hostname: {host}")
#오류 발생 시 메시지 출력
except:
print("An error occurred")
웹사이트의 IP 주소를 조회하는 것도 가능합니다.
#socket 모듈 불러오기
import socket
try:
#조회할 도메인
domain = "duckduckgo.com"
#도메인의 IP 주소 가져오기
ip = socket.gethostbyname(domain)
#IP 주소 출력
print(f"IP address: {ip}")
#오류 발생 시 메시지 출력
except:
print("An error occurred")
Paramiko로 SSH 서버 접속 및 명령 실행 자동화하기
SSH 서버에 로그인하고 원격으로 명령을 실행하는 과정을 자동화하고 싶다면 'Paramiko'라는 Python 라이브러리가 매우 유용합니다.
먼저 Python의 pip3 패키지 관리자를 사용해 라이브러리를 설치합니다.
pip3 install paramiko
설치가 완료되면 아래 코드로 SSH 서버에 접속하여 명령을 실행할 수 있습니다.
#Paramiko 라이브러리 불러오기
import paramiko
#IP 주소와 접속 정보 지정
ip = '127.0.0.1'
port = 22
user = 'example'
password = 'example'
command = "uname -a"
try:
#Paramiko 클라이언트 초기화
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#SSH 서버에 연결
ssh.connect(ip, port, user, password)
#시스템에서 명령어 실행
stdin, stdout, stderr = ssh.exec_command(command)
#명령어 실행 결과 출력
print(stdout.read().decode())
#오류 발생 시 메시지 출력
except:
print("An error occurred")
자주 묻는 질문
1. 이 모듈과 라이브러리를 사용하려면 Python 3가 꼭 필요한가요?
대부분의 모듈과 라이브러리는 Python 2에서도 작동하지만 문법 차이가 있어 이 글의 코드 스니펫은 그대로 실행되지 않습니다. 일부 수정을 거치면 Python 2에서도 동작하도록 만들 수 있지만, Python 2는 이미 지원이 종료된 구버전이므로 Python 3를 사용하는 것이 좋습니다.
2. 'os'와 'socket' 모듈을 별도로 설치해야 하나요?
일반적으로는 필요 없습니다. 대부분의 Python 설치 환경에는 이 두 모듈이 기본으로 포함되어 있어 별도 설치 없이 바로 사용할 수 있습니다.
3. Paramiko로 Unix가 아닌 시스템에도 로그인할 수 있나요?
Paramiko 개발자에 따르면 현재 이 라이브러리는 Unix 계열이 아닌 시스템에는 SSH로 로그인할 수 없습니다.