FileTest 모듈

FileTest 모듈 (FileTest)

FileTestFile::Stat에서 쓰는 것과 비슷한 파일 테스트 연산을 구현해요. 독립된 모듈로 존재하면서도, 그 메서드들은 File 클래스에도 함께 주입돼 있어요. (주의: 이건 inclusion으로 되는 게 아니라 인터프리터가 처리해요.)

따라서 아래 메서드들은 FileTest 모듈 이름으로도, File 클래스 메서드로도 호출할 수 있어요. 대부분의 메서드는 파일 경로 문자열이나 IO 객체를 인자로 받아요.

출처: Ruby 3.3 API

본문

#blockdev?

blockdev?(filepath)true 또는 falsefilepath가 블록 디바이스를 가리키면 true, 아니면 false를 돌려줘요.

File.blockdev?('/dev/sda1')       # => true
File.blockdev?(File.new('t.tmp')) # => false

#chardev?

chardev?(filepath)true 또는 falsefilepath가 문자 디바이스를 가리키면 true를 돌려줘요.

File.chardev?($stdin)     # => true
File.chardev?('t.txt')     # => false

#directory?

directory?(path)true 또는 false — 문자열 객체를 주면 path가 디렉토리(또는 디렉토리로 가는 심볼릭 링크)로 이어지는 경로면 true, 아니면 false를 돌려줘요. pathIO 객체일 수도 있어요.

File.directory?('.')              # => true
File.directory?('foo')            # => false
File.symlink('.', 'dirlink')      # => 0
File.directory?('dirlink')        # => true
File.symlink('t,txt', 'filelink') # => 0
File.directory?('filelink')       # => false

#empty?

empty?zero?의 별칭이에요.

#executable?

executable?(file_name)true 또는 false — 이름이 지정된 파일이 이 프로세스의 유효 사용자·그룹 ID에 의해 실행 가능하면 true를 돌려줘요(eaccess(3) 참고). Windows는 실행 권한을 읽기 권한과 따로 지원하지 않아요. Windows에서 파일은 .bat, .cmd, .com, .exe로 끝날 때만 실행 가능한 것으로 간주돼요. 일부 OS 수준 보안 기능 때문에 유효 사용자/그룹이 실행할 수 없는데도 true가 나올 수 있다는 점을 유의하세요.

#executable_real?

executable_real?(file_name)true 또는 false — 파일이 이 프로세스의 실제(real) 사용자·그룹 ID에 의해 실행 가능하면 true를 돌려줘요(access(3) 참고). Windows 동작은 #executable?과 같아요.

#exist?

exist?(file_name)true 또는 false — 이름이 지정된 파일이 존재하면 true를 돌려줘요. "파일이 존재한다"는 stat() 또는 fstat() 시스템 콜이 성공한다는 뜻이에요. file_nameIO 객체일 수 있어요.

#file?

file?(file)true 또는 false — 이름이 지정된 파일이 존재하고 일반(regular) 파일이면 true를 돌려줘요. fileIO 객체일 수 있어요. 심볼릭 링크를 주면 링크를 해석해서 링크가 가리키는 파일을 사용해요.

#grpowned?

grpowned?(file_name)true 또는 false — 파일이 존재하고 호출 프로세스의 유효 그룹 ID가 파일의 소유자이면 true를 돌려줘요. Windows에서는 false를 돌려줘요. file_nameIO 객체일 수 있어요.

#identical?

identical?(file_1, file_2)true 또는 false — 두 파일이 동일하면 true를 돌려줘요. file_1, file_2IO 객체일 수 있어요.

open("a", "w") {}
p File.identical?("a", "a")      #=> true
p File.identical?("a", "./a")    #=> true
File.link("a", "b")
p File.identical?("a", "b")      #=> true
File.symlink("a", "c")
p File.identical?("a", "c")      #=> true
open("d", "w") {}
p File.identical?("a", "d")      #=> false

