I don’t know about you, but even after all these years of UNIX I still have some trouble interpreting octal permissions in my head. In this episode, you’ll learn about a special form of the integer literal syntax that can take the math out of bitfields.
42 3.14159 "foo"
0x7FFF # => 32767 0755 # => 493
Octal numbers are useful for things like specifying unix file permissions.
require 'fileutils' include FileUtils chmod 0755, 'somefile'
Ruby also supports a slightly less common type of integer literal: binary literals. I don’t know about you, but even after all these years of UNIX I still have some trouble translating octal numbers into permissions, and vice-versa, in my head. This is one place binary literals can come in handy.
Let’s take a look at the previous example, only using a binary literal this time. First, we’ll start with a reminder of the order of permissions bits. From left to write, we have permissions for user, group, and other.
# U G O # rwxrwxrwx
Now underneath that, we’ll spell out our permission mask as a binary literal.
# U G O # rwxrwxrwx 0b111101101
Just to check, we’ll translate that to octal form.
perms = 0b111101101 perms.to_s(8) # => "755"
Now with our permissions mask in hand, we can set permissions, confident that we’ve set the desired bits.
chmod perms, 'somefile'
And that’s it for today. Happy hacking!