7 控制文件访问

7.1列出文件和文件夹权限

1.文件权限

在Linux系统中,文件权限是用来管理对文件或目录的访问的。ls命令是用来列出文件和目录的内容的,同时也显示了文件的权限。文件权限主要包括读取(read)、写入(write)和执行(execute)权限,分别对应文件所有者、所属组和其他用户。以下是ls -l命令输出的示例以及对权限字段的解释:

$ ls -l
-rwxr-xr--

在这个示例中,文件权限部分被分成了四个部分,每个部分包含三个字符,表示文件所有者、所属组和其他用户的权限。让我们逐一解释每个部分的含义:

  1. 第一个字符 -:它表示文件类型和特殊权限。通常,如果是普通文件,则会显示为 -;如果是目录,则会显示为 d;其他常见类型如软链接(l)、管道(p)等。

  2. 第二到第四个字符 rwx:这些字符表示文件所有者的权限。在示例中,rwx 表示文件所有者有读(read)、写(write)和执行(execute)的权限。

  3. 第五到第七个字符 r-x:这些字符表示文件所属组的权限。在示例中,r-x 表示文件所属组有读和执行的权限,但没有写入的权限。

  4. 第八到第十个字符 r--:这些字符表示其他用户的权限。在示例中,r-- 表示其他用户只有读取的权限,没有写入和执行的权限。

需要注意的是,当没有相应的权限时,相应的位置将会显示 - 而不是 rwx

2.ls -l 文件名

  • ls -l 用于列出指定目录中的文件和子目录的详细信息。
  • 它显示每个文件或目录的权限、链接数、所有者、所属组、大小、最后修改时间和文件名。
  • 这个选项通常用于查看目录中的文件和子目录的属性。

示例:

$ ls -l /home/user/Documents
total 36
drwxr-xr-x 2 user group 4096 Jan 15 10:30 folder1
-rw-r--r-- 1 user group 8192 Jan 15 11:45 file1.txt
-rw-r--r-- 1 user group 6144 Jan 15 11:47 file2.txt

在这个示例中,列出了 /home/user/Documents 目录中的文件和子目录的详细信息。你可以看到每个文件/目录的权限、链接数、所有者、所属组、大小、最后修改时间和名称。

3.ls -ld 目录名

  • ls -ld 用于列出指定目录本身的详细信息,而不是目录中的内容。
  • 它显示了指定目录的权限、链接数、所有者、所属组、大小、最后修改时间和目录名。
  • 这个选项通常用于查看目录自身的属性,而不是目录中的内容。

示例:

$ ls -ld /home/user/Documents
drwxr-xr-x 4 user group 4096 Jan 15 10:30 /home/user/Documents

在这个示例中,列出了 /home/user/Documents 目录本身的详细信息。你可以看到该目录的权限、链接数、所有者、所属组、大小、最后修改时间和目录名。

总之,ls -l 用于列出目录中的文件和子目录的详细信息,而 ls -ld 用于列出指定目录本身的详细信息。

4.stat

stat 命令用于显示文件或文件系统的详细信息,包括文件的权限、所有者、大小、修改时间等。它提供的信息更加详细和全面,比 ls 命令更为强大。

下面是 stat 命令的基本语法:

stat [OPTION]... FILE...

其中,FILE 是指要查看信息的文件或目录。

以下是 stat 命令的一些常见选项:

  • -c, --format=FORMAT:使用指定的格式输出信息。
  • -t, --terse:以紧凑的形式输出信息。
  • -f, --file-system:显示文件系统信息而不是文件信息。

下面是一个示例,演示了如何使用 stat 命令:

$ stat myfile.txt

这将显示 myfile.txt 文件的详细信息,如权限、大小、所属用户、所属组、最近的访问、修改和更改时间等。

要以更具可读性的格式输出信息,你可以使用 -c 选项指定输出格式。例如:

$ stat -c "File: %n Size: %s bytes Owner: %U Group: %G Permissions: %A" myfile.txt

这将以自定义格式输出 myfile.txt 文件的信息,包括文件名、大小、所有者、所属组和权限。

总之,stat 命令可以提供更详细和全面的文件信息,是管理文件和文件系统时的有用工具。

7.2 更改文件权限和拥有者

1.chmod

chmod 是一个在 Unix 和类 Unix 系统(如 Linux、macOS 等)上用来改变文件或目录权限的命令。它允许用户定义文件或目录的读、写、执行权限。

chmod 命令的一般语法如下:

chmod [选项] 模式 文件名
  • 选项:

    • -R--recursive: 递归地更改目录及其子目录中的文件或目录权限。
    • -v--verbose: 显示详细信息,展示每个文件或目录的权限更改情况。
    • -c--changes: 只显示发生了更改的文件或目录的权限信息。
    • -f--quiet--silent: 不显示错误信息。
    • -x:只更改执行权限。
  • 模式:

    • 模式可以用数字或符号表示。
    • 数字模式:用数字表示权限,每个数字代表一组权限。
    • 符号模式:使用符号(如 u、g、o、+、-、=)来表示权限的增加、减少和设定。

下面是一些 chmod 命令的示例:

  1. 将文件 file.txt 的所有者(user)的执行权限设为可执行:

    chmod u+x file.txt   	#u-ser g-roup o-ther a-ll
    
  2. 将文件 file.txt 的所有者(user)和所属组(group)的读写权限设为可读写,其他用户的权限不变:

    chmod ug+rw file.txt
    
  3. 将文件 file.txt 的所有者(user)的所有权限设为可读写执行,其他用户的权限不变:

    chmod u+rwx file.txt
    
  4. 将目录 directory 及其所有子目录和文件的权限递归地设为所有者(user)具有读写执行权限,所属组(group)和其他用户具有只读权限:

    chmod -R u=rwx,g=rx,o=r directory
    
  5. 将文件 file.txt 的所有者(user)和所属组(group)的所有权限都移除:

    chmod ug-rwx file.txt
    

