module FileTest

要約

ファイルの検査関数を集めたモジュールです。

注意

FileTest で定義された各メソッドは、システムコールに失敗しても例外を発生させません。真を返した時のみ、返り値は意味をもちます。例えば、

File.exist?('/root/.bashrc')

が false を返しても、それはファイルが存在しないことを保証しません。

目次

モジュール関数

モジュール関数

blockdev?(file) -> bool[permalink][rdoc]

ファイルがブロックスペシャルファイルである時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。

例:

Dir.glob("/dev/*") { |file|
  puts file if FileTest.blockdev?(file)
}
# /dev/disk0
# /dev/disk0s3
# ...
chardev?(file) -> bool[permalink][rdoc]

ファイルがキャラクタスペシャルファイルの時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。

例:

Dir.glob("/dev/*") { |file|
  puts file if FileTest.chardev?(file)
}
# /dev/console
# /dev/tty
# ...
directory?(file) -> bool[permalink][rdoc]

ファイルがディレクトリの時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。

例:

FileTest.directory?('/etc') # => true
FileTest.directory?('/etc/passwd') # => false

f = File.open('/etc')
FileTest.directory?(f) # => true
f.close
FileTest.directory?(f) # => IOError: closed stream
zero?(file) -> bool[permalink][rdoc]
empty?(file) -> bool

ファイルが存在して、そのサイズが 0 である時に真を返します。そうでない場合、あるいはシステムコールに失敗した場合には false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。
例:

IO.write("zero.txt", "")
FileTest.zero?("zero.txt")      # => true
IO.write("nonzero.txt", "1")
FileTest.zero?("nonzero.txt")  # => false

[SEE_ALSO] FileTest.#size, FileTest.#size?

executable?(file) -> bool[permalink][rdoc]

ファイルがカレントプロセスにより実行できる時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列を指定します。

例:

FileTest.executable?('/bin') # => true
FileTest.executable?('/bin/bash') # => true
executable_real?(file) -> bool[permalink][rdoc]

ファイルがカレントプロセスの実ユーザか実グループで実行できる時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列を指定します。


IO.write("empty.txt", "")
File.chmod(0744, "empty.txt")
FileTest.executable_real?("empty.txt")      # => true
File.chmod(0644, "empty.txt")
FileTest.executable_real?("empty.txt")      # => false
exist?(file) -> bool[permalink][rdoc]

ファイルが存在する時に真を返します。そうでない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。

例:

FileTest.exist?('/etc/passwd') # => true
FileTest.exist?('/etc') # => true
FileTest.exist?('/etc/no_such_file') # => false
FileTest.exist?('/etc/no_such_directory') # => false
exists?(file) -> bool[permalink][rdoc]

このメソッドは deprecated です。FileTest.#exist? を使用してください。

file?(file) -> bool[permalink][rdoc]

ファイルが通常ファイルである時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。

例:

FileTest.file?('/bin/bash') # => true
FileTest.file?('/bin') # => false
FileTest.file?('/no_such_file') # => false
grpowned?(file) -> bool[permalink][rdoc]

ファイルのグループ ID がカレントプロセスの実効グループ ID と等しい時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。


IO.write("testfile", "")
File.chown(-1, Process.gid, "testfile")
FileTest.grpowned?("testfile")      # => true
File.chown(-1, Process.gid + 10, "testfile")
FileTest.grpowned?("testfile")      # => false
identical?(file1, file2) -> bool[permalink][rdoc]

file1 と file2 が同じファイルを指している時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

ruby 1.8.3 以前ではKernel.#test(?-, file1, file2)を使ってください。

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
[PARAM] file1:
ファイル名を表す文字列か IO オブジェクトを指定します。
[PARAM] file2:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file1, file2 が既に close されていた場合に発生します。
owned?(file) -> bool[permalink][rdoc]

ファイルのユーザがカレントプロセスの実効ユーザと等しい時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。


IO.write("testfile", "")
File.chown(Process.uid, -1, "testfile")
FileTest.owned?("testfile")      # => true
File.chown(501, -1, "testfile")
FileTest.owned?("testfile")      # => false
pipe?(file) -> bool[permalink][rdoc]

指定したファイルがパイプである時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。

例:

