기본 콘텐츠로 건너뛰기

리눅스 커널 모듈 관리: 로드, 언로드 및 예제

리눅스에서의 커널 모듈 관리하기 안녕하세요, mj입니다. 오늘은 리눅스에서 커널 모듈을 어떻게 관리하는지에 대해 알아보겠습니다. 커널 모듈은 리눅스 커널의 기능을 확장하는 중요한 요소입니다. 이 글에서는 커널 모듈을 로드하고, 언로드하며, 몇 가지 유용한 예제를 통해 사용 방법을 소개하겠습니다. 커널 모듈이란? 커널 모듈은 리눅스 커널의 기능을 동적으로 추가할 수 있는 코드 조각입니다. 이를 통해 시스템의 성능을 최적화하거나 새로운 하드웨어를 지원할 수 있습니다. 커널 모듈 로드하기 커널 모듈을 로드하는 명령어는 modprobe 와 insmod 입니다. 두 명령어의 차이점은 다음과 같습니다: modprobe : 의존성을 자동으로 처리하여 모듈을 로드합니다. insmod : 특정 모듈만 로드하며, 의존성을 수동으로 관리해야 합니다. 예제: 모듈 로드 다음은 dummy 라는 테스트용 모듈을 로드하는 예제입니다. sudo modprobe dummy 결과: dummy: loaded successfully. 커널 모듈 언로드하기 모듈을 언로드할 때는 rmmod 와 modprobe -r 를 사용합니다. modprobe -r 는 의존성을 고려하여 모듈을 언로드합니다. 예제: 모듈 언로드 다음은 dummy 모듈을 언로드하는 예제입니다. sudo rmmod dummy 결과: dummy: unloaded successfully. 커널 모듈 상태 확인하기 현재 로드된 모듈을 확인하려면 lsmod 명령어를 사용합니다. 예제: 로드된 모듈 확인 다음은 현재 로드된 모듈을 확인하는 예제입니다. lsmod | grep dummy 결과: dummy 16384 0 모듈 정보 확인하기 모듈에 대한 자세한 정보를 확인하려면 modinfo 명령어를 사용합니다. 예제: 모듈 정보 확인 다음은 dummy 모듈의 정보를 확인하는 예제입니다. modinfo dummy 결과: filename: ...

MJ.제라의 요일 공식 스크립트(bash, batch, powershell)

안녕하세요, MJ 입니다.

년-월-일 의 정보로 요일을 확인할 수 있는 방법 입니다.

1582년10월 15일부터는 그레고리 력으로 우리가 사용하는 서기에 적용되는 윤년/평년 확인방법입니다.

다음 3가지를 확인하여 윤년과, 평년을 미리 알 수 있습니다.
  1. 년수 4로 나누었을 때 나머지가 없는 해를 윤년으로 함.
  2. 위의 윤년중에서 100으로 나누었을 때 나머지가 없을때는 평년으로 함.
  3. 다시 400으로 나누었을 때 나머지가 없는 해는 윤년으로 함

3가지 조건 이지만 의외로 복잡합니다.

 

아뭏든 날짜를 넣으면 요일이 출력이 된다는 것입니다.

아래 스크립트는 단순히 입력 받은 날짜가 무슨 요일인지 영어로 토해내도록 작성되었습니다.


다른 스크립트 또는 프로그램에서 특정일자의 요일을 확인해야 하는 로직이 존재하는 경우,

OS 스크립트를 수행하여 결과를 받도록 하면, 추가로 작성해야 하는 코드의 양을 줄일 수 있어 활용하기에 따라 경제적으로 이득을 취할 수 있습니다.

 * 활용 예시 *

