如何使用Python更改目录的所有者?
通过使用pwd、grp和os模块,可以修改文件或目录的所有者。要从用户名获取用户ID、从组名字符串获取组ID并修改所有者,可以使用uid模块。
以下是使用Python更改目录所有者的方法 –
使用os.chown()方法
使用Python的os.chown()方法,将给定路径的所有者和组ID更改为指定的数字所有者ID(UID)和组ID(GID)。
语法
os.chown(filepath, uid, gid, *, dir_fd=None, follow_symlinks=True)
其中,
filepath 是要修改其UID和GID的文件描述符。
uid 是表示路径所有者ID的整数值。
gid 是表示路径应输入的组ID的数字(将一个ID设置为-1则保持不变), 与目录相关的文件描述符称为 dir_fd (它是可选的),其参数的默认值为None, 如果选择 follow_symlinks ,则其参数的默认值为True。如果我们不想让os.chown()方法跟随符号链接,则可以将其设置为False。如果返回False,则该过程将在符号链接上而不是在其链接到的文件上工作。
注意 - 参数列表中的符号“*”表示所有后续参数(在本例中为“dir fd”和“follow symlinks”)都是关键字参数,并且只能按名称提供,而不是按位置提供。
该方法不会返回任何值。
示例-1(Linux)
以下是使用os.chown()方法更改目录所有者的示例 –
import os
path = "C:\Users\Lenovo\Downloads\Work TP\trial.py"
print("file's owner id:", os.stat(path).st_uid)
print("file's group id:", os.stat(path).st_gid)
# Changing the owner id and group id of the file
uid = 1500
gid = 1500
os.chown(path, uid, gid)
print("\nOwner id and group id of the file is changed succesfully")
# Printing the owner id and group id of the file
print("\nfile's owner id now is:", os.stat(path).st_uid)
print("file's group id now is:", os.stat(path).st_gid)
输出
以下是上述代码的输出 –
└─$ sudo python3 sarika.py
file's owner id: 100
file's group id: 100
Owner id and group id of the file is changed successfully
file's owner id now is: 1500
file's group id now is: 1500
示例-2(Linux)
以下是在设置一个ID的同时保持另一个ID不变的示例 –
import os
# 文件路径
path = "C:\Users\Lenovo\Downloads\Work TP\trial.py"
# 打印当前所有者ID和组ID
print("文件的所属者ID:", os.stat(path).st_uid)
print("文件的组ID:", os.stat(path).st_gid)
# 仅更改所有者ID,不更改组ID
# 设置ID为-1,以保持组ID不变
uid = 200
gid = -1
os.chown(path, uid, gid)
print("\n文件的所有者ID已成功更改,组ID保持不变")
# 现在打印文件的所有者ID和组ID
print("\n文件的所有者ID现在是:", os.stat(path).st_uid)
print("文件的组ID现在是:", os.stat(path).st_gid)
输出
以下是上面代码的输出。
└─$ sudo python3 sarika.py
[sudo] password for sarika:
文件的所属者ID: 1500
文件的组ID: 1000
文件的所有者ID已成功更改,组ID保持不变
文件的所有者ID现在是: 200
文件的组ID现在是: 1000
示例 – 3(Linux)
如果给定的路径是符号链接,则以下是一个示例 −
import os
filepath = "C:\Users\Lenovo\Downloads\Work TP\trial.py"
# 创建一个符号链接
symlink = "C:\Users\Lenovo\Downloads\Work TP\trial(symlink).py"
os.symlink(filepath, symlink)
print("文件的所有者ID:", os.stat(filepath).st_uid)
print("文件的组ID:", os.stat(filepath).st_gid)
print("符号链接的所有者ID:", os.stat(symlink).st_uid)
print("符号链接的组ID:", os.stat(symlink).st_gid)
# 更改符号链接的所有者
uid = 200
gid = 200
os.chown(symlink, uid, gid)
print("\n文件的所有者ID和组ID已成功更改")
# 打印所有者ID、组ID和符号链接
print("\n文件的所有者ID:", os.stat(filepath).st_uid)
print("文件的组ID:", os.stat(filepath).st_gid)
print("符号链接的所有者ID:", os.stat(symlink).st_uid)
print("符号链接的组ID:", os.stat(symlink).st_gid)
# 更改指向符号链接的所有者
uid = 400
gid = 400
os.chown(symlink, uid, gid, follow_symlinks = False)
print("\n所有者ID和组ID未更改")
# 打印所有者ID、组ID和符号链接
print("\n文件的所有者ID:", os.stat(filepath).st_uid)
print("文件的组ID:", os.stat(filepath).st_gid)
print("符号链接的所有者ID:", os.stat(symlink).st_uid)
print(("符号链接的组ID:", os.stat(symlink).st_gid)
输出
以下是以上代码的输出结果:
└─$ sudo python3 code1.py
[sudo] password for govind:
文件的所有者ID: 1000 文件的组ID: 1000
符号链接的所有者ID: 1000
符号链接的组ID: 1000
文件的所有者ID和组ID已成功更改
文件的所有者ID: 200
文件的组ID: 200
符号链接的所有者ID: 200
符号链接的组ID: 200
所有者ID和组ID未更改
文件的所有者ID: 200
文件的组ID: 200
符号链接的所有者ID: 200
符号链接的组ID: 200
使用shutil.chown()方法
Python Shutil模块为文件和文件集合提供了广泛的高级操作。它属于Python的常见实用程序模块之一。该模块有助于自动化更改文件所有权和删除目录的过程。
您可以使用shutil.chown()方法在Python中修改给定路径的所有者和/或组。
语法
shutil.chown(filepath, user = None, group = None)
示例
以下是使用shutil.chown()方法更改文件所有者的示例 –
import shutil
from pathlib import Path
path = 'C:\Users\Lenovo\Downloads\Work TP\trial.py'
#获取拥有者和用户
info = Path(path)
user = info.owner()
group = info.group()
print("当前所有者和组")
print("当前所有者:", user)
print("当前组:", group)
#更改所有者和组
uid = 10
gid = 10
shutil.chown(path, uid, gid)
print("\n所有者和组已成功更改")
#打印所有者用户和组
info = Path(path)
user = info.owner()
group = info.group()
print("当前所有者现在:", user)
print("当前组现在:", group)
输出
以下是上述代码的输出 –
$ sudo python3 code2.py
[sudo] password for sarika:
当前所有者和组
当前所有者:sarika
当前组:sarika
所有者和组已成功更改
当前所有者现在:uucp
当前组现在:uucp
极客教程