This is the development version of Kanrisuru. Since this is still a pre-1.0 release, we don't recommend using this in system-critical production environments.

Kanrisuru

lsof

Get a list of open files on a system in ruby.
linux manual

Basic Usage

require 'kanrisuru'
host = Kanrisuru::Remote::Host.new(host: '127.0.1.1', username: 'ubuntu', keys: ['~/.ssh/id_rsa'])

host.su('root')
result = host.lsof
result.success?
true

result[6483].uid
0

result[6483].pid
171544

result[6483].command
"lsof"

This command needs escalated privileges to read file information for processes run by other users or root.

Result

Returns an array of OpenFile structs.

OpenFile Fields

Field Type Description
command string Contains the first nine characters of the name of the UNIX command associated with the process
pid integer The Process Identification number of the process.
uid integer The user ID number or login name of the user to whom the process belongs.
file_descriptor string The File Descriptor number of the file or various other options.
type string The type of the node associated with the file, eg; REG, DIR, CHR, IPv4 as an example.
device string Contains the device numbers, separated by commas, for a character special, block special, regular, directory or NFS file.
fsize integer The size of the file or the file offset in bytes.
inode integer Contains a unique identifier for the file node.
name string The name of the mount point and file system on which the file resides, or the name of a file specified in the names option (after any symbolic links have been resolved), or the name of a character special or block special device, or the local and remote Internet addresses of a network file, or the address or name of a UNIX domain socket, or the local and remote mount point names of an NFS file.

Return Example

result.data
[
  [   0] #<Struct:Kanrisuru::Core::System::OpenFile:0x000006e0
    fsize = 4096,
    command = "systemd",
    device = "0xfc01",
    file_descriptor = "cwd",
    inode = 2,
    name = "/",
    pid = 1,
    type = "DIR",
    uid = 0
  >,
  [   1] #<Struct:Kanrisuru::Core::System::OpenFile:0x000007d0
    fsize = 4096,
    command = "systemd",
    device = "0xfc01",
    file_descriptor = "rtd",
    inode = 2,
    name = "/",
    pid = 1,
    type = "DIR",
    uid = 0
  >,
  [   2] #<Struct:Kanrisuru::Core::System::OpenFile:0x00000898
    fsize = 1620224,
    command = "systemd",
    device = "0xfc01",
    file_descriptor = "txt",
    inode = 6732,
    name = "/usr/lib/systemd/systemd",
    pid = 1,
    type = "REG",
    uid = 0
  >,
  [   3] .. [6483],
  [6484] #<Struct:Kanrisuru::Core::System::OpenFile:0x00138328
    fsize = 191472,
    command = "lsof",
    device = "0xfc01",
    file_descriptor = "mem",
    inode = 31763,
    name = "/usr/lib/x86_64-linux-gnu/ld-2.31.so",
    pid = 171544,
    type = "REG",
    uid = 0
  >,
  [6485] #<Struct:Kanrisuru::Core::System::OpenFile:0x001383f0
    fsize = nil,
    command = "lsof",
    device = "0xd",
    file_descriptor = "4",
    inode = 918467,
    name = "pipe",
    pid = 171544,
    type = "FIFO",
    uid = 0
  >,
  [6486] #<Struct:Kanrisuru::Core::System::OpenFile:0x001384b8
    attr_reader :size = nil,
    command = "lsof",
    device = "0xd",
    file_descriptor = "7",
    inode = 918468,
    name = "pipe",
    pid = 171544,
    type = "FIFO",
    uid = 0
  >
]

Exit Status

Code Description
0 Success
1 Failure

Tested On

  • Ubuntu, Debian, Centos, Fedora, Redhat, OpenSuse, SLES