로또 API 를 이용해서 모든 회차의 당첨번호를 가져올 수 있지만, API 요청으로 얻어지는 정보는 무제한으로 제공되지 않고 대부분 하루동안 N회 가져올 수 있습니다. 그래서 최초에 한번 가져온 데이터를 별도 파일이나 DB에 저장을 하고, 당첨번호 목록을 조회 할 때에 내가 저장해둔 파일 또는 DB에서 검색해서 확인하게 됩니다. (무제한 접근가능하다고 하여도 속도가 훨씬 빠릅니다.) 하지만 조회를 시도하는 시점에서 오늘이 토요일이라면, 그리고 당첨번호 발표 시간이 지났고 동행복권 사이트에 당첨번호 정보가 등록이 되었다면 이 새로운 회차의 당첨번호는 API요청을 해서 가져와야 나의 저장된 데이터가 업데이트 될 수 있을 것 입니다. 저는 이 요일을 확인하도록 해서 이 스크립트를 수행하여 오늘이 토요일이 아닌지 매번 확인을 하도록 하고, 발표시간이 지났다면 API 한번 찔러보는 방법으로 하루동안 아무리 많이 찔러도 10번도 안찌르는것 같습니다.저는 파이썬에서 OS의 명령어를 수행하고 결과를 받아오도록 작성하였고, 이 외에도 요일의 체크가 필요한 경우에 여러 프로그램이나 스크립트에서 수행하도록 할 수 있기때문에 은근히 활용도가 높다고 볼 수 있겠습니다.


 배치와 파워쉘 환경은 제가 익숙하지 않아, 예외처리 내용이 좀 부족합니다.
실행 방법을 잘 확인 해 주세요.

스크립트는 다음 3가지 버전으로 작성되었습니다.

  • Bash 스크립트(Linux)
  • 배치 스크립트 (windows)
  • 파워쉘 스크립트(windows)

    사용하시는 OS에서 지원하는 스크립트를 작성하여 사용할 수 있습니다.

bash 스크립트

#!/bin/bash
 
if [ ${#} -ne 1 ] && [ ${#} -ne 0 ];then
    echo "Usage: ${0} yyyy-mm-dd"
    exit 1
fi

if [ ${#} -eq 1 ];then
    INPUT=${1}
elif [ ${#} -eq 0 ];then
    echo -n "please input date (format: yyyy-mm-dd): "
    read INPUT
fi

wrong_bit=0
tmp_y=$(expr substr $INPUT 1 4)
tmp_m=$(expr substr $INPUT 6 2)
tmp_d=$(expr substr $INPUT 9 2)
seq $tmp_y $tmp_y &> /dev/null
if [ $? -ne 0 ];then
    wrong_bit=$(expr ${wrong_bit} + 4)
fi
seq $tmp_m $tmp_m &> /dev/null
if [ $? -ne 0 ];then
    wrong_bit=$(expr ${wrong_bit} + 2)
fi
seq $tmp_d $tmp_d &> /dev/null
if [ $? -ne 0 ];then
    wrong_bit=$(expr ${wrong_bit} + 1)
fi
if [ ${wrong_bit} -ne 0 ];then
    if   [ ${wrong_bit} -eq 7 ];then
        echo 'Wrong Your Input Number of Year, Month, Day.'
    elif [ ${wrong_bit} -eq 6 ];then
        echo 'Wrong Your Input Number of Year, Month.'
    elif [ ${wrong_bit} -eq 5 ];then
        echo 'Wrong Your Input Number of Year, Day.'
    elif [ ${wrong_bit} -eq 4 ];then
        echo 'Wrong Your Input Number of Year.'
    elif [ ${wrong_bit} -eq 3 ];then
        echo 'Wrong Your Input Number of Month, Day.'
    elif [ ${wrong_bit} -eq 2 ];then
        echo 'Wrong Your Input Number of Month.'
    elif [ ${wrong_bit} -eq 1 ];then
        echo 'Wrong Your Input Number of Day.'
    fi
    exit 1
fi

 
getDay()
{
yy=$(expr substr $1 1 4)
mm=$(expr substr $1 6 2)
dd=$(expr substr $1 9 2)
if [ $mm = "01" ] || [ $mm = "02" ]; then
yy=$(expr $yy - 1)
mm=$(expr $mm + 12)
fi
yC=$(expr $yy / 100)
yY=$(expr $yy % 100)
 
# 제라의 요일 공식
num=$(echo $1 | awk '{ printf("%d", ((21*'$yC'/4)+(5*'$yY'/4)+(26*('$mm'+1)/10)+'$dd'-1) % 7); }')
 
case $num in
0) echo 'Sun' ;;
1) echo 'Mon' ;;
2) echo 'Tue' ;;
3) echo 'Wed' ;;
4) echo 'Thu' ;;
5) echo 'Fri' ;;
6) echo 'Sat' ;;
esac
}
getDay ${INPUT}

