운영체제 시설

운영체제 시설 (Operating System Facilities)

os 라이브러리는 운영체제와 상호작용하는 함수를 제공해요. 파일 조작, 날짜/시간 처리, 환경 변수 접근, 명령 실행 등을 다뤄요. 대부분의 함수는 C 표준 라이브러리의 대응 함수와 밀접한 관계가 있어요.

os.clock

os.clock ()

프로그램이 사용한 CPU 시간을 초 단위(실수)로 반환해요. 경과 시간 측정에 유용해요 (운영체제/플랫폼에 따라 절대 시각이 아님).

os.date

os.date ([format [, time]])

날짜/시간을 형식화된 문자열 또는 테이블로 반환해요.

  • format이 없거나 "%c"면 현재 날짜/시간을 기본 형식 문자열로 반환해요.
  • format"*t"면 날짜를 테이블로 반환해요. 테이블은 year, month, day, hour, min, sec, wday, yday, isdst 필드를 가져요.
  • format"!"로 시작하면 UTC(협정 세계시)를 사용해요.
  • time은 UNIX 타임스탬프(os.time 결과)예요. 없으면 현재 시각.
  • format%Y, %m, %d 같은 C의 strftime 지시자를 사용해 형식화할 수 있어요.
print(os.date())              --> Tue Sep 22 00:00:00 2026 (예시)
print(os.date("%Y-%m-%d"))    --> 2026-09-22
local t = os.date("*t")
print(t.year, t.month, t.day)

os.difftime

os.difftime (t2, t1)

두 UNIX 타임스탬프 t2t1 사이의 시간 차이(초)를 반환해요. t2 - t1과 같아요.

os.execute

os.execute ([command])

운영체제 셸 명령 command를 실행해요.

  • command가 없으면 셸 사용 가능 여부를 나타내는 값(true 또는 nil)을 반환해요.
  • command가 있으면 명령을 실행하고, (플랫폼에 따라) 진짜 종료 상태 블록을 반환해요. 루아에서는 일반적으로 종료 상태를 나타내는 값(true, "exit", "signal", 또는 nil)을 반환해요. 상세 루아 5.4+에서는 true(성공), nil+오류, 또는 그 외로 종료 상태를 돌려줘요.
os.execute("mkdir -p build")

os.exit

os.exit ([code [, close]])

프로그램을 종료해요.

  • codetrue면 성공 상태(0), false면 실패 상태(1), 숫자면 그 코드로 종료해요.
  • close가 참이면 종료 전에 루아 상태를 닫아요 (파이널라이저 실행, 메모리 해제).
  • 기본값은 os.exit(true)이지만, close가 명시되지 않으면 상태를 닫지 않고 종료할 수도 있어요.

os.getenv

os.getenv (varname)

환경 변수 varname의 값을 반환해요. 존재하지 않으면 nil을 반환해요.

print(os.getenv("HOME"))

os.remove

os.remove (filename)

파일(또는 빈 디렉터리) filename을 삭제해요. 성공 시 true, 실패 시 nil과 오류 메시지, 그리고 OS 오류 코드를 반환해요.

os.rename

os.rename (oldname, newname)

파일이나 디렉터리 이름을 oldname에서 newname으로 바꿔요 (이동 포함). 성공 시 true, 실패 시 nil과 오류 메시지, OS 오류 코드를 반환해요.

os.setlocale

os.setlocale (locale [, category])

프로그램의 현재 로케일(locale)을 설정하고 그 이름을 반환해요 (설정 실패 시 nil). category"all", "collate", "ctype", "monetary", "numeric", "time" 중 하나예요. locale이 빈 문자열이면 환경 변수에 따라 기본값을 사용해요. 전역 설정이므로 다른 코드에 영향을 줄 수 있어요.

os.time

os.time ([table])

현재 시간을 UNIX 타임스탬프(정수 초)로 반환해요.

  • table이 없으면 현재 시각을 반환해요.
  • table이 주어지면 그 테이블(year, month, day, hour, min, sec, isdst 등)이 나타내는 날짜/시간을 타임스탬프로 해석해 반환해요.
print(os.time())                    --> 1770000000 (예시, 초)
local ts = os.time({year=2026, month=9, day=22})

os.tmpname

os.tmpname ()

임시 파일에 쓸 수 있는 고유한 파일 이름(문자열)을 반환해요. 이 이름은 현재 존재하지 않는 파일을 가리키지만, 반환만으로 생성되지는 않아요. 임시 파일에는 os.tmpname으로 이름을 얻은 뒤 직접 io.open으로 여는 방식이 흔해요. (자동 삭제를 원하면 io.tmpfile 사용)

주의사항

os 라이브러리 함수들은 플랫폼(운영체제)에 따라 동작이 달라질 수 있어요. 특히 os.execute, os.getenv, os.remove, os.rename, os.setlocale, os.tmpname 등은 호스트 OS의 기능에 의존해요. 보안이 중요한 환경(샌드박스)에서는 os 라이브러리의 일부 기능(특히 os.execute, os.exit)을 제한하는 게 좋아요.

출처: 운영체제 시설 (Operating System Facilities)

본문

날짜와 시간

os.dateos.time은 날짜/시간 변환을 다뤄요. os.time은 인간이 읽는 테이블 → 타임스탬프, os.date는 역방향 변환을 담당해요. os.date("*t")는 테이블을, 그 외 형식은 문자열을 반환해요.

프로세스 제어

os.execute로 셸 명령을, os.exit로 프로세스를 종료해요. os.clock은 CPU 사용 시간을 잰다.

파일 시스템

os.remove·os.rename은 파일 조작을, os.tmpname은 임시 파일 이름 생성을 담당해요. 실제 읽기/쓰기는 io 라이브러리에서 해요.

더 알아보기