当前位置: 首页 > news >正文

【Linux系统】详解Linux权限

文章目录

  • 前言
  • 一、学习Linux权限的铺垫知识
    • 1.Linux的文件分类
    • 2.Linux的用户
      • 2.1 Linux下用户分类
      • 2.2 创建普通用户
      • 2.3 切换用户
      • 2.4 sudo(提升权限的指令)
  • 二、Linux权限的概念以及修改方法
    • 1.权限的概念
    • 2.文件访问权限 和 访问者身份的相关修改(设置)方法
      • 2.1 文件权限属性的8进制数值表示方法
      • 2.2 文件的初始权限 和 umask 指令
      • 2.3 chmod 指令
      • 2.4 chown 指令
      • 2.5 chgrp 指令
  • 三、Linux权限的效果实践
    • 1.普通文件的权限效果
    • 2.目录文件的权限效果
    • 3.文件的权限效果受其所在目录权限的影响
  • 四、粘滞位(常用于合作开发)


前言

一、学习Linux权限的铺垫知识(Linux的文件分类 和 Linux的用户相关知识)
二、Linux权限的概念以及修改方法(文件访问权限 和 访问者身份的相关修改方法)
三、Linux权限的效果实践(普通文件的权限效果 和 目录文件的权限效果)
四、粘滞位(常用于合作开发)


一、学习Linux权限的铺垫知识

1.Linux的文件分类

windows操作系统区分文件类型,是用文件后缀区分的;
Linux操作系统区分文件类型,是以文件的属性列区分的

在这里插入图片描述

文件类型:
◦ d:目录文件(文件夹)
◦ -:普通文件 (例如:源代码、文本文件、可执行程序、音视频、各种文档 和 库文件等)
◦ l:软链接(类似Windows的快捷方式)
◦ b:块设备文件(例如硬盘、光驱等)
◦ p:管道文件
◦ c:字符设备文件(例如屏幕等串口设备)
◦ s:套接口文件

注: 前两种文件类型是常见类型,后面几种文件类型一般都是在特定场景下才会用到(不常用)。故后面只对前两种类型的文件进行权限讨论。

  1. Linux操作系统区分文件类型,是以文件的属性列区分的,更改文件的后缀不会影响文件类型:
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 4
drwxrwxr-x 2 zh zh 4096 Apr 24 15:01 ppt
-rw-rw-r-- 1 zh zh    0 Apr 24 15:00 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ mv ppt ppt.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 4
drwxrwxr-x 2 zh zh 4096 Apr 24 15:01 ppt.txt
-rw-rw-r-- 1 zh zh    0 Apr 24 15:00 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ mv test.c test
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 4
drwxrwxr-x 2 zh zh 4096 Apr 24 15:01 ppt.txt
-rw-rw-r-- 1 zh zh    0 Apr 24 15:00 test
  1. 虽然Linux操作系统不以文件后缀区分文件类型,但这并不代表Linux下的工具不使用文件后缀(比如gcc):

两个普通文件 test.c 和 test.txt 中的内容一模一样,只有文件后缀不同。gcc成功编译 test.c 文件,但编译 test.txt 文件直接报错。可以看出gcc工具使用了文件后缀,它只会编译特定后缀的普通文件。

[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 4
-rw-rw-r-- 1 zh zh 73 Apr 24 15:12 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ cat test.c
#include <stdio.h>int main()
{printf("hello world!\n");return 0;
}
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ gcc test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 16
-rwxrwxr-x 1 zh zh 8360 Apr 24 15:13 a.out
-rw-rw-r-- 1 zh zh   73 Apr 24 15:12 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ./a.out
hello world!
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 4
-rw-rw-r-- 1 zh zh 73 Apr 24 15:12 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ cat test.txt
#include <stdio.h>int main()
{printf("hello world!\n");return 0;
}
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ gcc test.txt
test.txt: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status

2.Linux的用户

2.1 Linux下用户分类

Linux是一个多用户操作系统。
Linux下的用户分为两类:超级用户(root)和 普通用户。

• 超级用户:可以在linux系统下做任何事情,不受权限限制
• 普通用户:在linux下做有限的事情,受权限限制
( 超级用户的命令行提示符是“#”,普通用户的命令行提示符是“$” )

root用户在安装Linux操作系统时就创建好了,root用户只有一个,而普通用户可以有多个。
(root用户可以创建 和 删除普通用户)

2.2 创建普通用户

每个用户都有对应的家目录,当启动机器时,登录指定用户,他们都会默认从自己的家目录开始。
root用户在安装操作系统的时候,就已经内置了工作目录: /root,这就是root用户的家目录,登录root用户时会默认从这个路径开始。
root用户可以创建普通用户,每次新建⼀个普通用户都会在/home目录下为新用户创建新的工作目录,目录以新用户名称命名。

[zh@iZbp1dr1jtgcuih41mw88oZ d3]$ cd /home
[zh@iZbp1dr1jtgcuih41mw88oZ home]$ ls
ccy  zh

比如我的Linux机器下创建了两个普通用户,ccy 和 zh,那么他们的家目录分别是/home/ccy 和 /home/zh

  1. 铺垫完毕,接下来展示root用户是如何创建普通用户:
    • 第一步(添加新用户) :adduser 用户名(自己取)
    • 第二步(为新用户设置密码):passwd 用户名

    注: Linux下输密码是默认不回显的,为了保护用户隐私)
[root@iZbp1dr1jtgcuih41mw88oZ zh]# adduser lisi
[root@iZbp1dr1jtgcuih41mw88oZ zh]# passwd lisi
Changing password for user lisi.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@iZbp1dr1jtgcuih41mw88oZ zh]# ls /home
ccy  lisi  zh
  1. root用户删除普通用户(userdel -r 用户名):
[root@iZbp1dr1jtgcuih41mw88oZ zh]# ls /home
ccy  lisi  zh
[root@iZbp1dr1jtgcuih41mw88oZ zh]# userdel -r lisi
[root@iZbp1dr1jtgcuih41mw88oZ zh]# ls /home
ccy  zh

2.3 切换用户

切换用户的两种方法:

语法:su 用户名
功能:切换到指定用户(切换到root用户时,root可省略),不会更改当前工作目录

语法:su - 用户名
功能:切换到指定用户(切换到root用户时,root可省略),将工作目录切换到指定用户的家目录