#owned?

owned?(file_name)true 또는 false — 파일이 존재하고 호출 프로세스의 유효 사용자 ID가 파일의 소유자이면 true를 돌려줘요. file_nameIO 객체일 수 있어요.

#pipe?

pipe?(filepath)true 또는 falsefilepath가 파이프를 가리키면 true를 돌려줘요.

File.mkfifo('tmp/fifo')
File.pipe?('tmp/fifo') # => true
File.pipe?('t.txt')    # => false

#readable?

readable?(file_name)true 또는 false — 파일이 이 프로세스의 유효 사용자·그룹 ID에 의해 읽기 가능하면 true를 돌려줘요(eaccess(3) 참고). 일부 OS 보안 기능 때문에 실제로 못 읽는데 true가 나올 수 있어요.

#readable_real?

readable_real?(file_name)true 또는 false — 파일이 실제 사용자·그룹 ID에 의해 읽기 가능하면 true를 돌려줘요(access(3) 참고).

#setgid?

setgid?(file_name)true 또는 false — 파일에 setgid 비트가 설정돼 있으면 true를 돌려줘요. file_nameIO 객체일 수 있어요.

#setuid?

setuid?(file_name)true 또는 false — 파일에 setuid 비트가 설정돼 있으면 true를 돌려줘요. file_nameIO 객체일 수 있어요.

#size

size(file_name) → integer — file_name의 크기를 돌려줘요. file_nameIO 객체일 수 있어요.

#size?

size?(file_name)Integer 또는 nil — file_name이 존재하지 않거나 크기가 0이면 nil, 그 외에는 파일 크기를 돌려줘요. file_nameIO 객체일 수 있어요.

#socket?

socket?(filepath)true 또는 falsefilepath가 소켓을 가리키면 true를 돌려줘요.

require 'socket'
File.socket?(Socket.new(:INET, :STREAM)) # => true
File.socket?(File.new('t.txt'))          # => false

#sticky?

sticky?(file_name)true 또는 false — 파일에 sticky 비트가 설정돼 있으면 true를 돌려줘요. file_nameIO 객체일 수 있어요.

symlink?(filepath)true 또는 falsefilepath가 심볼릭 링크를 가리키면 true를 돌려줘요.

symlink = File.symlink('t.txt', 'symlink')
File.symlink?('symlink') # => true
File.symlink?('t.txt')   # => false

#world_readable?

world_readable?(file_name) → integer 또는 nil — file_name이 다른 사용자에게 읽기 가능하면 파일 권한 비트를 나타내는 정수를 돌려줘요. 아니면 nil. 비트의 의미는 플랫폼에 따라 달라요(Unix에서는 stat(2) 참고). file_nameIO 객체일 수 있어요.

File.world_readable?("/etc/passwd")           #=> 420
m = File.world_readable?("/etc/passwd")
sprintf("%o", m)                              #=> "644"

#world_writable?

world_writable?(file_name) → integer 또는 nil — file_name이 다른 사용자에게 쓰기 가능하면 파일 권한 비트를 나타내는 정수, 아니면 nil을 돌려줘요.

File.world_writable?("/tmp")                  #=> 511
m = File.world_writable?("/tmp")
sprintf("%o", m)                              #=> "777"

#writable?

writable?(file_name)true 또는 false — 파일이 이 프로세스의 유효 사용자·그룹 ID에 의해 쓰기 가능하면 true를 돌려줘요(eaccess(3) 참고). OS 보안 기능 때문에 예외가 있을 수 있어요.

#writable_real?

writable_real?(file_name)true 또는 false — 파일이 실제 사용자·그룹 ID에 의해 쓰기 가능하면 true를 돌려줘요(access(3) 참고).

#zero?

zero?(file_name)true 또는 false — 파일이 존재하고 크기가 0이면 true를 돌려줘요. file_nameIO 객체일 수 있어요. empty?의 별칭이에요.