API-文件所属组-理解Linux文件所属组-api-c-linux-C (d盘突然多了许多api文件)

教程大全 2025-07-07 21:19:05 浏览

在Linux系统中,不光每个文件都有一个所有者(owner),还有一个所属组(group)的概念。所属组指的是文件所在的组,在文件访问管理中担任着重要角色。一些操作,比如读取、写入和执行,都需要通过组的定义来授权文件访问。在Linux系统中,C语言也提供了API来处理文件所属组的操作,开发者可以使用这些API来进行文件访问控制的编程。

本文将介绍Linux系统中的文件所属组概念,以及C语言API如何为文件访问提供了支持。

Linux中文件所属组的概念

在Linux中,每个文件都有一个所有者和一个所属组。所有者一般指的是文件创建者或拥有者,可以理解为文件的主人。所有者默认拥有对文件的所有访问权限。每个文件所属组也是一个标识符(ID),可以是一个用户组或其他类型的组。组成员可以被授权在文件级别上进行访问。如果一个组具有执行权限,组中的任何成员都可以执行该文件。

对于大多数Linux系统管理员来说,文件访问权限是一个非常熟悉的主题。权限由三个分组控制:文件所有者、文件所属组以及其他人。每个分组都可以分别授予读取(r)、写入(w)和执行(x)的权限。这些权限的合理分配及控制可以保护文件安全,并鼓励文件共享

C语言API中的文件所属组支持

Linux系统提供了访问文件所述组的多个工具和API,包括C语言API。C语言是一种面向过程的语言,有着非常丰富的文件访问API,并支持对文件所属组的操作。以下是C API中的几个实现:

1. getgid(): 获取进程的实际组ID。

2. getegid(): 获取进程的有效组ID。

3. setgid(): 设置进程的组ID,只有超级用户有权限改变组ID。

4. setegid(): 设置进程的有效组ID,并返回之前的值。

5. getgroups(): 获取进程所在的所有组ID。

6. setgroups(): 设置进程的所有组ID。

使用这些API可以实现对文件访问控制的编程。在C语言API中,可以使用组ID或者组名来获取或设置文件所属组。系统会在文件中存储文件所有者及其所在组的信息。

下面是一段C API的示例代码:

