운영체제 시설
운영체제 시설 (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 타임스탬프 t2와 t1 사이의 시간 차이(초)를 반환해요. 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]])
프로그램을 종료해요.
code가true면 성공 상태(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)을 제한하는 게 좋아요.
본문
날짜와 시간
os.date와 os.time은 날짜/시간 변환을 다뤄요. os.time은 인간이 읽는 테이블 → 타임스탬프, os.date는 역방향 변환을 담당해요. os.date("*t")는 테이블을, 그 외 형식은 문자열을 반환해요.
프로세스 제어
os.execute로 셸 명령을, os.exit로 프로세스를 종료해요. os.clock은 CPU 사용 시간을 잰다.
파일 시스템
os.remove·os.rename은 파일 조작을, os.tmpname은 임시 파일 이름 생성을 담당해요. 실제 읽기/쓰기는 io 라이브러리에서 해요.