注: root用户切换到普通用户不用输密码;普通用户切换到root用户 或 其他普通用户都要输对应密码。

  1. su 用户名:切换到指定用户(切换到root用户时,root可省略),不会更改当前工作目录
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ whoami
zh
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ pwd
/home/zh/ppt
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ su
Password: 
[root@iZbp1dr1jtgcuih41mw88oZ ppt]# whoami
root
[root@iZbp1dr1jtgcuih41mw88oZ ppt]# pwd
/home/zh/ppt
[root@iZbp1dr1jtgcuih41mw88oZ ppt]# su zh
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ whoami
zh
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ pwd
/home/zh/ppt
  1. su - 用户名:切换到指定用户(切换到root用户时,root可省略),将工作目录切换到指定用户的家目录
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ whoami
zh
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ pwd
/home/zh/ppt
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ su -
Password: 
Last login: Thu Apr 24 16:39:36 CST 2025 on pts/0
[root@iZbp1dr1jtgcuih41mw88oZ ~]# whoami
root
[root@iZbp1dr1jtgcuih41mw88oZ ~]# pwd
/root
[root@iZbp1dr1jtgcuih41mw88oZ ~]# su - zh
Last login: Thu Apr 24 16:42:54 CST 2025 on pts/0
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ whoami
zh
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ pwd
/home/zh

2.4 sudo(提升权限的指令)

sudo(superuser do)是Linux系统中用于普通用户临时提升权限的指令,允许普通用户以root权限执行单条命令。(该机制需通过修改/etc/sudoers配置文件实现)

  1. 普通用户 zh 想将 test.txt文件 复制到 /usr路径下,但是这个操作没有被允许,因为权限不够:
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ cp test.txt /usr
cp: cannot create regular file ‘/usr/test.txt’: Permission denied

权限不够,那我们就尝试使用 sudo 指令来提升普通用户的权限,但是 sudo 执行这条命令依然没有成功,原因是:zh is not in the sudoers file(该用户没有在sudoers file文件中,这个文件实际就是/etc/sudoers配置文件)

