7.1列出文件和文件夹权限
1.文件权限
在Linux系统中,文件权限是用来管理对文件或目录的访问的。ls
命令是用来列出文件和目录的内容的,同时也显示了文件的权限。文件权限主要包括读取(read)、写入(write)和执行(execute)权限,分别对应文件所有者、所属组和其他用户。以下是ls -l
命令输出的示例以及对权限字段的解释:
$ ls -l
-rwxr-xr--
在这个示例中,文件权限部分被分成了四个部分,每个部分包含三个字符,表示文件所有者、所属组和其他用户的权限。让我们逐一解释每个部分的含义:
-
第一个字符
-
:它表示文件类型和特殊权限。通常,如果是普通文件,则会显示为-
;如果是目录,则会显示为d
;其他常见类型如软链接(l
)、管道(p
)等。 -
第二到第四个字符
rwx
:这些字符表示文件所有者的权限。在示例中,rwx
表示文件所有者有读(read)、写(write)和执行(execute)的权限。 -
第五到第七个字符
r-x
:这些字符表示文件所属组的权限。在示例中,r-x
表示文件所属组有读和执行的权限,但没有写入的权限。 -
第八到第十个字符
r--
:这些字符表示其他用户的权限。在示例中,r--
表示其他用户只有读取的权限,没有写入和执行的权限。
需要注意的是,当没有相应的权限时,相应的位置将会显示 -
而不是 r
、w
或 x
。
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
命令的示例:
-
将文件
file.txt
的所有者(user)的执行权限设为可执行:chmod u+x file.txt #u-ser g-roup o-ther a-ll
-
将文件
file.txt
的所有者(user)和所属组(group)的读写权限设为可读写,其他用户的权限不变:chmod ug+rw file.txt
-
将文件
file.txt
的所有者(user)的所有权限设为可读写执行,其他用户的权限不变:chmod u+rwx file.txt
-
将目录
directory
及其所有子目录和文件的权限递归地设为所有者(user)具有读写执行权限,所属组(group)和其他用户具有只读权限:chmod -R u=rwx,g=rx,o=r directory
-
将文件
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
命令的示例:
-
将文件
file.txt
的所有者更改为用户user1
:chown user1 file.txt
-
将文件
file.txt
的所有者更改为用户user1
,所属组更改为组group1
:chown user1:group1 file.txt
-
将目录
directory
及其所有子目录和文件的所有者递归地更改为用户user1
,不更改所属组:chown -R user1 directory
-
将目录
directory
及其所有子目录和文件的所有者和所属组递归地更改为用户user1
和组group1
:chown -R user1:group1 directory
-
将文件
file.txt
的所有者更改为用户user1
,同时将操作设置为静默模式(不显示错误信息):chown -f user1 file.txt
通过合理使用 chown
命令,可以管理文件和目录的所有者和所属组,从而保护系统的安全性和可用性。
3.Linux特殊权限
在 Linux 中,除了常规的读(r)、写(w)、执行(x)权限之外,还有一些特殊权限用于特定的场景。这些特殊权限包括 SUID、SGID 和 Sticky Bit。以下是它们的详细解释:
-
SUID(Set User ID):
- 当 SUID 位被设置在一个可执行文件上时,表示该文件在执行时将以
文件所有者
的权限来执行,而不是执行用户的权限。 - 用于某些需要超级用户权限执行的程序,但又不希望将超级用户权限分配给所有用户的情况。
- 可通过
chmod
命令设置,对应的权限表示为数字 4 或s
。-rwsr-xr-x.
- 例如,设置 SUID 权限:
chmod u+s file
- 当 SUID 位被设置在一个可执行文件上时,表示该文件在执行时将以
-
SGID(Set Group ID):
- 当 SGID 位被设置在一个可执行文件上时,表示该文件在执行时将以
文件所属组
的权限来执行,而不是执行用户的权限。 通常用于共享目录或文件夹
,确保用户在该目录下创建的文件都具有相同的所属组。- 可通过
chmod
命令设置,对应的权限表示为数字 2 或s
。 - 例如,设置 SGID 权限:
chmod g+s directory
- 当 SGID 位被设置在一个可执行文件上时,表示该文件在执行时将以
-
Sticky Bit:
- 当 Sticky Bit 被设置在一个目录上时,表示只有目录的所有者、文件的所有者和超级用户才能删除该目录中的文件。
- 通常用于公共目录,防止普通用户删除其他用户的文件。
- 对于文件来说,设置 Sticky Bit 没有特殊的作用。
- 可通过
chmod
命令设置,对应的权限表示为数字 1 或t
。 - 例如,设置 Sticky Bit 权限:
chmod +t directory
特殊权限可以通过 ls -l
命令来查看。在权限列表中,SUID 位显示为 s
或 S
,SGID 位显示为 s
或 S
,而 Sticky Bit 显示为 t
或 T
。
$ 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
命令用法和示例:
-
显示当前的 umask 值:
umask
-
以符号形式显示当前的 umask 值:
umask -S
-
设置新的 umask 值为 027:
umask 027
-
以符号形式显示真实的 umask 值(不考虑文件权限掩码中的特殊位):
umask -p
通过合理设置 umask
值,系统管理员可以确保新创建的文件和目录具有适当的权限,从而提高系统的安全性和可管理性。