배치 스크립트

@echo off
:: 인수로 연도(4자리)-월(2자리)-일(2자리) 를 입력합니다.
:: 인수가 없으면 입력을 받습니다.
 
set /a _argc=0
 
for %%i in (%*) do (set /A _argc+=1)
rem echo %_argc%
 
if %_argc% EQU 0 (
    set /p var="please input date (format: yyyy-mm-dd):"
)else if %_argc% EQU 1 (
    set var=%1%
) else (
    echo "Usage: %0 yyyy-mm-dd"
    goto end
)
set /a "yyyy=%var:~0,4% %% 99999999" 2> nul
 
if        %var:~5,2% EQU 01 (set /a mm=1
)else if  %var:~5,2% EQU 02 (set /a mm=2
)else if  %var:~5,2% EQU 03 (set /a mm=3
)else if  %var:~5,2% EQU 04 (set /a mm=4
)else if  %var:~5,2% EQU 05 (set /a mm=5
)else if  %var:~5,2% EQU 06 (set /a mm=6
)else if  %var:~5,2% EQU 07 (set /a mm=7
)else if  %var:~5,2% EQU 08 (set /a mm=8
)else if  %var:~5,2% EQU 09 (set /a mm=9
)else (set /a mm=%var:~5,2%)
 
if       %var:~8,2% EQU 01 (set /a dd=1
)else if %var:~8,2% EQU 02 (set /a dd=2
)else if %var:~8,2% EQU 03 (set /a dd=3
)else if %var:~8,2% EQU 04 (set /a dd=4
)else if %var:~8,2% EQU 05 (set /a dd=5
)else if %var:~8,2% EQU 06 (set /a dd=6
)else if %var:~8,2% EQU 07 (set /a dd=7
)else if %var:~8,2% EQU 08 (set /a dd=8
)else if %var:~8,2% EQU 09 (set /a dd=9
)else (set /a dd=%var:~8,2%)
 
if %mm% EQU 1 (set /a mm=%mm%+12 2>nul
    set /a yyyy=%yyyy%-1 2>nul
)
if %mm% EQU 2 (set /a mm=%mm%+12 2>nul
    set /a yyyy=%yyyy%-1 2>nul
)
 
set /a a=%yyyy:~0,2%
if       %yyyy:~2,2% EQU 01 (set /a b=1
)else if %yyyy:~2,2% EQU 02 (set /a b=2
)else if %yyyy:~2,2% EQU 03 (set /a b=3
)else if %yyyy:~2,2% EQU 04 (set /a b=4
)else if %yyyy:~2,2% EQU 05 (set /a b=5
)else if %yyyy:~2,2% EQU 06 (set /a b=6
)else if %yyyy:~2,2% EQU 07 (set /a b=7
)else if %yyyy:~2,2% EQU 08 (set /a b=8
)else if %yyyy:~2,2% EQU 09 (set /a b=9
)else (set /a b=%yyyy:~2,2%)
set /a c=%mm%
set /a d=%dd%
 
::echo %a%
::echo %b%
::echo %c%
::echo %d%
 
set /a dname=((21*%a%/4)+(5*%b%/4)+(26*(%c%+1)/10)+%d%-1)%%7
if %dname% EQU 0 (echo 'Sun')
if %dname% EQU 1 (echo 'Mon')
if %dname% EQU 2 (echo 'Tue')
if %dname% EQU 3 (echo 'Wed')
if %dname% EQU 4 (echo 'Thu')
if %dname% EQU 5 (echo 'Fri')
if %dname% EQU 6 (echo 'Sat')
 
:: pause
 
:end

파워쉘 스크립트

if ( $args.Count -ne 1 ) {
    echo -n "Usage: .\$($MyInvocation.MyCommand.Name) yyyy-mm-dd"
    exit 1
}
 
$input_date=$args[0]
 
$yyyy=$input_date.split('-')[0]
$mm=$input_date.split('-')[1]
$dd=$input_date.split('-')[2]
 
$mod=$false
if( [int]$mm -eq 1 ) {
    $mod = $true
} elseif( [int]$mm -eq 2 ) {
    $mod = $true
}
 