2.chown

chown 是用于更改文件或目录的所有者(owner)和/或所属组(group)的命令。在 Unix 和类 Unix 系统上,该命令通常用于管理文件和目录的权限。

chown 命令的一般语法如下:

chown [选项] 新所有者[:新所属组] 文件名
  • 选项:

    • -R--recursive: 递归地更改目录及其子目录中的所有者和所属组。
    • -v--verbose: 显示详细信息,展示每个文件或目录的所有者和所属组的更改情况。
    • -c--changes: 只显示发生了更改的文件或目录的所有者和所属组信息。
    • -f--quiet--silent: 不显示错误信息。
  • 新所有者[:新所属组]:

    • 新所有者:指定文件或目录的新所有者。
    • 新所属组(可选):指定文件或目录的新所属组。如果省略,则只更改所有者而不更改所属组。

下面是一些 chown 命令的示例:

  1. 将文件 file.txt 的所有者更改为用户 user1

    chown user1 file.txt
    
  2. 将文件 file.txt 的所有者更改为用户 user1,所属组更改为组 group1

    chown user1:group1 file.txt
    
  3. 将目录 directory 及其所有子目录和文件的所有者递归地更改为用户 user1,不更改所属组:

    chown -R user1 directory
    
  4. 将目录 directory 及其所有子目录和文件的所有者和所属组递归地更改为用户 user1 和组 group1

    chown -R user1:group1 directory
    
  5. 将文件 file.txt 的所有者更改为用户 user1,同时将操作设置为静默模式(不显示错误信息):

    chown -f user1 file.txt
    

通过合理使用 chown 命令,可以管理文件和目录的所有者和所属组,从而保护系统的安全性和可用性。

3.Linux特殊权限

在 Linux 中,除了常规的读(r)、写(w)、执行(x)权限之外,还有一些特殊权限用于特定的场景。这些特殊权限包括 SUID、SGID 和 Sticky Bit。以下是它们的详细解释:

  1. SUID(Set User ID)

    • 当 SUID 位被设置在一个可执行文件上时,表示该文件在执行时将以文件所有者的权限来执行,而不是执行用户的权限。
    • 用于某些需要超级用户权限执行的程序,但又不希望将超级用户权限分配给所有用户的情况。
    • 可通过 chmod 命令设置,对应的权限表示为数字 4 或 s-rwsr-xr-x.
    • 例如,设置 SUID 权限:chmod u+s file
  2. SGID(Set Group ID)

    • 当 SGID 位被设置在一个可执行文件上时,表示该文件在执行时将以文件所属组的权限来执行,而不是执行用户的权限。
    • 通常用于共享目录或文件夹,确保用户在该目录下创建的文件都具有相同的所属组。
    • 可通过 chmod 命令设置,对应的权限表示为数字 2 或 s
    • 例如,设置 SGID 权限:chmod g+s directory
  3. Sticky Bit

    • 当 Sticky Bit 被设置在一个目录上时,表示只有目录的所有者、文件的所有者和超级用户才能删除该目录中的文件。
    • 通常用于公共目录,防止普通用户删除其他用户的文件。
    • 对于文件来说,设置 Sticky Bit 没有特殊的作用。
    • 可通过 chmod 命令设置,对应的权限表示为数字 1 或 t
    • 例如,设置 Sticky Bit 权限:chmod +t directory

特殊权限可以通过 ls -l 命令来查看。在权限列表中,SUID 位显示为 sS,SGID 位显示为 sS,而 Sticky Bit 显示为 tT

$ ls -l file
-rwsr-xr-t 1 owner group size date file

4.数值法改权限

chmode mnnn 可执行文件
m:SUID=4 SGID=2 Sticky=1,可累加
n:r=4,w=2,x=1,可累加

7.3 控制默认权限

1.umask

umask 是一个用于设置默认文件权限掩码的命令。文件权限掩码决定了在创建新文件或目录时所应用的默认权限。换句话说,umask 命令可以用来限制新文件或目录的权限,以确保它们不会具有不必要的权限。

umask 命令的一般语法如下:

umask [选项] [新掩码]
  • 选项:

    • -S--symbolic:以符号形式显示当前的掩码。
    • -p--physical:显示真实的 umask 值(不考虑文件权限掩码中的特殊位)。
    • -S--help:显示帮助信息。
  • 新掩码:

    • 一个三位数字,用来设置文件权限掩码。每一位分别代表文件所有者、文件所属组和其他用户的权限,其中 0 表示允许该权限,1 表示禁止该权限。

默认情况下,Linux 系统中的 umask 值通常设置为 022,这意味着文件的默认权限是 -rw-r--r--(即,文件所有者具有读写权限,但没有执行权限,而组和其他用户只有读权限);目录的默认权限是 drwxr-xr-x(即,目录所有者具有读写权限,但没有执行权限,而组和其他用户只有读和执行权限)。

以下是一些常见的 umask 命令用法和示例:

  1. 显示当前的 umask 值:

    umask
    
  2. 以符号形式显示当前的 umask 值:

    umask -S
    
  3. 设置新的 umask 值为 027:

    umask 027
    
  4. 以符号形式显示真实的 umask 值(不考虑文件权限掩码中的特殊位):

    umask -p
    

通过合理设置 umask 值,系统管理员可以确保新创建的文件和目录具有适当的权限,从而提高系统的安全性和可管理性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值