Windows and Linux compatible chmod
Project description
oschmod
oschmod sets consistent file permissions across Windows, Linux and macOS.
oschmod TL;DR
oschmod brings chmod
functionality to Windows, macOS, and Linux! If you're not familiar, chmod
is a handy macOS and Linux-only tool for setting file permissions.
Prior to oschmod, Windows file permissions couldn't be set in the familiar chmod
way. Tools did not translate chmod
-style permissions into Windows-style file permissions. Even though Python's os.chmod()
sets read, write, and execute file permissions, on Windows, os.chmod()
basically has no effect. Even worse, Python on Windows gives no warnings or errors. If you think you set file permissions on Windows with os.chmod()
, you're wrong!
oschmod allows you to set consistent file permissions in a consistent way across platforms.
- Read more about oschmod on Medium
- For more background, have a look at the oschmod Wiki.
Installation
$ pip install oschmod
GNU Documentation
oschmod changes the file mode bits of each given file according to mode, which can be either a symbolic representation of changes to make, or an octal number representing the bit pattern for the new mode bits.
The format of a symbolic mode is [ugoa...][+-=][perms...]
where perms is zero or more letters from the set rwx
. Multiple symbolic modes can be given, separated by commas.
A combination of the letters ugoa
controls which users' access to the file will be changed: the user who owns it (u
), other users in the file's group (g
), other users not in the file's group (o
), or all users (a
). If none of these are given, the effect is as if a
were given.
(Modified from the GNU manpage for chmod.)
Command line interface
oschmod brings the ability to set consistent file permissions using the command line to Windows, macOS, and Linux platforms. If you are familiar with chmod
, oschmod works similarly, albeit with fewer options.
$ oschmod -h
usage: oschmod [-h] [-R] mode object
Change the mode (permissions) of a file or directory
positional arguments:
mode octal or symbolic mode of the object
object file or directory
optional arguments:
-h, --help show this help message and exit
-R apply mode recursively
Command line examples
You can use symbolic (e.g., "u+rw") or octal (e.g., "600) representations of modes. Multiple mode modifications can be made in a single call by separating modifiers with commas.
Symbolic representation examples
Symbolic representation mode modifiers have three parts:
- whom: To whom does the modification apply? You can include zero or more of
[ugoa]*
wherea
is for all,u
is for the file owner (i.e., "user"),g
is for the file group, ando
is for others. In other words,ugo
is equivalent toa
. Also, if you do not provide a "whom," oschmod assumes you meana
(everyone). - operation: Which operation should be applied? You must include one and only one operation,
[+-=]{1}
, per modifier (although you can have multiple modifiers).+
adds permissions,-
removes permissions, and=
sets permissions regardless of previous permissions.+
and-
modifications often depend on the current permissions. - permission: Which permission or permissions will be affected? You can include zero or more of
[rwx]*
wherer
is for read,w
is for write, andx
is for execute. If you do not include a permission with+
or-
(e.g.,u-
), the modifier has no effect. However, if you use no permissions with=
(e.g.,o=
), all permissions are removed.
Example 1: To give everyone execute permissions on a file (all of these are equivalent):
$ oschmod +x <file name>
$ oschmod a+x <file name>
$ oschmod ugo+x <file name>
Example 2: To remove read, write, and execute permissions from the file group and all others (these are equivalent):
$ oschmod go-rwx <file name>
$ oschmod go= <file name>
Example 3: To give the file owner read and execute permissions, and remove execute permissions from the group and all others:
$ oschmod u+rx,go-x <file name>
Example 4: To give everyone all permissions, and then remove execute write from the group, and execute from all others:
$ oschmod a+rwx,g-w,o-x <file name>
Octal representation examples
For more about what octal representations mean, see this article on Medium.
Example 5: To give everyone read, write, and execute permissions on a file:
$ oschmod 777 <file name>
Example 6: To lock down a file to just give the file owner read, write, and execute permissions and deny all permissions to everyone else:
$ oschmod 700 <file name>
Python usage
You can use oschmod from Python code. Any of the command line examples above will work very similarly. For example, Example 4 above, in Python code, would look like this:
import oschmod
oschmod.set_mode("myfile", "a+rwx,g-w,o-x")
Example 5 above, in Python code, could be done in two ways:
import oschmod
oschmod.set_mode("myfile", "777")
oschmod.set_mode("myfile", 0o777)
oschmod is compatible with bitwise permissions as defined in the stat
module. To give a file's owner read, write, and execute permissions and deny the group and others any permissions (i.e., equivalent of 700
):
import oschmod
import stat
oschmod.set_mode('myfile', stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
Replacing os.chmod()
with oschmod should usually be an easy drop-in replacement. Replacement will allow you to get consistent file permission settings on Windows, macOS, and Linux:
If this is your Python code using os.chmod()
:
import os
os.chmod('myfile1', 'u+x')
os.chmod('myfile2', 0o777)
The replacement using oschmod is very similar:
import oschmod
oschmod.set_mode('myfile1', 'u+x')
oschmod.set_mode('myfile2', 0o777)
Changelog
0.3.0
Commit Delta: Change from 0.2.4 release
Released: 2020.05.27
Summary:
- Adds symbolic representation for mode changes (e.g.,
+x
,u+rwx
,ugo-x
).
0.2.4
Commit Delta: Change from 0.2.2 release
Released: 2020.04.21
Summary:
- Add command line interface (CLI).
0.2.2
Commit Delta: Change from 0.2.0 release
Released: 2020.04.21
Summary:
- Fix issue with account lookup failing with error (
No mapping between account names and security IDs was done.
).
0.2.0
Commit Delta: Change from 0.1.5 release
Released: 2020.04.20
Summary:
- Add recursive version of
oschmod.set_mode()
:oschmod.set_mode_recursive()
0.1.5
Commit Delta: Change from 0.1.4 release
Released: 2020.04.17
Summary:
- Create Linux version of permissions test (
oschmod.perm_test()
)
0.1.4
Commit Delta: Change from 0.1.0 release
Released: 2020.04.17
Summary:
- Revise Windows to keep permissions an object already has for SYSTEM/NT AUTHORITY and don't include those permissions in mode calculation.
- Fix various minor cosmetic issues.
0.1.0
Commit Delta: Change from 0.0.0 release
Released: 2020.04.15
Summary:
- Initial release
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file oschmod-0.3.12.tar.gz
.
File metadata
- Download URL: oschmod-0.3.12.tar.gz
- Upload date:
- Size: 20.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.6.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bec99216f31615ee653b2a5c87cacfb4e4b6184c0e9f71da186300dacae974f3 |
|
MD5 | 9742b69b861cdab4a5b1ea5c69510265 |
|
BLAKE2b-256 | 9d646e522f0a1b500470ae14dcd1a4bb8f8751f5cf441e85e9fee7dfc712cb7b |
File details
Details for the file oschmod-0.3.12-py2.py3-none-any.whl
.
File metadata
- Download URL: oschmod-0.3.12-py2.py3-none-any.whl
- Upload date:
- Size: 14.1 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.6.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e71efd5ebcf5cfbb620548644f39eed4fc3cd4a907638a8caaff452fb256637c |
|
MD5 | f9b9fac6fd771cbbc51a4a42dc38ec4c |
|
BLAKE2b-256 | 946ade92fdb86ed24b320c3d8dc07c9eade21010c5231a46d5cc53024f45168a |