[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ sudo cp test.txt /usrWe trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:#1) Respect the privacy of others.#2) Think before you type.#3) With great power comes great responsibility.[sudo] password for zh: 
zh is not in the sudoers file.  This incident will be reported.
  1. 普通用户要想使用sudo指令提升权限,需要使用root用户修改/etc/sudoers配置文件,root用户是管理员,修改该配置文件将普通用户加入,就相当于将该普通用户放进白名单。 修改该配置文件的过程如下:

第一步:在root用户下,打开/etc/sudoers配置文件(通过nano编辑器)。跳转到100行左右位置找到下图圈出的内容

[root@iZbp1dr1jtgcuih41mw88oZ zh]# nano /etc/sudoers

在这里插入图片描述
第二步:将普通用户zh加入该配置文件。模仿第一行root用户的写法,另起一行,输入zh后按tab键,再输入ALL=(ALL),再按tab键,最后输入ALL。配置完毕,保存退出。
在这里插入图片描述

  1. 将普通用户zh加入到/etc/sudoers配置文件后。再使用 sudo 提权执行这条命令就成功了。
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ sudo cp test.txt /usr
[sudo] password for zh: 
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l /usr/test.txt
-rw-r--r-- 1 root root 0 Apr 24 19:05 /usr/test.txt

二、Linux权限的概念以及修改方法

1.权限的概念

权限 = 用户身份 + 文件的权限属性

  1. 文件访问者身份的分类:

• 文件的所有者:u—User
• 文件的所属组(组中用户大于等于1人):g—Group
• 其它用户(除所有者 和 所属组中用户外的用户):o—Others
(注:用户初创建文件时,文件的所属组默认只有你自己)

其它用户在文件信息中不会显示,因为它也无需显示,只要知道文件的所有者 和 所属组的信息也就知道了其它用户的信息(其它用户是除所有者 和 所属组中用户外的所有用户)

  1. 权限属性的分类:

• 读(r/4):Read对普通文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录下文件信息的权限
• 写(w/2):Write对普通文件而言,具有修改文件内容的权限;对目录来说具有删除、新增 和 移动目录内文件的权限
• 执行(x/1):execute对普通文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
• “—”:表示不具有该项权限

在这里插入图片描述
文件的权限属性有9列,文件访问者身份有3种,正好每种身份对应3列权限属性。(文件的所有者对应前3列,文件的所属组对应中间3列,其它用户对应最后3列)

2.文件访问权限 和 访问者身份的相关修改(设置)方法

2.1 文件权限属性的8进制数值表示方法

-rw-r--r-- 1 root root 0 Apr 24 19:05 /usr/test.txt

rw-r- -r- -对应110100100 转换成8进制:644

-rw-rw-r-- 1 zh zh    0 Apr 24 18:45 test.txt

rw-rw-r- -对应110110100 转换成8进制:664

-rwxr-xr-x  1 root root     62688 Nov  1  2021 ar

rwxr-xr-x对应111101101 转换成8进制:755

drwxrwxr-x 2 zh zh 4096 Apr 24 16:39 ppt

rwxrwxr-x对应111111101 转换成8进制:775

2.2 文件的初始权限 和 umask 指令

umask 指令的介绍:

使用格式:
(1)查看文件掩码:umask
(2)修改文件掩码:umask 新的文件掩码值
功能:
• 查看或修改文件掩码
• 新建普通文件的默认权限=666
• 新建目录的默认权限=777
• 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask&(~umask)
说明: 超级用户默认掩码值为0022,普通用户默认为0002。(计算文件权限时忽略文件掩码的第一位)

  1. 得到新建文件起始权限的计算过程

新建普通文件的默认权限=666 ,新建目录的默认权限=777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask&(~umask)
普通用户的权限掩码默认为0002 (计算文件权限时忽略文件掩码的第一位,也就是把0002当成002)

要转换为2进制计算:权限掩码002的2进制为000 000 010,对权限掩码取反~得 111 111 101
新建普通文件的默认权限 = 666 转换为2进制为 110 110 110
新建普通文件的起始权限 = 110 110 110 & 111 111 101 = 110 110 100,也就是 rw-rw-r- -
新建目录的默认权限 = 777 转换为2进制为 111 111 111
新建目录的起始权限 = 111 111 111 & 111 111 101 = 111 111 101,也就是 rwxrwxr-x

[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ umask
0002
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ touch test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ mkdir ppt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 4
drwxrwxr-x 2 zh zh 4096 Apr 24 21:14 ppt
-rw-rw-r-- 1 zh zh    0 Apr 24 21:13 test.txt
  1. 修改文件掩码会影响文件的起始权限
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ umask 0000
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ umask
0000
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ touch test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ mkdir ppt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 4
drwxrwxrwx 2 zh zh 4096 Apr 24 21:37 ppt
-rw-rw-rw- 1 zh zh    0 Apr 24 21:36 test.txt

2.3 chmod 指令

使用格式:
(1)chmod u/g/o[+/-/=]rwx 文件名
(同时修改多个身份对应的权限要用" , "隔开)
(2)chmod a[+/-/=]rwx 文件名
(3)chmod 8进制权限写法 文件名
功能: 设置文件的访问权限
说明: 只有文件的拥有者和root才可以改变文件的权限
用户符号:
◦ u:所有者
◦ g:所属组
◦ o:其它用户
◦ a:所有用户

  1. chmod u/g/o[+/-/=]rwx 文件名

(1)chmod u/g/o+rwx 文件名

[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-r--r--r-- 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod u+w test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rw-r--r-- 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod g+w test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rw-rw-r-- 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod o+w test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rw-rw-rw- 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod u+x,g+x,o+x test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rwxrwxrwx 1 zh zh 0 Apr 24 21:36 test.txt

(2)chmod u/g/o-rwx 文件名

[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rwxrwxrwx 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod u-rx,g-wx,o-x test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
--w-r--rw- 1 zh zh 0 Apr 24 21:36 test.txt

(3)chmod u/g/o=rwx 文件名

[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
--w-r--rw- 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod u=rwx,g=rwx,o=rwx test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rwxrwxrwx 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod u=r,g=w,o=x test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-r---w---x 1 zh zh 0 Apr 24 21:36 test.txt
  1. chmod a[+/-/=]rwx 文件名
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rwxrwxrwx 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod a-wx test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-r--r--r-- 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod a+x test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-r-xr-xr-x 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod a=w test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
--w--w--w- 1 zh zh 0 Apr 24 21:36 test.txt
  1. chmod 8进制权限写法 文件名
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
--w--w--w- 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod 777 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rwxrwxrwx 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod 111 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
---x--x--x 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ chmod 614 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rw---xr-- 1 zh zh 0 Apr 24 21:36 test.txt

2.4 chown 指令

格式:
(1)chown 新所有者名 文件名
(2)chown 新所有者名:新所属组名 文件名
功能: 可以修改文件的所有者,也可以同时修改文件的所有者和所属组(需要root权限)
说明: 新所有者名和新所属组名必须是已存在的

  1. chown 新所有者名 文件名(修改文件的所有者)
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rw---xr-- 1 zh zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ sudo chown ccy test.txt
[sudo] password for zh: 
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rw---xr-- 1 ccy zh 0 Apr 24 21:36 test.txt
  1. chown 新所有者名:新所属组名 文件名(同时修改文件的所有者和所属组)
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rw---xr-- 1 ccy ccy 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ sudo chown zh:zh test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rw---xr-- 1 zh zh 0 Apr 24 21:36 test.txt

2.5 chgrp 指令

格式: chgrp 新所属组名 文件名
功能: 修改文件的所属组(需要root权限)
说明: 新所属组名必须是已存在的

[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rw---xr-- 1 ccy zh 0 Apr 24 21:36 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ sudo chgrp ccy test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ~]$ ls -l
total 0
-rw---xr-- 1 ccy ccy 0 Apr 24 21:36 test.txt

三、Linux权限的效果实践

1.普通文件的权限效果

• 读(r/4):read对普通文件而言,具有读取文件内容的权限
• 写(w/2):write对普通文件而言,具有修改文件内容的权限
• 执行(x/1):execute对普通文件而言,具有执行文件的权限
• “—”:表示不具有该项权限

  1. w 对普通文件而言,具有修改文件内容的权限;r 对普通文件而言,具有读取文件内容的权限

test.txt 文件 的所有者具有rw权限,所属组具有r权限,其它用户没有任何权限。
zh用户属于该文件的所有者,所以他具有读取文件内容和修改文件内容的权限;
ccy用户属于该文件的所属组,所以他具有读取文件内容的权限;
lihua用户属于该文件的其它用户,所以他不具备任何操作该文件的权限

[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ ls -l
total 4
-rw-r----- 1 zh ccy 12 Apr 25 19:03 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ echo "hello world" > test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ cat test.txt
hello world
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ su ccy
Password: 
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ echo "one piece" > test.txt
bash: test.txt: Permission denied
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ cat test.txt
hello world
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ su lihua
Password: 
[lihua@iZbp1dr1jtgcuih41mw88oZ ppt]$ echo "one piece" > test.txt
bash: test.txt: Permission denied
[lihua@iZbp1dr1jtgcuih41mw88oZ ppt]$ cat test.txt
cat: test.txt: Permission denied

// Permission denied 代表权限不够,操作不被允许

  1. 一个可执行文件 = 可执行权限 + 可执行能力
    (一个文件具备可执行权限并不代表这个文件能执行)

(1)gcc 编译 test.c 文件生成了可执行文件 a.out,紧接着执行 a.out,执行成功;
我们删去了 a.out文件的x权限,然后再次执行 a.out,执行失败(a.out文件具备可执行能力,但不具备可执行权限)

[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ ls -l
total 4
-rw-rw-r-- 1 zh zh 69 Apr 25 20:14 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ cat test.c
#include <stdio.h>
int main()
{printf("one piece\n");return 0;
}
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ gcc test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ ls -l
total 16
-rwxrwxr-x 1 zh zh 8360 Apr 25 20:14 a.out
-rw-rw-r-- 1 zh zh   69 Apr 25 20:14 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ ./a.out
one piece
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ chmod u-x a.out
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ ls -l
total 16
-rw-rwxr-x 1 zh zh 8360 Apr 25 20:14 a.out
-rw-rw-r-- 1 zh zh   69 Apr 25 20:14 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ ./a.out
bash: ./a.out: Permission denied

(2)test.c 文件是一个未经过编译的普通c文件,它不具备可执行能力,即使我们赋予它可执行权限,它也依旧不能被执行(test.c 文件具备可执行权限,但不具备可执行能力)

[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ ls -l
total 4
-rw-rw-r-- 1 zh zh 69 Apr 25 20:14 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ chmod u+x test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ ls -l
total 4
-rwxrw-r-- 1 zh zh 69 Apr 25 20:14 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ ./test.c
./test.c: line 2: syntax error near unexpected token `('
./test.c: line 2: `int main()'

2.目录文件的权限效果

• 读(r/4):read对目录来说,具有浏览该目录下文件信息的权限
• 写(w/2):write对目录来说,具有删除、新增 和 移动目录下文件 以及 修改目录下文件的文件名的权限
• 执行(x/1):execute对目录来说,具有进入目录的权限
• “—”:表示不具有该项权限

注: 对目录来说,x 权限是 r 和 w 权限的前提,不具备 x 权限,即使有 rw 权限也没有任何效果。

  1. r 对目录来说,具有浏览该目录下文件信息的权限;w 对目录来说,具有删除、新增 和 移动目录下文件 以及 修改目录下文件的文件名的权限

ppt目录 的所有者具有rwx权限,所属组具有rx权限,其它用户具有x权限。
zh用户属于该目录的所有者,所以他具有进入目录、浏览该目录下文件信息 以及 具有删除、新增 和 移动目录下文件 的权限;
ccy用户属于该目录的所属组,所以他具有进入目录、浏览该目录下文件信息 的权限;
lihua用户属于该目录的其它用户,所以他只具有进入目录的权限

[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l
total 4
drwxr-x--x 3 zh ccy 4096 Apr 25 21:23 ppt
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l ppt
total 8
drwxrwxr-x 2 zh zh 4096 Apr 25 20:55 ggb
-rw-rw-r-- 1 zh zh    0 Apr 25 20:55 hello.txt
-rw-rw-r-- 1 zh zh   69 Apr 25 20:14 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ rm ppt/hello.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l ppt
total 8
drwxrwxr-x 2 zh zh 4096 Apr 25 20:55 ggb
-rw-rw-r-- 1 zh zh   69 Apr 25 20:14 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ touch ppt/dwg
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l ppt
total 8
-rw-rw-r-- 1 zh zh    0 Apr 25 21:30 dwg
drwxrwxr-x 2 zh zh 4096 Apr 25 20:55 ggb
-rw-rw-r-- 1 zh zh   69 Apr 25 20:14 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ mv ppt/dwg ppt/abc.txt
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l ppt
total 8
-rw-rw-r-- 1 zh zh    0 Apr 25 21:32 abc.txt
drwxrwxr-x 2 zh zh 4096 Apr 25 20:55 ggb
-rw-rw-r-- 1 zh zh   69 Apr 25 20:14 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ su ccy
Password: 
[ccy@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l
total 4
drwxr-x--x 3 zh ccy 4096 Apr 25 21:32 ppt
[ccy@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l ppt
total 8
-rw-rw-r-- 1 zh zh    0 Apr 25 21:32 abc.txt
drwxrwxr-x 2 zh zh 4096 Apr 25 20:55 ggb
-rw-rw-r-- 1 zh zh   69 Apr 25 20:14 test.c
[ccy@iZbp1dr1jtgcuih41mw88oZ ufc]$ rm ppt/abc.txt
rm: remove write-protected regular empty file ‘ppt/abc.txt’? y
rm: cannot remove ‘ppt/abc.txt’: Permission denied
[ccy@iZbp1dr1jtgcuih41mw88oZ ufc]$ touch ppt/one.txt
touch: cannot touch ‘ppt/one.txt’: Permission denied
[ccy@iZbp1dr1jtgcuih41mw88oZ ufc]$ su lihua
Password: 
[lihua@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l
total 4
drwxr-x--x 3 zh ccy 4096 Apr 25 21:32 ppt
[lihua@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l ppt
ls: cannot open directory ppt: Permission denied
[lihua@iZbp1dr1jtgcuih41mw88oZ ufc]$ touch ppt/one.txt
touch: cannot touch ‘ppt/one.txt’: Permission denied
[lihua@iZbp1dr1jtgcuih41mw88oZ ufc]$ cd ppt
[lihua@iZbp1dr1jtgcuih41mw88oZ ppt]$ pwd
/home/zh/ufc/ppt
  1. 对目录来说,x 权限是 r 和 w 权限的前提,不具备 x 权限,即使有 rw 权限也没有任何效果
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l
total 4
drw-rw-rw- 3 zh ccy 4096 Apr 25 21:32 ppt
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l ppt
ls: cannot access ppt/ggb: Permission denied
ls: cannot access ppt/abc.txt: Permission denied
ls: cannot access ppt/test.c: Permission denied
total 0
-????????? ? ? ? ?            ? abc.txt
d????????? ? ? ? ?            ? ggb
-????????? ? ? ? ?            ? test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ rm ppt/abc.txt
rm: cannot remove ‘ppt/abc.txt’: Permission denied
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ touch ppt/one.txt
touch: cannot touch ‘ppt/one.txt’: Permission denied

3.文件的权限效果受其所在目录权限的影响

  1. ccy用户没有进入ppt目录的权限(我们是使用zh用户进入ppt目录,再切成ccy用户),
    所以即使ppt目录中的 ggb目录 和 test.c文件 给了ccy用户所有权限,但是ccy用户仍然不能对这两个文件进行任何操作。因为ccy用户连进入ppt目录的权限都没有,所以不具备操作其下文件的资格。
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l
total 4
drwx------ 3 zh zh 4096 Apr 25 22:21 ppt
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ cd ppt
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ ls -l
total 8
drwxrwxrwx 3 ccy ccy 4096 Apr 25 22:03 ggb
-rwxrwxrwx 1 ccy ccy   12 Apr 25 22:24 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ppt]$ su ccy 
Password: 
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ echo "hello world" > test.c
bash: test.c: Permission denied
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ cat test.c
cat: test.c: Permission denied
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ ls -l ggb
ls: cannot access ggb: Permission denied
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ touch ggd/kfc.txt
touch: cannot touch ‘ggd/kfc.txt’: Permission denied
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ cd ggb
bash: cd: ggb: Permission denied
  1. ccy用户具有进入ppt的权限,就可以正常操作其下文件
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l
total 4
drwx--x--x 3 zh zh 4096 Apr 25 22:21 ppt
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ ls -l ppt
total 8
drwxrwxrwx 3 ccy ccy 4096 Apr 25 22:03 ggb
-rwxrwxrwx 1 ccy ccy   12 Apr 25 22:24 test.c
[zh@iZbp1dr1jtgcuih41mw88oZ ufc]$ su ccy
Password: 
[ccy@iZbp1dr1jtgcuih41mw88oZ ufc]$ cd ppt
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ echo "hello world" > test.c
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ cat test.c
hello world
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ ls -l ggb
total 4
drwxrwxr-x 2 zh zh 4096 Apr 25 22:03 lgd
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ touch ggb/kfc.txt
[ccy@iZbp1dr1jtgcuih41mw88oZ ppt]$ cd ggb
[ccy@iZbp1dr1jtgcuih41mw88oZ ggb]$ pwd
/home/zh/ufc/ppt/ggb

四、粘滞位(常用于合作开发)

普通用户的家目录只允许自己和root用户进入;root用户的家目录只允许root用户进入。所以多名普通用户要进行合作开发的话,一般不会在家目录下进行。

[root@iZbp1dr1jtgcuih41mw88oZ home]# pwd
/home
[root@iZbp1dr1jtgcuih41mw88oZ home]# ls -l
total 12
drwx------ 2 ccy   ccy   4096 Apr 10 21:03 ccy
drwx------ 2 lihua lihua 4096 Apr 25 23:14 lihua
drwx------ 3 zh    zh    4096 Apr 25 21:03 zh
[root@iZbp1dr1jtgcuih41mw88oZ /]# ls -ld root
dr-xr-x---. 6 root root 4096 Apr 14 11:02 root

想要实现多名用户合作开发(数据共享),一般会用root用户在家目录外创建一个公共的目录,给其他用户身份放开权限(rwx),让多名普通用户以其他用户身份在公共的目录下实现合作开发:

[root@iZbp1dr1jtgcuih41mw88oZ /]# mkdir teamwork
[root@iZbp1dr1jtgcuih41mw88oZ /]# ls -ld teamwork
drwxr-xr-x 2 root root 4096 Apr 27 17:10 teamwork
[root@iZbp1dr1jtgcuih41mw88oZ /]# chmod 757 teamwork
[root@iZbp1dr1jtgcuih41mw88oZ /]# ls -ld teamwork
drwxr-xrwx 2 root root 4096 Apr 27 17:10 teamwork

多名普通用户以其他用户身份在公共的目录 /teamwork 进行数据共享:

[zh@iZbp1dr1jtgcuih41mw88oZ /]$ cd teamwork
[zh@iZbp1dr1jtgcuih41mw88oZ teamwork]$ touch test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ teamwork]$ mkdir ppt
[zh@iZbp1dr1jtgcuih41mw88oZ teamwork]$ ls -l
total 4
drwxrwxr-x 2 zh zh 4096 Apr 27 17:15 ppt
-rw-rw-r-- 1 zh zh    0 Apr 27 17:15 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ teamwork]$ echo "hello world" > test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ teamwork]$ cat test.txt
hello world
[ccy@iZbp1dr1jtgcuih41mw88oZ /]$ cd teamwork
[ccy@iZbp1dr1jtgcuih41mw88oZ teamwork]$ ls -l
total 8
drwxrwxr-x 2 zh zh 4096 Apr 27 17:15 ppt
-rw-rw-r-- 1 zh zh   12 Apr 27 17:17 test.txt
[ccy@iZbp1dr1jtgcuih41mw88oZ teamwork]$ touch d1.txt
[ccy@iZbp1dr1jtgcuih41mw88oZ teamwork]$ ls -l
total 8
-rw-rw-r-- 1 ccy ccy    0 Apr 27 17:19 d1.txt
drwxrwxr-x 2 zh  zh  4096 Apr 27 17:15 ppt
-rw-rw-r-- 1 zh  zh    12 Apr 27 17:17 test.txt
[ccy@iZbp1dr1jtgcuih41mw88oZ teamwork]$ echo "one piece" > d1.txt
[ccy@iZbp1dr1jtgcuih41mw88oZ teamwork]$ cat d1.txt
one piece
[ccy@iZbp1dr1jtgcuih41mw88oZ teamwork]$ cat test.txt
hello world
[lihua@iZbp1dr1jtgcuih41mw88oZ /]$ cd teamwork
[lihua@iZbp1dr1jtgcuih41mw88oZ teamwork]$ ls -l
total 12
-rw-rw-r-- 1 ccy ccy   10 Apr 27 17:20 d1.txt
drwxrwxr-x 2 zh  zh  4096 Apr 27 17:15 ppt
-rw-rw-r-- 1 zh  zh    12 Apr 27 17:17 test.txt
[lihua@iZbp1dr1jtgcuih41mw88oZ teamwork]$ cat d1.txt
one piece
[lihua@iZbp1dr1jtgcuih41mw88oZ teamwork]$ cat test.txt
hello world

以上可以看出多名普通用户确实在root用户创建的公共目录/teamwork下实现了数据共享。但其实还存在一些问题,那就是在这个目录下普通用户权限过大,他们可以直接删除其他人创建的文件,如下:

[lihua@iZbp1dr1jtgcuih41mw88oZ /]$ cd teamwork
[lihua@iZbp1dr1jtgcuih41mw88oZ teamwork]$ ls -l
total 12
-rw-rw-r-- 1 ccy ccy   10 Apr 27 17:20 d1.txt
drwxrwxr-x 2 zh  zh  4096 Apr 27 17:15 ppt
-rw-rw-r-- 1 zh  zh    12 Apr 27 17:17 test.txt
[lihua@iZbp1dr1jtgcuih41mw88oZ teamwork]$ rm d1.txt
rm: remove write-protected regular file ‘d1.txt’? y
[lihua@iZbp1dr1jtgcuih41mw88oZ teamwork]$ rm -r ppt
rm: remove write-protected directory ‘ppt’? y
[lihua@iZbp1dr1jtgcuih41mw88oZ teamwork]$ ls -l
total 4
-rw-rw-r-- 1 zh zh 12 Apr 27 17:17 test.txt

合作开发是为了多名普通用户之间实现数据共享,但是却不希望自己创建的文件被其他人直接删除,为了限制合作开发下普通用户的权限,引入了 “粘滞位” 的用法。当一个目录被设置为 “粘滞位” (用chmod +t),则该目录下的文件只能由:

(1)root用户删除
(2)该目录的所有者(合作开发中一般就是root用户)删除
(3)该文件的所有者删除

给 /teamwork 目录设置为"粘滞位"(用chmod +t):

[root@iZbp1dr1jtgcuih41mw88oZ /]# chmod +t teamwork
[root@iZbp1dr1jtgcuih41mw88oZ /]# ls -ld teamwork
drwxr-xrwt 2 root root 4096 Apr 27 19:24 teamwork

效果展示(普通用户zh不能删除其他普通用户创建的文件,只能删除自己创建的文件):

[zh@iZbp1dr1jtgcuih41mw88oZ /]$ cd teamwork
[zh@iZbp1dr1jtgcuih41mw88oZ teamwork]$ ls -l
total 4
-rw-rw-r-- 1 lihua lihua  0 Apr 27 19:24 hello.txt
-rw-rw-r-- 1 zh    zh    12 Apr 27 17:17 test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ teamwork]$ rm hello.txt
rm: remove write-protected regular empty file ‘hello.txt’? y
rm: cannot remove ‘hello.txt’: Operation not permitted
[zh@iZbp1dr1jtgcuih41mw88oZ teamwork]$ rm test.txt
[zh@iZbp1dr1jtgcuih41mw88oZ teamwork]$ ls -l
total 0
-rw-rw-r-- 1 lihua lihua 0 Apr 27 19:24 hello.txt

相关文章:

【Linux系统】详解Linux权限

文章目录 前言一、学习Linux权限的铺垫知识1.Linux的文件分类2.Linux的用户2.1 Linux下用户分类2.2 创建普通用户2.3 切换用户2.4 sudo&#xff08;提升权限的指令&#xff09; 二、Linux权限的概念以及修改方法1.权限的概念2.文件访问权限 和 访问者身份的相关修改&#xff08…...

Go语言--语法基础4--基本数据类型--字符串类型

在 Go 语言中&#xff0c;字符串也是一种基本类型。相比之下&#xff0c; C/C 语言中并不存在原 生的字符串类型&#xff0c; 通常使用字符数组来表示&#xff0c;并以字符指针来传递。 Go 语言中字符串的声明和初始化非常简单&#xff0c;举例如下&#xff1a; var str st…...

分布式GPU上计算长向量模的方法

分布式GPU上计算长向量模的方法 当向量分布在多个GPU卡上时&#xff0c;计算向量模(2-范数)需要以下步骤&#xff1a; 在每个GPU上计算本地数据的平方和跨GPU通信汇总所有平方和在根GPU上计算总和的平方根 实现方法 下面是一个完整的CUDA示例代码&#xff0c;使用NCCL进行多…...

项目班——0422——日志

...

【音视频】音频编码实战

FFmpeg流程 从本地⽂件读取PCM数据进⾏AAC格式编码&#xff0c;然后将编码后的AAC数据存储到本地⽂件。 示例的流程如下所示。 关键函数说明&#xff1a; avcodec_find_encoder&#xff1a;根据指定的AVCodecID查找注册的编码器。avcodec_alloc_context3&#xff1a;为AVCod…...

Git Bash 下使用 SSH 连接出现 “Software caused connection abort” 问题

目录 一、检查网络环境和防火墙设置&#xff08;失败&#xff09;二、尝试使用 GitHub 的备用 SSH 端口 443&#xff08;成功&#xff09;三、检查 SSH Key 是否被正确加载四、检查是否多个 SSH 进程干扰或者服务异常五、使用 HTTPS 方式临时解决&#xff08;非 SSH&#xff09…...

K8S Pod 常见数据存储方案

假设有如下三个节点的 K8S 集群&#xff1a; k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、理论介绍 1.1、Volumes 卷 Kubernetes 的卷是 pod 的⼀个组成部分&#xff0c;因此像容器⼀样在 pod 的规范&#xff08;pod.spec&#x…...

JavaScript 模板字符串:更优雅的字符串处理方式

什么是模板字符串&#xff1f; 模板字符串&#xff08;Template Literals&#xff09;是 ES6&#xff08;ES2015&#xff09;引入的一种新的字符串表示方式&#xff0c;它提供了更强大、更灵活的字符串拼接功能。与传统的字符串使用单引号&#xff08;&#xff09;或双引号&am…...

DeepSeek智能时空数据分析(五):基于区域人口数量绘制地图散点-大模型搜集数据NL2SQL加工数据

序言&#xff1a;时空数据分析很有用&#xff0c;但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要&#xff0c;然而&#xff0c;三大挑战仍制约其发展&#xff1a;技术门槛高&#xff0c;需融合GIS理论、SQL开发与时空数据库等多领域知识&#xff1b;空…...

PostSwigger 的 CSRF 漏洞总结

本文所提供的关于 web 安全的相关信息、技术讲解及案例分析等内容&#xff0c;仅用于知识分享与学术交流目的&#xff0c;旨在提升读者对 web 安全领域的认知与理解。以下仅仅是作者对 PostSwigger Web 安全的知识整理和分享&#xff0c;严禁任何非法犯罪活动。 限制 CSRF 的三…...

vue项目页面适配

vue项目页面适配 目的&#xff1a;结合动态设置根字体大小的脚本&#xff08;如通过 JavaScript 监听屏幕尺寸变化&#xff09;&#xff0c;实现页面元素在不同设备上的自适应缩放 1、安装postcss-pxtorem ### 若项目未集成 postcss&#xff0c;需同步安装&#xff1a; npm …...

AI-Browser适用于 ChatGPT、Gemini、Claude、DeepSeek、Grok的客户端开源应用程序,集成了 Monaco 编辑器。

一、软件介绍 文末提供程序和源码下载学习 AI-Browser适用于 ChatGPT、Gemini、Claude、DeepSeek、Grok、Felo、Cody、JENOVA、Phind、Perplexity、Genspark 和 Google AI Studio 的客户端应用程序&#xff0c;集成了 Monaco 编辑器。使用 Electron 构建的强大桌面应用程序&a…...

Flutter Dart新特性NulI safety late 关键字、空类型声明符?、非空断言!、required 关键字

目录 late 关键字 required关键词: 常用的Model对象使用required Null safety翻译成中文的意思是空安全 null safety 可以帮助开发者避免一些日常开发中很难被发现的错误&#xff0c;并且额外的好处是可以改善性能后的版本都要求使用nul1 safety。Flutter2.2.0(2021年5月19日…...

CF2096G Wonderful Guessing Game 构造

题解 首先考虑没有 ? ? ? 回答的时候&#xff0c;答案是多少。 猜猜需要多少个询问。 ⌈ log ⁡ 2 n ⌉ ? ⌈ log ⁡ 3 n ⌉ ? \lceil \log_2n\rceil ? \lceil \log_3n\rceil ? ⌈log2​n⌉?⌈log3​n⌉? 可以构造一个表&#xff0c;行表示不同的询问&#xff0c;…...

制作一款打飞机游戏26:精灵编辑器

虽然我们基本上已经重建了Axel编辑器&#xff0c;但我不想直接使用它。我想创建一个真正适合我们当前目的的编辑器&#xff0c;那就是编辑精灵&#xff08;sprites&#xff09;。这将是今天的一个大目标——创建一个基于模板的编辑器&#xff0c;用它作为我们实际编辑器的起点。…...

深入Java JVM常见问题及解决方案

1. 简介 Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的核心环境&#xff0c;但其复杂性可能导致内存泄漏、性能下降、类加载失败等问题。本文从内存管理、垃圾回收、性能调优、异常处理四大方向&#xff0c;结合工具使用与实战案例&#xff0c;详解JVM问题的排查与解…...

【MySQL】Java代码操作MySQL数据库 —— JDBC编程

目录 1. Java的JDBC编程 1.1 Java的数据库编程&#xff1a;JDBC 1.2 JDBC工作原理 1.3 如何在项目中导入数据库驱动包 如何下载数据库驱动包 jar包如何引入项目中 2. 编写JDBC代码 1. 创建并初始化一个数据源(DataSource) 2. 和数据库服务器建立连接 3. 构造 SQL 语句…...

Marmoset Toolbag 5.0 中文汉化版 八猴软件中文汉化版 免费下载

八猴安装包下载链接 https://pan.baidu.com/s/1Mgy3Mrlrb3Tvtc8w7Zn1nA?pwd6666 提取码&#xff1a;6666 Marmoset Toolbag是由Monkey公司推出一款专业动画渲染软件&#xff0c;也叫做八猴渲染器。该软件主要特征功能是可以进行实时模型观察、材质编辑和动画预览&#xff0c;…...

Java编程中常见错误的总结和解决方法

1. 找不到文件 问题描述&#xff1a;尝试编译一个名为ChangeCha.java的文件&#xff0c;但编译器找不到这个文件。错误信息&#xff1a;javac: 找不到文件: ChangeCha.java解决方法&#xff1a;检查文件名是否正确&#xff0c;文件是否存在于当前目录&#xff0c;或者路径是否…...

【GESP】C++三级练习 luogu-B2114 配对碱基链

GESP三级练习&#xff0c;字符串练习&#xff08;C三级大纲中6号知识点&#xff0c;字符串&#xff09;&#xff0c;难度★✮☆☆☆。 题目题解详见&#xff1a;https://www.coderli.com/gesp-3-luogu-b2114/ 【GESP】C三级练习 luogu-B2114 配对碱基链 | OneCoderGESP三级练…...

C++类设计新思路:封装结构体成员变量

C++类设计新思路:封装结构体成员变量 引言 在C++编程里,类是封装数据和行为的重要手段。常规的类设计直接把成员变量定义在类中,再通过成员函数访问和修改这些变量。不过,有时候我们可以采用不同的设计思路,例如将成员变量封装到结构体里,这样可能会带来一些好处。本文…...

图像预处理-形态学变换

针对二值化图像&#xff0c;其有两个输入&#xff0c;一个输出&#xff1a;输入为原图像、核&#xff08;结构化元素&#xff09;&#xff0c;输出为形态学变换后的图像。基本操作有腐蚀和膨胀。 一.核 联想到之前的卷积核&#xff0c;也是一种核。 此时的核就跟卷积核不太一…...

关于百度模型迭代个人见解:技术竞速下的应用价值守恒定律

就在前天&#xff0c;在 2025 年 4 月 25 日的百度 Create 开发者大会上&#xff0c;文心大模型 4.5 Turbo 与 X1 Turbo 的发布再次将 AI 行业带入 "涡轮加速" 时代。这两款模型不仅在多模态理解、逻辑推理等核心指标上实现突破&#xff0c;更以80% 的价格降幅重塑行…...

从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 基础概念

从基础到实战的量化交易全流程学习&#xff1a;1.3 数学与统计学基础——概率与统计基础 | 基础概念 第一部分&#xff1a;概率与统计基础 第1节&#xff1a;基础概念&#xff1a;随机变量、概率分布、大数定律与中心极限定理 一、随机变量与概率分布&#xff1a;用数学描述市场…...

混沌工程领域常用工具的对比分析

以下是混沌工程领域常用工具的对比分析,涵盖主流工具的核心功能、优势、适用场景及局限性,帮助技术团队根据自身需求选择合适的工具: 一、故障注入工具对比 工具核心特点优势适用场景局限性生态集成开源/付费Chaos MonkeyNetflix 开源,随机终止生产环境实例,模拟硬件/进程…...

LINUX的使用(2)- 安装软件

0.防火墙相关 启动防火墙&#xff1a; sudo systemctl start firewalld #查看防火墙列表 firewall-cmd --list-ports 设置防火墙开机自启&#xff1a; sudo systemctl enable firewalld 检查防火墙状态&#xff1a; sudo firewall-cmd --state 允许某个端口&#xff08;如端…...

一主多从+自组网络,无线模拟量信号传输专治布线PTSD

无线模拟量信号传输模块通过无线方式实现模拟量信号的传输&#xff0c;采集工业现场标准4~20mA电流信号&#xff0c;并将其转换为无线信号进行传输。 以下是关于无线模拟量信号传输模块实现无线模拟量信号传输的详细介绍&#xff1a; 一、模块原理 无线模拟量信号传输模块的…...

IDEA中使用Git

Git工作流程 创建远程仓库 现在我们已经在本地创建了一个Git仓库&#xff0c;但是这只能满足我们单人开发&#xff0c;如果想要团队协作&#xff0c;还需要一个远程仓库 目前比较流行的远程仓库&#xff0c;有下面这两个&#xff1a; github&#xff1a;https://github.com …...

Go RPC 服务方法签名的要求

在 Go 中&#xff0c;RPC 方法的签名有严格的要求&#xff0c;主要是为了保证方法的调用能够通过网络正确地传输和解析。具体要求如下&#xff1a; 1. 方法必须是导出的 RPC 服务的方法必须是导出的&#xff08;即首字母大写&#xff09;。这是因为 Go 的反射机制要求服务方法…...

Ant(Ubuntu 18.04.6 LTS)安装笔记

一、前言 本文与【MySQL 8&#xff08;Ubuntu 18.04.6 LTS&#xff09;安装笔记】同批次&#xff1a;先搭建数据库&#xff0c;再安装JDK&#xff0c;后面肯定就是部署Web应用。其中Web应用的部署使用 Ant 方式&#xff0c;善始善终&#xff0c;特以笔记。 二、准备 &#xf…...

相机DreamCamera2录像模式适配尺寸

在开发中遇到 一个问题&#xff0c;相机切换视频模式时&#xff0c;预览时&#xff0c;界面不能充满屏幕两侧有黑边&#xff0c;客户要求修改&#xff0c;在此记录 一问题现象&#xff1a; 系统相机在视频模式下预览时如下现象如图1&#xff0c;期望现象如图2: 图1 …...

Animate 中HTMLCanvas 画布下实现拖拽、释放、吸附的拼图游戏

1.舞台上物体拖拽 2.松手以后&#xff0c;检查是否移动到范围内&#xff0c;是则自动吸附 3.播放音效 4.变量1&#xff0c;显示在舞台的动态文本中 1.实现拖拽 下面代码实现拖拽和释放 地图模块 //记录原始位置 var OriXthis.my_mc.x; var OriYthis.my_mc.y;this.my_mc.on(&q…...

第十一章-PHP表单传值

第十一章-PHP表单传值 一&#xff0c;核心概念 1. 表单的基本结构&#xff08;HTML&#xff09; 通过HTML的<form>标签定义表单&#xff0c;关键属性包括&#xff1a; action: 指定处理表单数据的PHP脚本路径&#xff08;如action"process.php"&#xff09…...

互联网大厂Java求职面试:从Java核心到微服务的深度探索

场景引入: 在一个阳光明媚的早上,谢飞机满怀信心地走进了一家知名互联网大厂的面试房间。面试官坐在桌子的另一端,手中拿着一份简历,面带微笑地开始了今天的面试。 第一轮提问:核心语言与平台 面试官: "谢飞机,你好。我看到你熟悉Java SE,能不能简单介绍一下Ja…...

微服务即时通信系统(十二)---入口网关子服务

目录 功能设计 模块划分 业务接口/功能示意图 服务实现流程 网关HTTP接口 网关WebSocket接口 总体流程 服务代码实现 客户端长连接管理封装(connectionManage.hpp) proto文件的编写 身份鉴权proto 事件通知proto 各项请求的URL的确定 服务端完成入口网关服务类…...

ES练习册

es索引结构和数据实例 这里提供索引结构和数据实例提供给大家使用练习&#xff0c;希望大家能够一起成长进步~~~~ #添加索引 PUT /ecommerce_products {"settings": {"number_of_shards": 3,"number_of_replicas": 1,"analysis": {&…...

运算符分为哪几类?哪些运算符常用作判断?简述运算符的优先级

运算符主要分为以下几类‌&#xff1a; ‌算术运算符‌&#xff1a;用于执行基本的数学运算&#xff0c;如加、减、乘、除、取模等。例如&#xff1a;、-、*、/、%‌。‌赋值运算符‌&#xff1a;用于将值赋给变量。例如&#xff1a;、、-、*、/、%‌。‌比较运算符‌&#xff…...

shell编程基础知识及脚本示例

文章目录 前言一、shell变量1.命名规则2.定义及使用变量 二、shell传递参数1.位置参数2. 任意参数 三、shell一维数组0.定义方式1.定义并获取数组的单个元素2.定义并获取数组的所有元素3.定义并获取数组的元素个数4.定义并获取数组的元素索引 四、shell条件判断语法五、shell常…...

再学GPIO(一)

GPIO输出模式 STM32的GPIO&#xff08;General Purpose Input Output 通用输入输出&#xff09;引脚支持多种输出模式&#xff0c;不同模式决定了引脚的驱动能力和信号特性。STM32的GPIO输出模式主要分为以下4种&#xff1a; 推挽输出&#xff08;Push-Pull Output&#xff09;…...

OpenCV彩色图像分割

OpenCV计算机视觉开发实践&#xff1a;基于Qt C - 商品搜索 - 京东 灰度图像大多通过算子寻找边缘和区域生长融合来分割图像。彩色图像增加了色彩信息&#xff0c;可以通过不同的色彩值来分割图像&#xff0c;常用彩色空间HSV/HIS、RGB、LAB等都可以用于分割。本节使用inRange…...

django filter 排除字段

在Django中&#xff0c;当你使用filter查询集&#xff08;QuerySet&#xff09;时&#xff0c;通常你会根据模型的字段来过滤数据。但是&#xff0c;有时你可能想要排除某些特定的字段&#xff0c;而不是过滤这些字段。这里有几种方法可以实现这一点&#xff1a; 使用exclude方…...

多模态大语言模型arxiv论文略读(四十五)

CAT: Enhancing Multimodal Large Language Model to Answer Questions in Dynamic Audio-Visual Scenarios ➡️ 论文标题&#xff1a;CAT: Enhancing Multimodal Large Language Model to Answer Questions in Dynamic Audio-Visual Scenarios ➡️ 论文作者&#xff1a;Qil…...

Vue3 通过Vue3-Print-Nb在线工单打印 模板打印 自定义打印 打印下载

介绍 通过在应用中集成打印功能&#xff0c;用户可以直接从页面打印工单&#xff0c;不用导出文件或使用其他外部工具。节省时间&#xff0c;提高效率&#xff0c;特别是当需要大量打印时。同时也可以将文件模板上传到数据库&#xff0c;提供给部门工作自行下载。 开源文档&am…...

视觉“解锁”触觉操控:Franka机器人如何玩转刚柔物体?

集智联机器人&#xff08;Plug & Play Robotics&#xff09;&#xff0c;简称PNP机器人&#xff0c;是Franka Robotics和思灵机器人金牌合作伙伴&#xff0c;集智联机器人团队成员均来自于国内外机器人行业知名企业&#xff0c;具有较强的学术背景。PNP机器人致力于为客户提…...

FlinkUpsertKafka深度解析

1. 设计目标与工作机制 Upsert-Kafka Connector 核心功能&#xff1a;支持以 Upsert&#xff08;插入/更新/删除&#xff09; 模式读写 Kafka 数据&#xff0c;适用于需要动态更新结果的场景&#xff08;如聚合统计、CDC 数据同步&#xff09;。数据流类型&#xff1a; 作为 …...

百度Create大会深度解读:AI Agent与多模态模型如何重塑未来?

目录 百度Create大会亮点全解析&#xff1a;从数字人到Agent生态布局 数字人商业化&#xff1a;从"拟人"到"高说服力"的进化 Agent生态&#xff1a;从"心响"App看百度的Agent战略布局 "心响"App的技术架构与创新点 多模态大模型&a…...

新能源汽车运动控制器核心芯片选型与优化:MCU、DCDC与CANFD协同设计

摘要&#xff1a;随着新能源汽车产业的迅猛发展&#xff0c;汽车运动控制器的性能和可靠性面临着更高的要求。本文深入探讨了新能源汽车运动控制器中MCU&#xff08;微控制单元&#xff09;、DCDC电源管理芯片和CANFD总线通信芯片的选型要点、优化策略及其协同设计方案。通过综…...

【软件工程】 白盒测试简介

1. 前言 在软件测试过程中&#xff0c;白盒测试&#xff08;White-box Testing&#xff09;是一种重要方法&#xff0c;它通过检查程序内部结构来验证软件功能。本文以一道典型的伪代码程序为例&#xff0c;结合白盒测试的基本操作&#xff0c;设计语句覆盖测试用例&#xff0…...

uniapp自定义一个选择年月日时分的组件。

<template><view><u-popup :show"timePopShow" mode"bottom" close"close" open"open" :closeOnClickOverlay"true"><view class"popup-container"><!-- 自定义时间内容 --><vi…...

Git命令(Gitee)

三板斧&#xff1a; git init //初始化本地仓库 git add . //添加所有文件到缓存区 &#xff08;或指定文件&#xff09; git commit -m "备注" //提交&#xff0c;填写备注 git remote add origin <远程仓库链接> git push -u origin ma…...