FileTest 모듈

FileTest 모듈 (FileTest)

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

즉 아래 메서드들을 FileTest.method(...)처럼 쓸 수도 있고, File.method(...)처럼 직접 호출할 수도 있어요.

출처: Ruby 4.0 API

본문

대부분의 메서드는 인자로 파일 경로 문자열이나 IO 객체를 받아요. 예시에서는 File. 메서드로 호출하고 있지만, FileTest.로 호출해도 동일해요.

#blockdev? (Public Instance Method)

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

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

#chardev? (Public Instance Method)

chardev?(filepath) → true 또는 false — filepath가 캐릭터 디바이스를 가리키면 true, 아니면 false를 돌려줘요.

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

#directory? (Public Instance Method)

directory?(path) → true 또는 false — 문자열 path가 디렉토리(또는 디렉토리를 가리키는 심볼릭 링크)로 이어지는 경로면 true, 아니면 false를 돌려줘요.

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

인자 pathIO 객체일 수도 있어요.

#empty? (Public Instance Method)

empty?#zero?의 별칭이에요.

#executable? (Public Instance Method)

executable?(file_name) → true 또는 false — 이 프로세스의 유효 사용자·그룹 id로 지정된 파일이 실행 가능하면 true를 돌려줘요. eaccess(3) 참고. Windows는 읽기 권한과 분리된 실행 권한을 지원하지 않아요. Windows에서는 확장자가 .bat, .cmd, .com, .exe인 파일만 실행 가능한 것으로 간주해요. 일부 OS 보안 기능 때문에 유효 사용자/그룹이 실행할 수 없는데도 true를 돌려줄 수 있어요.

#executable_real? (Public Instance Method)

executable_real?(file_name) → true 또는 false — 이 프로세스의 실제 사용자·그룹 id로 지정된 파일이 실행 가능하면 true를 돌려줘요. access(3) 참고. Windows 관련 사항은 #executable?과 동일해요.

#exist? (Public Instance Method)

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

#file? (Public Instance Method)

file?(file) → true 또는 false — 지정된 파일이 존재하고 일반 파일(regular file)이면 true를 돌려줘요. fileIO 객체일 수 있어요. 인자가 심볼릭 링크면 심볼릭 링크를 풀어서 링크가 가리키는 파일을 기준으로 판단해요.

#grpowned? (Public Instance Method)

grpowned?(file_name) → true 또는 false — 지정된 파일이 존재하고 호출 프로세스의 유효 그룹 id가 파일의 소유자이면 true를 돌려줘요. Windows에서는 false를 돌려줘요.

#identical? (Public Instance Method)

identical?(file_1, file_2) → true 또는 false — 지정된 두 파일이 동일하면 true를 돌려줘요. file_1file_2IO 객체일 수 있어요. 하드링크나 심볼릭 링크처럼 같은 inode를 가리키는 파일은 동일한 것으로 간주돼요.

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? (Public Instance Method)

owned?(file_name) → true 또는 false — 지정된 파일이 존재하고 호출 프로세스의 유효 사용자 id가 파일의 소유자이면 true를 돌려줘요.

#pipe? (Public Instance Method)

pipe?(filepath) → true 또는 false — filepath가 파이프를 가리키면 true, 아니면 false를 돌려줘요.

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

#readable? / #readable_real? (Public Instance Method)

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

#setgid? / #setuid? / #sticky? (Public Instance Method)

setgid?(file_name), setuid?(file_name), sticky?(file_name) → true 또는 false — 각각 지정된 파일에 setgid 비트, setuid 비트, sticky 비트가 설정돼 있으면 true를 돌려줘요.

#size (Public Instance Method)

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

#size? (Public Instance Method)

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

#socket? (Public Instance Method)

socket?(filepath) → true 또는 false — filepath가 소켓을 가리키면 true, 아니면 false를 돌려줘요.

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

symlink?(filepath) → true 또는 false — filepath가 심볼릭 링크를 가리키면 true, 아니면 false를 돌려줘요.

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

#world_readable? (Public Instance Method)

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

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

#world_writable? (Public Instance Method)

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_real? (Public Instance Method)

writable?(file_name) → true 또는 false — 이 프로세스의 유효 사용자·그룹 id로 지정된 파일이 쓰기 가능하면 true를 돌려줘요. eaccess(3) 참고. writable_real?는 유효 대신 실제 사용자·그룹 id 기준(access(3) 참고). 일부 OS 보안 기능 때문에 true가 잘못 나올 수 있어요.

#zero? (Public Instance Method)

zero?(file_name) → true 또는 false — 지정된 파일이 존재하고 크기가 0이면 true를 돌려줘요. empty?로도 호출할 수 있어요.