int mn(int argc, char** argv) {

// 文件所有者

uid_t owner_uid = getuid();

// 文件所属组

gid_t owner_gid = getgid();

// 获取当前进程的有效组ID

gid_t process_egid = getegid();

// 打印文件信息

printf(“Owner UID=%d GID=%d\n”, owner_uid, owner_gid);

printf(“Effective GID=%d\n”, process_egid);

在这个例子中,使用了几个C语言API函数获取了文件所有者、所属组以及当前进程的有效组ID。这些信息可以实现编程时对文件访问的权限管理

相关问题拓展阅读:

Linux下的umask、特殊权限与ACL权限

在了解到Linux系统上的文件目录权限,有时候你会发现为什么刚创建的文件是

这个权限,目录是

drwxr-xr-x

权限,有些是

-rwsr-xr-x

,又有些是

?这些则与umask、特殊权限有关。

什么是umask?umask一般是用在你初始创建一个目录或者文件的时候赋予他们的权限。它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、

或用户家目录下的.bash_profile或.profile中设置umask值。

默认的umask是0022,0022四个数字代表是赋值初始化准备丢弃的权限。(相对应文件来说,x权限就算没说明出来丢弃一样必须默认丢弃)

之一个0代表suid 丢弃的权限;

第二个0代表本文件/目录拥有者什么权限都没丢弃;

第三个2代表本文件/目录的用户组丢弃了w权限;

第四个2代表本文件/目录的文件/目录的用户组丢弃了w权限。

一般我们会这样表示:

umask +default permission(默认权限) =777(目录)/666(文件)

但存在特殊情况如果把umask设为135呢?

要了解特殊权限需对安全上下文有一个概念:

前提:进程有属主和属组;文件有属主和属组

(1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限

(2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组

(3) 进程访问文件时的权限,取决于进程的发起者

(a) 进程的发起者,同文件的属主:则应用文件属限

(b) 进程的发起者,属于文件属组;则应用文件属组权限

(c) 应用文件“其它”权限

1.SUID 权限仅对二进制程序(binary program)有效;

2.执行者对于该程序需要具有x 的可执行权限;

3.本权限仅在执行该程序的过程中有效(run-time);

4.执行者将具有该程序拥有者(owner) 的权限。

5.SUID设置在目录上无意义

权限设定:

chmod u+s FILE…

chmod u-s FILE…

C

s 标志在文件拥有者的x 项目为SUID,那s 在群组的x 时则称为Set GID

# ls -l /usr/bin/locate

-rwx–s–x. 1 root slocateJun/usr/bin/locate

与SUID 不同的是,SGID 可以针对文件或目录来设定!如果是对文件来说, SGID 有如下的功能:

-1.SGID 对二进制程序有用;

-2.程序执行者对于该程序来说,需具备x 的权限;

-3.执行者在执行的过程中将会获得该程序群组的支持!

# ll /usr/bin/locate /var/lib/mlocate/mlocate.db

-rwx–s–x. 1 root slocateJun/usr/bin/locate

-rw-r—–. 1 root slocateJun 15 03:44 /var/lib/mlocate/mlocate.db

与SUID 非常的类似,使用xiaoming 这个账号去执行locate 时,那xiaoming将会取得slocate 群组的支持, 因此就能够去读取 mlocate.db 。

SGID 也能够用在目录上,这也是非常常见的一种用途

目录设定了SGID 的权限后,他将具有如下的功能:

-1. 用户若对于此目录具有r 与x 的权限时,该用户能够进入此目录;

-2.用户在此目录下的有效群组(effective group)将会变成该目录的群组;

-3.用途:若用户在此目录下具有w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。

这个 Sticky Bit, SBIT 目前只针对目录有效,sticky 设置在文件上无意义。SBIT 对于目录的作用是:

-1.当用户对于此目录具有w, x 权限,亦即具有写入的权限时;

-2.当用户在该目录下建立文件或目录时,仅有自己与root 才有权力删除该文件

SUID/SGID/SBIT 权限设定

-rwSrwSrwT 1 root root 0 Jun 16 02:53 test

设定权限成为 -rws–x–x 的模样:

# chmod u=rwxs,go=x test; ls -l test

-rws–x–x 1 root root 0 Jun 16 02:53 test

承上,加上 SGID 与 SBIT 在上述的文件权限中!

# chmod g+s,o+t test; ls -l test

-rws–s–t 1 root root 0 Jun 16 02:53 test

1】ACL 是Access Control List 的缩写,主要的目的是在提供传统的owner,group,oThers 的read,write,execute 权限之外的细部权限设定。ACL 可以针对单一使用者,单一文件或目录来进行

ACL 主要可以针以下来控制权限呢:

1.使用者 (user):可以针对使用者来设定权限;

2.群组 (group):针对群组为对象来设定其权限;

3.默认属性(mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限;

及1.ACL:Access Control List,实现灵活的权限管理;2.CentOS7默认创建的xfs和ext4文件系统具有ACL功能;3.CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加tune2fs –o acl/dev/sdb1

mount –o acl/dev/sdb1 /mnt/test

4.ACL生效顺序:所有者,自定义用户,自定义组,其他人

为多用户或者组的文件和目录赋予访问权限rwx

2】ACL 的设定技巧: getfacl, setfacl

-x :删除后续的 acl 参数,不可与 -m 合用;

-b :移除『所有的』 ACL 设定参数;

-k :移除『预设的』 ACL 参数,

-R :递归设定 acl ,亦即包括次目录都会被设定起来;

-d :设定『预设 acl 参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值

例:# touch acl_test1

# ll acl_test1

-rw-r–r–. 1 root root 0 Jul 21 17:33 acl_test1

# setfacl -m u:xiaoming:rx acl_test1

# ll acl_test1

-rw-r-xr–+ 1 root root 0 Jul 21 17:33 acl_test1

# setfacl -m u::rwx acl_test1

# ll acl_test1

-rwxr-xr–+ 1 root root 0 Jul 21 17:33 acl_test1

设定值中的 u 后面无使用者列表,代表设定该文件拥有者

2.getfacl 指令用法余setfacl一样

例:# getfacl acl_test1

file: acl_test1 acl.txt

setfacl -R -b /tmp/dir1

清除dir目录的ACL权限

setfacl -R –set-file=acl.txt /tmp/dir1

setfacl –restore acl.txt

linux 文件所属组 c api的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 文件所属组 c api,理解Linux文件所属组:C API,Linux下的umask、特殊权限与ACL权限的信息别忘了在本站进行查找喔。

香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。


linux下的系统调用和api有到底有什么区别

UNIX是和C共生的,linux 是Unix的某种变体早期的C库,基本就是unix 系统调用,和一些常用函数库(数学库,字符串库等等)。 后来C因为可移植性好,广泛流传,DOS 上就有四大编译器。 由于,广泛流传,所以后来为了统一和可移植性,就制定了标准。 某些库函数,被标准化了,成了标准库的一部分,另一些没有。 标准化的这一部分,就可以用于任何执行标准的编译器,包括DOS和Windows 上的.没标准化的部分,只能是unix,linux 专用,其他操作系统上的编译器,也有可能部分自己专用库,或者该操作系统专用库而操作系统,年最核心功能部分的库函数,unix,linux 就是系统调用(听说是X86 上是 int 80中断啥的)。 DOS是 int21中断,Windows 是API,SDK,DDK等。 有些系统调用,和API 被封装到标准库了,有些没有。

谁能帮我详细解释下LINUX下的./config命令

“/”表示标记。 cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大。 语法: cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。 该命令的各选项含义如下: - a 该选项通常在拷贝目录时使用。 它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。 - d 拷贝时保留链接。 - f 删除已经存在的目标文件而不提示。 - i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。 回答y时目标文件将被覆盖,是交互式拷贝。 - p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。 - r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。 此时目标文件必须为一个目录名。 - l 不作拷贝,只是链接文件。 需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。 mv命令 用户可以使用mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。 该命令如同MSDOS下的ren和move的组合。 语法:mv [选项] 源文件或目录 目标文件或目录 说明:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。 在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。 命令中各选项的含义为: - I 交互方式操作。 如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答y或n,这样可以避免误覆盖文件。 - f 禁止交互操作。 在mv操作要覆盖某已有的目标文件时不给任何指示,指定此选项后,i选项将不再起作用。 如果所给目标文件(不是目录)已存在,此时该文件的内容将被新文件覆盖。 为防止用户用mv命令破坏另一个文件,使用mv命令移动文件时,最好使用i选项。 rm命令 用户可以用rm命令删除不需要的文件。 该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。 对于链接文件,只是断开了链接,原文件保持不变。 rm命令的一般形式为: rm [选项] 文件… 如果没有使用- r选项,则rm不会删除目录。 该命令的各选项含义如下: - f 忽略不存在的文件,从不给出提示。 - r 指示rm将参数中列出的全部目录和子目录均递归地删除。 - i 进行交互式删除。 使用rm命令要小心。 因为一旦文件被删除,它是不能被恢复的。 了防止这种情况的发生,可以使用i选项来逐个确认要删除的文件。 如果用户输入y,文件将被删除。 如果输入任何其他东西,文件则不会删除。 Linux目录的创建与删除命令 mkdir命令 功能:创建一个目录(类似MSDOS下的md命令)。 语法:mkdir [选项] dir-name 说明:该命令创建由dir-name命名的目录。 要求创建目录的用户在当前目录中(dir-name的父目录中)具有写权限,并且dirname不能是当前目录中已有的目录或 文件名称。 命令中各选项的含义为: - m 对新建目录设置存取权限。 也可以用chmod命令设置。 - p 可以是一个路径名称。 此时若路径中的某些目录尚不存在, 加上此选项后, 系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。 rmdir 命令 功能:删除空目录。 语法:rmdir [选项] dir-name 说明:dir-name表示目录名。 该命令从一个目录中删除一个或多个子目录项。 需要 特别注意的是,一个目录被删除之前必须是空的。 rm - r dir命令可代替 rmdir,但是有危险性。 删除某目录时也必须具有对父目录的写权限。 命令中各选项的含义为: - p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。 如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应 的信息。 cd 命令 功能:改变工作目录。 语法:cd [directory] 说明:该命令将当前目录改变至directory所指定的目录。 若没有指定directory, 则回到用户的主目录。 为了改变到指定目录,用户必须拥有对指定目录的执行和读 权限。 该命令可以使用通配符(通配符含义请参见第十章)。 pwd 命令 在Linux层次目录结构中,用户可以在被授权的任意目录下利用mkdir命令创建新目录,也可以利用cd命令从一个目录转换到另一个目录。 然而,没有提示符来告知用 户目前处于哪一个目录中。 要想知道当前所处的目录,可以使用pwd命令,该命令显示整个路径名。 语法:pwd 说明:此命令显示出当前工作目录的绝对路径。 ls 命令 ls是英文单词list的简写,其功能为列出目录的内容。 这是用户最常用的一个命令之一,因为用户需要不时地查看某个目录的内容。 该命令类似于DOS下的dir命令。 语法:ls [选项] [目录或是文件] 对于每个目录,该命令将列出其中的所有子目录与文件。 对于每个文件,ls将输出 其文件名以及所要求的其他信息。 默认情况下,输出条目按字母顺序排序。 当未给出目录名或是文件名时,就显示当前目录的信息。 命令中各选项的含义如下: - a 显示指定目录下所有子目录与文件,包括隐藏文件。 - A 显示指定目录下所有子目录与文件,包括隐藏文件。 但不列出“.”和 “..”。 - b 对文件名中的不可显示字符用八进制逃逸字符显示。 - c 按文件的修改时间排序。 - C 分成多列显示各项。 - d 如果参数是目录,只显示其名称而不显示其下的各文件。 往往与l选项一起使 用,以得到目录的详细信息。 - f 不排序。 该选项将使lts选项失效,并使aU选项有效。 - F 在目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记 “@”,管道(或FIFO)后面标记“|”,socket文件后面标记“=”。 - i 在输出的第一列显示文件的i节点号。 - l 以长格式来显示文件的详细信息。 这个选项最常用。 每行列出的信息依次是: 文件类型与权限 链接数 文件属主 文件属组 文件大小 建立或最近修改的时间 名字 对于符号链接文件,显示的文件名之后有“—〉”和引用文件路径名。 对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。 目录中的总块数显示在长格式列表的开头,其中包含间接块。 - L 若指定的名称为一个符号链接文件,则显示链接所指向的文件。 - m 输出按字符流格式,文件跨页显示,以逗号分开。 - n 输出格式与l选项相同,只不过在输出中文件属主和属组是用相应的UID号和 GID号来表示,而不是实际的名称。 - o 与l选项相同,只是不显示拥有者信息。 - p 在目录后面加一个“/”。 - q 将文件名中的不可显示字符用“?”代替。 - r 按字母逆序或最早优先的顺序显示输出结果。 - R 递归式地显示指定目录的各个子目录中的文件。 - s 给出每个目录项所用的块数,包括间接块。 - t 显示时按修改时间(最近优先)而不是按名字排序。 若文件修改时间相同,则 按字典顺序。 修改时间取决于是否使用了c或u选顶。 缺省的时间标记是最后一次修 改时间。 - u 显示时按文件上次存取的时间(最近优先)而不是按名字排序。 即将-t的时间 标记修改为最后一次访问的时间。 - x 按行显示出各排序项的信息。 用ls - l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型,它可以是下述类型之一:

linux 指定一个文件夹任何用户创建的任何文件都属于一个属组 这个命令是什么? 要最直接的 谢谢!!!

如果要访问这个文件夹的所有用户还没创建的话可以在用命令useradd创建用户的时候加 -g admins指定用户所属的默认组为admins 这样所有访问这个文件夹的用户创建的文件都是属于admins组的如果用户已经存在,则使用usermod -G admins 加用户原来所属的组

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