if ( $mod -eq $true ) {
    $mm = [int]$mm + 12
    $yyyy = [int]$yyyy - 1
}
 
 
$a = [int]($yyyy / 100)
$b = [int]($yyyy % 100)
$c = [int]$mm
$d = [int]$dd
 
$dname=[int]((21*$a/4)+(5*$b/4)+(26*($c+1)/10)+$d-1)%7
 
switch($dname) {
    0 { $toDay = 'Sun' }
    1 { $toDay = 'Mon' }
    2 { $toDay = 'Tue' }
    3 { $toDay = 'Wed' }
    4 { $toDay = 'Thu' }
    5 { $toDay = 'Fri' }
    6 { $toDay = 'Sat' }
}
 
echo $toDay
 
 
 

댓글

가장 많이 본 글

5. 버추얼박스:설정 (+네트워크의 종류 설명)

안녕하세요 , MJ 입니다 .   우리가 실습을 하는데에 필요한 버추얼박스의 설정에 대해 설명을 합니다 .     버추얼 박스의 설정에는 종류별로 메뉴가 구분되어있습니다 . 1-1. 환경설정 1-2. 네트워크 설정 1-3. 미디어 설정       다른 설정도 존재하지만 , 필요한 일이 없을것이 예상되고 , 위 3 가지 설정에 대해서만 알고 계신다면 버추얼 박스로 실습을 하는데에 아무런 지장이 없고 또 취업을 하신 뒤에 실무에 가셔서도 문제가 될 것이 없습니다 .   환경설정 부터 확인하겠습니다 . 1-1. 환경설정 : 우리가 알아야 편한 내용은 2 가지가 있는데 VM 의 기본 저장경로 설정 " 파일 (F)" 의 환경설정 (P) … [ 단축키 : Ctrl+G] 을 누르면 환경설정 창이 보이고 , 제일먼저 확인되는 기본 머신 폴더 (M) 입니다 . VM 을 저장 할 경로를 지정하는 것인데 VM 은 가상 머신으로 디스크의 용량과는 상관없이 , 가상 컴퓨터의 정보가 저장되는 것으로 , 텍스트 파일형태로 저장되어있고 , 그 내용에는 CPU 를 몇개 사용하도록 되어있는지 , 메모리는 얼마만큼을 할당하도록 되어있는지 , 네트워크 인터페이스는 몇 개가 어떻게 설정되어있는지 ... 등 가상의 컴퓨터를 정의하는 내용의 파일이 저장되는 경로가 되고 ,   디스크 파일은 별도 미디어 설정에서 관리가 되지만 VM 을 생성하는 과정에서 만든 디스크는 VM 저장경로에 함께 생성 되어있어 사용자가 파일탐색기로 경로를 찾아가보면 파일의 사이즈로 아 이것이 디스크 파일인가보구나 하고 알 수 있습니다 .( 용량이 크고 ...

MJ. 로또의 회차별 당첨번호 API 확인 (예제포함)

안녕하세요, MJ 입니다.   로또 당첨번호를 확인하기위해 동행복권 사이트를 찾아 가거나, 포털사이트에서 검색을 할 수 있지만, 다음 주소를 브라우저에 붙여넣거나, curl 명령을 이용하여 터미널에서 손쉽게 확인할 수 있는 방법이 있어 소개를 드리려고 합니다.     < URL> https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo= < 회차번호 >     - API 주소 활용 방법 브라우저에 URL 입력하여 확인 .           >> 인터넷 주소창에 URL 을 입력       ( 윈도우 ) cmd / ( 리눅스 ) bash 터미널에서 curl 을 사용하여 확인 .( 예 : 123 회차 ) >> curl " https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo= 123 " <cmd>   <bash>         python/java/c 등 코드를 만들어서 확인 . >> 코드를 짜서 확인하는 것이 , 데이터를 가공하기도 좋고 , 앞으로 출현할 숫자를 분석하기도 좋지만 , 자신이 원하는 대로 데이터를 가공하기 위해 시간과 노력의 투자가 필요함 .       [ (API 결과 예시 ) 123 회차 조회결과 ] >> json 형식으로 공백 , 줄바꿈이 없이 순서도 제멋대로 확인되지만 (브라우저나 터미널에서 확인하면), 다음과 같은 데이터가 확인됨 .   <확인한 정보 줄맞춰봄> #######...