r, w = IO.pipe
FileTest.pipe?(r) # => true
FileTest.pipe?(w) # => true
readable?(file) -> bool[permalink][rdoc]

ファイルがカレントプロセスにより読み込み可能な時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列を指定します。


IO.write("testfile", "")
File.chmod(0644, "testfile")
FileTest.readable?("testfile")      # => true
File.chmod(0200, "testfile")
FileTest.readable?("testfile")      # => false
readable_real?(file) -> bool[permalink][rdoc]

ファイルがカレントプロセスの実ユーザか実グループによって読み込み可能な時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#readable?

setgid?(file) -> bool[permalink][rdoc]

ファイルが setgid(2) されている時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。


require 'fileutils'
IO.write("testfile", "")
FileUtils.chmod("g+s", "testfile")
FileTest.setgid?("testfile")      # => true
FileUtils.chmod("g-s", "testfile")
FileTest.setgid?("testfile")      # => false
setuid?(file) -> bool[permalink][rdoc]

ファイルが setuid(2) されている時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。


require 'fileutils'
IO.write("testfile", "")
FileUtils.chmod("u+s", "testfile")
FileTest.setuid?("testfile")      # => true
FileUtils.chmod("u-s", "testfile")
FileTest.setuid?("testfile")      # => false
size(file) -> Integer[permalink][rdoc]

ファイルのサイズを返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] Errno::EXXX:
file が存在しない場合、あるいはシステムコールに失敗した場合に発生します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。

[SEE_ALSO] FileTest.#size?, FileTest.#zero?

例:

FileTest.size('/etc/passwd') # => 5925
size?(file) -> Integer | nil[permalink][rdoc]

ファイルのサイズを返します。ファイルが存在しない時やファイルのサイズが0の時には nil を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。


IO.write("testfile", "test")
FileTest.size?("testfile")      # => 4
File.delete("testfile")
FileTest.size?("testfile")      # => nil

[SEE_ALSO] FileTest.#size, FileTest.#zero?

socket?(file) -> bool[permalink][rdoc]

ファイルがソケットである時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。
[EXCEPTION] IOError:
指定された IO オブジェクト file が既に close されていた場合に発生します。


require "socket"

IO.write("testfile", "test")
p FileTest.socket?("testfile")                                           # => false
Socket.unix_server_socket('testsock') { p FileTest.socket?('testsock') } # => true
sticky?(file) -> bool[permalink][rdoc]

ファイルの sticky ビット(chmod(2) 参照)が立っている時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。


require 'fileutils'
IO.write("testfile", "")
FileUtils.chmod("o+t", "testfile")
FileTest.sticky?("testfile")      # => true
FileUtils.chmod("o-t", "testfile")
FileTest.sticky?("testfile")      # => false

ファイルがシンボリックリンクである時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列を指定します。


IO.write("testfile", "test")
FileTest.symlink?("testfile")      # => false
File.symlink("testfile", "testlink")
FileTest.symlink?("testlink")      # => true
world_readable?(path) -> Integer | nil[permalink][rdoc]

path が全てのユーザから読めるならばそのファイルのパーミッションを表す整数を返します。そうでない場合は nil を返します。

整数の意味はプラットフォームに依存します。

[PARAM] path:
パスを表す文字列を指定します。
m = FileTest.world_readable?("/etc/passwd")
"%o" % m                               # => "644"
world_writable?(path) -> bool[permalink][rdoc]

path が全てのユーザから書き込めるならば、そのファイルのパーミッションを表す整数を返します。そうでない場合は nil を返します。

整数の意味はプラットフォームに依存します。

[PARAM] path:
パスを表す文字列を指定します。
m = FileTest.world_writable?("/tmp")
"%o" % m                               #=> "777"
writable?(file) -> bool[permalink][rdoc]

ファイルがカレントプロセスにより書き込み可能である時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列を指定します。


IO.write("testfile", "test")
File.chmod(0600, "testfile")
FileTest.writable?("testfile")      # => true
File.chmod(0400, "testfile")
FileTest.writable?("testfile")      # => false
writable_real?(file) -> bool[permalink][rdoc]

ファイルがカレントプロセスの実ユーザか実グループによって書き込み可能である時に真を返します。そうでない場合、ファイルが存在しない場合、あるいはシステムコールに失敗した場合などには false を返します。

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#writable?