Woof.LinuxAdmin
5.0.4
Prefix Reserved
Early development versions had limited API and low-level compatibility issues. As low-level issues are considered dangerous, you should use the latest package version that was well tested on several x64 and ARM64 devices and virtual machines.
See the version list below for details.
dotnet add package Woof.LinuxAdmin --version 5.0.4
NuGet\Install-Package Woof.LinuxAdmin -Version 5.0.4
<PackageReference Include="Woof.LinuxAdmin" Version="5.0.4" />
paket add Woof.LinuxAdmin --version 5.0.4
#r "nuget: Woof.LinuxAdmin, 5.0.4"
// Install Woof.LinuxAdmin as a Cake Addin #addin nuget:?package=Woof.LinuxAdmin&version=5.0.4 // Install Woof.LinuxAdmin as a Cake Tool #tool nuget:?package=Woof.LinuxAdmin&version=5.0.4
Woof.LinuxAdmin
.NET extension created by CodeDog
Distributed under MIT License. (c)2021 by CodeDog, All rights reserved.
About
A set of Linux administration tools using system calls and shell. Made because .NET doesn't have Linux-specific functions, like Linux permission operations or a support for Linux users and groups.
There are other packages like Mono.Posix.NETStandard
or TmdS.libc
,
but the first one focuses on completness, the other one is not easy to use.
This toolset is lightweight and super easy to use.
I aimed at making it compatible with many modern Linux systems, it might not work with a specific distro and / or hardware platform.
If the package doesn't work with your configuration - please kindly open a GitHub issue providing details about your platform and how to reproduce the problem.
Design
The core of the library is Linux native Syscall
class.
It contains the signatures for libc
system calls. There is a minimalistic
set of feature used, just to enable basic Linux file system operations.
Original naming convention is dropped for .NET naming and signatures style.
The managed functions sit in Linux
static class.
There's also a FileSystem
static class containing CopyDirectoryContent()
helper.
For convenience, there is Shell
class with Exec
method to simplify
executing shell commands and getting their output.
The functions mostly return bool
values indicating that the operation
was successful.
AddSystemUserAsync(), AddSystemGroupAsync() methods
The only asynchronous methods in Linux
static class.
They are asynchronous since they use shell to call useradd
and groupadd
.
Chmod(), ChmodR(), Chown(), ChownR()
Chmod
changes permissions on a file system entry.
You can provide permissions as follows:
- octal string, like "664" (absolute read/write for user and group, read for others)
- relative string, like "ug+rw,o-w", "+x" and so on,
- binary - as
uint
Linux mode.
Conversions between string
, uint
and Permissions
are made implicitly.
Special permission "X" also works, setting executable bit if the entry is a directory or has at least one executable bit set.
It is important, that the execute permissions cannot be set on unreadable entries. When the entry doesn't have a read permission for the specified target it's execute bit will not be set for that target.
Chown
changes an owner of a file system entry. It works with string
names only.
To change permissions and / or owner for all entries in a directory including
the directory itself use ChmodR()
and ChownR()
methods.
Other tools
For the administration it's useful to check if the program has administrative
privileges. To do so use Linux.IsRoot
property.
Performance hint
To set absolute permissions use octal strings (or binary) to skip calling stat
on each entry. Also, internal __xstat
is a bit system specific so it might
not work on all Linux systems.
Security
The package does not use unsafe code and no p/invoke implementation details
are public. However, caution is advised when using Shell
, because when running
on root
account it gives the application the full control over the target system.
Compatibility
The package is compatible with .NET 5.0 or newer. Tested on Ubuntu Ubuntu 20.04.3 LTS.
It's not guaranteed that __xstat
and dependent Linux.Chmod()
and
Linux.ChmodR()
functions will work on your distro. Test before use.
In case of a compatibility issue - create an issue on Github.
Disclaimer
Woof Toolkit is a work in progress in constant development, however it's carefully maintained with production code quality.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net5.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Woof.LinuxAdmin:
Package | Downloads |
---|---|
Woof.ServiceInstaller
Registers and unregisters a project executable as either Windows Service or systemd deamon. Works both on Windows and Linux. |
|
Woof.DataProtection.Linux
Provides data protection API for Linux. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
7.0.0 | 285 | 8/6/2023 | |
6.2.0 | 713 | 2/20/2022 | |
6.1.2 | 638 | 11/27/2021 | |
6.1.1 | 1,789 | 11/26/2021 | |
6.1.0 | 1,482 | 11/26/2021 | |
6.0.3 | 658 | 11/15/2021 | |
6.0.2 | 371 | 11/15/2021 | |
6.0.1 | 799 | 11/9/2021 | |
6.0.0 | 427 | 11/9/2021 | |
5.2.1 | 527 | 11/8/2021 | |
5.2.0 | 456 | 11/8/2021 | |
5.1.1 | 746 | 11/5/2021 | |
5.1.0 | 443 | 11/4/2021 | |
5.0.5 | 519 | 11/1/2021 | |
5.0.4 | 406 | 11/1/2021 | |
5.0.3 | 575 | 10/31/2021 | |
5.0.2 | 639 | 10/30/2021 | |
5.0.1 | 502 | 10/30/2021 | |
5.0.0 | 505 | 10/28/2021 |
ADD: Permissions.IsMatch(), better documentation.