【Linux命令行与Shell脚本编程】第七章 Linux文件权限

news2024/11/17 16:44:23

Linux命令行与Shell脚本编程

第七章 Linux文件权限


文章目录

  • Linux命令行与Shell脚本编程
    • 七,Linux文件权限
      • 7.1,Linux的安全性
        • 7.1.1,用户信息 /etc/passwd文件
        • 7.1.2,用户密码 /etc/shadow文件
        • 7.1.3,useradd 添加新用户
        • 7.1.4,userdel 删除用户
        • 7.1.5, 修改用户
          • 1,usermod
          • 2,passwd,chpasswd
          • 3,chsh,chfn,chage
      • 7.2,Linux组
        • 7.2.1,/etc/group文件
        • 7.2.2,groupadd 创建新组
        • 7.2.3, 修改组
      • 7.3 文件权限
        • 7.3.1, 文件权限符号
        • 7.3.2,umask 默认文件权限
      • 7.4,更改安全设置(文件权限...)
        • 7.4.1, chmod 修改权限
        • 7.4.2,chown chgrp改变文件属主
      • 7.5,共享文件
      • 7.6 访问控制列表 (access control list,ACL)


七,Linux文件权限

·理解Linux的安全性
·理解文件权限
·使用Linux组

7.1,Linux的安全性

用户权限是通过创建用户时分配的用户ID(UID)来跟踪的。
UID是个数值,每个用户都有一个唯一的UID。

7.1.1,用户信息 /etc/passwd文件

文件/etc/passwd来匹配登录名与对应的UID值。该文件包含 用户有关的信息:
    $ cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    ·   登录用户名
    ·   用户密码
    ·   用户账户的UID(数字形式)
    ·   用户账户的组ID(数字形式)
    ·   用户账户的文本描述(称为备注字)
    ·   用户$HOME目录的位置
    ·   用户的默认shell

root用户账户是Linux系统的管理员,为其固定分配的UID是0。

Linux系统会为 各种功能创建不同的用户账户,并非真正的人类用户。为系统账户,是系统中运行的各种服务进程访问资源使用的特殊账户。
    所有运行在后台的服务都需要通过一个系统用户账户登录到Linux系统中。

Linux 为系统账户预留了500以下的UID。有些服务 要用特定的UID才能正常工作。
为普通用户创建账户时,大多数Linux系统会从500开始,将第一个可用UID分配给这个账户。(Ubuntu从1000开始)

7.1.2,用户密码 /etc/shadow文件

/etc/shadow文件对 Linux系统密码管理提供了更多的控制。
只有root用户才能访问/etc/shadow文件,这使其与/etc/passwd相比要安全许多。
/etc/shadow 文件为系统中的每个用户账户都保存了一条记录
    rich:$1$.FfcK0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7:::
    
/etc/shadow文件中的每条记录共包含9个字段。
    登录名,对应于/etc/passwd文件中的登录名。
    加密后的密码。
    自上次修改密码后已经过去的天数(从1970年1月1日开始算)。
    多少天后才能更改密码。
    多少天后必须更改密码。
    密码过期前提前多少天提醒用户更改密码。
    密码过期后多少天禁用用户账户。
    用户账户被禁用的日期(以从1970年1月1日到当时的天数表(=)。
    预留给以后使用的字段。

7.1.3,useradd 添加新用户

useradd 向Linux系统添加新用户,创建新用户账户并设置用户的$HOME目录结构
useradd命令使用系统的默认值以及命令行参数来设置用户账户。
查看所使用的Linux发行版的系统默认值,可以使用加入了-D选项的useradd命令。
-D选项显示了在命令行中创建新用户账户时,如果不明确确指明具体值,useradd命令所使用的默认值:
    ·新用户会被添加到GID为100的公共组。
    ·新用户的主目录会位于/home/loginname。
    ·新用户账户密码在过期后不会被禁用。
    ·新用户账户不设置过期日期。
    ·新用户账户将bash shell作为默认shell。
    ·系统会将/etc/skel目录的内容复制到用户的$HOME目录录。
    ·系统会为该用户账户在mail目录下创建一个用于接收邮件的文件。
    # useradd -D
        GROUP=100
        HOME=/home
        INACTIVE=-1
        EXPIRE=
        SHELL=/bin/bash
        SKEL=/etc/skel
        CREATE_MAIL_SPOOL=yes
useradd命令的默认值使用 /etc/default/useradd 文件设置。进一步的安全设置在/etc/login.defs文件中定义。调整这些文件,改变默认安全行为。

useradd 命令允许管理员创建默认的 $HOME目录配置,将其作为创建新用户$HOME目录的模板。自动在每个新用户的 $HOME 目录里放置默认的系统文件。
    在Ubuntu Linux系统中,/etc/skel目录包含下列文件:
        $ ls -al /etc/skel
        total 32
        drwxr-xr-x   2 root root  4096 2010-04-29 08:26 .
        drwxr-xr-x 135 root root 12288 2010-09-23 18:49 ..
        -rw-r--r--   1 root root   220 2010-04-18 21:51 .bash_logout
        -rw-r--r--   1 root root  3103 2010-04-18 21:51 .bashrc
        -rw-r--r--   1 root root   179 2010-03-26 08:31 examples.desktop
        -rw-r--r--   1 root root   675 2010-04-18 21:51 .profile
用默认系统参数创建一个新用户账户,然后检查一下新用户的$HOME目录:
    # useradd -m test
    # ls -al /home/test
        total 24
        drwxr-xr-x 2 test test 4096 2010-09-23 19:01 .
        drwxr-xr-x 4 root root 4096 2010-09-23 19:01 ..
        -rw-r--r-- 1 test test  220 2010-04-18 21:51 .bash_logout
        -rw-r--r-- 1 test test 3103 2010-04-18 21:51 .bashrc
        -rw-r--r-- 1 test test  179 2010-03-26 08:31 examples.desktop
        -rw-r--r-- 1 test test  675 2010-04-18 21:51 .profile

多数发行版 useradd 命令默认并不创建 $HOME目录,但是-m命令行选项会使其创建 $HOME 目录。可以在/etc/login.defs文件中更改该行为。

可以使用相应的命令行选项 改变创建新用户时 的 默认值或默认行为.
选项描述
-c comment给新用户添加备注
-d home_dir为主目录指定一个名字(如果不想用登录名作为主目录名的话)
-e expire_date用YYYY-MM-DD格式指定账户过期日期
-f inactive_days指定账户密码过期多少天后禁用该账户;0表示密码一过期就立即禁用,-1表示不使用这个功能
-g initial_group指定用户登录组的GID或组名
-G group …指定除登录组之外用户所属的一个或多个附加组
-k必须和-m一起使用,将/etc/skel目录的内容复制到用户的$HOME目录
-m创建用户的$HOME目录
-M不创建用户的$HOME目录,即便默认设置里要求创建
-n创建一个与用户登录名同名的新组
-r创建系统账户
-p passwd为用户账户指定默认密码
-s shell指定默认的登录shell
-u uid为账户指定一个唯一的UID
使用-D选项来修改系统默认的新用户设置
    # useradd -D -s /bin/tsch
    # useradd -D
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/tsch
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes
选项描述
-g group修改默认的组名称或GID
-b default_home修改用户$HOME目录默认创建的位置
-f inactive修改从密码过期到账户被禁用的默认天数
-e expiration_date修改新账户的默认过期日期
-s shell修改默认的登录shell

7.1.4,userdel 删除用户

默认情况下,userdel命令只删除/etc/passwd和/etc/shadow文件中的用户信息,属于该账户的文件会被保留。

userdel -r选项, 会删除用户的$HOME目录以及邮件目录。然而,系统中仍可能存有已删除用户的其他文件。
    # userdel -r test
    # ls -al /home/test
    ls: cannot access /home/test: No such file or directory
大量用户的环境中使用-r选项要小心,用户可能在个人的$HOME目录中存放了其他用户或程序要用到的重要文件

7.1.5, 修改用户

Linux提供了一些工具来修改已有用户账户的信息
工具描述
usermod修改用户账户字段,还可以指定主要组(primarygroup)以及辅助组(secondarygroup)的所属关系
passwd修改已有用户的密码
chpasswd从文件中读取登录名及密码并更新密码
chage修改密码的过期日期
chfn修改用户账户的备注信息
chsh修改用户账户的默认登录shell
1,usermod
usermod命令是用户账户修改工具中最强大的一个,提供了修改 /etc/passwd 文件中大部分字段的相关选项,只需指定相应的选项即可。
    大部分选项与 useradd 命令的选项一样(-c用于修改备注字段,-e用于修改过期日期,-g用于修改默认的登录组)。
    额外选项:
        ·-l:修改用户账户的登录名。
        ·-L:锁定账户,禁止用户登录。
        ·-p:修改账户密码。
        ·-U:解除锁定,恢复用户登录。
        ·-L:选项尤为实用。该选项可以锁定账户,使用户无法登录,无须删除账户和用户数据。要恢复账户,只需使用-U选项即可。
        ·-G group user : 将该组加入该用户的属组列表
2,passwd,chpasswd
passwd 命令可以 修改用户密码:
    # passwd test
    Changing password for user test.
    New UNIX password:
    Retype new UNIX password:
    passwd: all authentication tokens updated successfully.
系统中的任何用户都能修改自己的密码,但只有root用户才有权限修改别人的密码。

-e选项 可以强制用户下次登录时修改密码。可以先给用户设置一个简单的密码,之后强制用户在下次登录时改成更复杂的密码。

chpasswd命令可以 为系统中的大量用户修改密码。
chpasswd命令能从标准输入自动读取一系列以冒号分隔的登录名和密码对,自动对密码加密,然后为用户账户设置密码。也可以用重定向命令将包含username:password对 的文件重定向给该命令
    # chpasswd < users.txt
3,chsh,chfn,chage
chsh、chfn和chage用于修改特定的账户信息。

1,chsh命令可以快速修改默认的用户登录shell。使用时必须用shell的全路径名作为参数.
    #  chsh -s /bin/csh test
    Changing shell for test.
    Shell changed.
2,chfn 命令提供了在 /etc/passwd文件的备注字段中保存信息的标准方法。
    chfn命令会将用于Unix的 finger 命令的信息存入备注字段,而不是简单地写入一些文本 或 将备注字段留空。
    finger命令可以非常方便地查看Linux系统的用户信息。
        # finger rich
        Login: rich                             Name: Rich Blum
        Directory: /home/rich                   Shell: /bin/bash
        On since Thu Sep 20 18:03 (EDT) on pts/0 from 192.168.1.2
        No mail.
        No Plan.
    
    使用 chfn命令 时不加任何选项,则会询问你要将哪些内容写入备注字段
        # chfn test
        Changing finger information for test.
        Name []: Ima Test
        Office []: Director of Technology
        Office Phone []: (123)555-1234
        Home Phone []: (123)555-9876
        
        Finger information changed.
        # finger test
        Login: test                         Name: Ima Test
        Directory: /home/test               Shell: /bin/csh
        Office: Director of Technology      Office Phone: (123)555-1234
        Home Phone: (123)555-9876
        Never logged in.
        No mail.
        No Plan.
        # grep test /etc/passwd
        test:x:504:504:Ima Test,Director of Technology,(123)555-
        1234,(123)555-9876:/home/test:/bin/csh
    
3,chage命令可用于帮助管理用户账户的有效期。  
    chage命令的日期值可以用下面两种方式中的任意一种表示。
        ·YYYY-MM-DD格式的日期
        ·代表从1970年1月1日起的天数
    chage命令 功能是设置账户的过期日期。创建在特定日期自动过期的临时用户,不用删除用户。过期的账户仍然存在,但用户无法用其登录。
选项描述
-d设置自上次修改密码后的天数
-E设置密码过期日期
-I设置密码过期多少天后锁定账户
-m设置更改密码的最小间隔天数
-M设置密码的最大有效天数
-W设置密码过期前多久开始出现提醒信息

7.2,Linux组

组权限允许多个用户对系统对象共享一组权限.
每个组都有唯一的GID和唯一的组名,在系统中是唯一的。除了GID。

7.2.1,/etc/group文件

/etc/group文件包含系统中每个组的信息
    四个字段
        ·组名
        ·组密码
        ·GID
        ·属于该组的用户列表
    root:x:0:root
    bin:x:1:root,bin,daemon
    daemon:x:2:root,bin,daemon
    sys:x:3:root,bin,adm
    adm:x:4:root,adm,daemon
    rich:x:500:
    mama:x:501:
    katie:x:502:
    jessica:x:503:
    mysql:x:27:
    test:x:504:
组密码允许非组内成员使用密码临时性地成为该组成员.  
对于系统账户组,为其分配的GID值低于500,而普通用户组的GID则从500开始分配。
使用 usermod命令 向组中添加用户。在将用户添加到不同的组之前,必须先创建组。
!!!!当一个用户在 /etc/passwd 文件中指定某个组作为主要组时,该用户不会作为该组成员再出现在/etc/group文件中

7.2.2,groupadd 创建新组

groupadd 命令可用于创建新组   
    # /usr/sbin/groupadd shared
    # tail /etc/group
    ... ...
    shared:x:505:
groupadd命令 没有提供向组中添加用户的选项,但可以用usermod命令来解决
    # usermod -G shared rich
    # usermod -G shared test
    # tail /etc/group
    ... ...
    shared:x:505:rich, test
更改了已登录系统的用户所属的组,则该用户必须 注销后重新登录,新的组关系才能生效。

-g选项,则指定的组名会替换掉在/etc/passwd文件中为该用户分配的主要组。-G选项则会将该组加入该用户的属组列表,不会影响主要组。

7.2.3, 修改组

groupmod命令可以修改已有组的GID(使用-g选项)或组名(使用-n选项):
    # groupmod -n sharing shared
    # tail /etc/group
    ... ...
    sharing:x:505:test,rich

7.3 文件权限

7.3.1, 文件权限符号

$ ls -l
    total 68
    -rw-rw-r-- 1 rich rich   50 2010-09-13 07:49 file1.gz
    drwxrwxr-x 2 rich rich 4096 2010-09-03 15:12 test1
输出结果的 第一个字段 描述文件和目录权限的编码。这个字段的第一个字符表示对象的类型。
    -代表文件
    d代表目录
    l代表链接
    c代表字符设备
    b代表块设备
    p代表具名管道
    s代表网络套接字
3组三字符的编码。每一组定义了3种访问权限。
        r代表对象是可读的
        w代表对象是可写的
        x代表对象是可执行的
如果没有某种权限,则在该权限位会出现连字符。这3组权又限分别对应对象的3个安全级别。
    对象的属主
    对象的属组
    系统其他用户

在这里插入图片描述

7.3.2,umask 默认文件权限

touch 命令使用分配给当前用户的默认权限创建了新文件。umask命令可以显示和设置默认权限:
    $ touch newfile
    $ ls -al newfile
    -rw-r--r--    1 rich     rich            0 Sep 20 19:16 newfile
第一位代表一项特别的安全特性
后三位代表 对应三个安全级别(属主、属组和其他用户)的权限 rwx 000~111(0~7)
对文件而言,全权限值是666(所有用户都有读取和写入的权限);对目录而言,全权限值则是777(所有用户都有读取、写入和执行权限)。

查看掩码
    $ umask
    0022
例子中,文件一开始的权限是666,减去umask值022之后,剩下的文件权限就成了644。
    
umask值通常会被设置在/etc/profile启动文件中,可以使用umask命令指定其他的umask默认值.
使用umask命令指定其他的umask默认值:
    $ umask 026
    $ touch newfile2
    $ ls -l newfile2
    -rw-r-----    1 rich     rich            0 Sep 20 19:46 newfile2
将umask值设成026后,默认的文件权限变成了640.

umask值同样会作用在新创建的目录上
    目录的默认权限是777,因此umask作用后的目录权限不同于文件权限。umask值026会从777中减去,留下来751作为目录权限设置.

7.4,更改安全设置(文件权限…)

修改文件和目录的已有权限、默认属主以及默认属组。

7.4.1, chmod 修改权限

chmod命令可以修改文件和目录的安全设置
    chmod [OPTION]... MODE[,MODE]... FILE...
    chmod [OPTION]... OCTAL-MODE FILE...
    chmod [OPTION]... --reference=RFILE FILE...
-R选项能够以递归方式修改文件和目录的权限。可以使用通配符指定多个文件名,然后用单个命令批量修改权限。
mode 参数 允许使用八进制模式或符号模式来进行安全设置。八进制模式设置非常直观,直接用打算赋予文件的标准3位八进制权限编码即可:
     $ chmod 760 newfile
     $ ls -l newfile
     -rwxrw----    1 rich     rich            0 Sep 20 19:16 newfile

在符号模式下指定权限的格式
    chmod [ugoa...][[+-=][rwxXstugo...] FILE
        u   用户
        g   组
        o   其他用户
        a   所有
        
        +   增加权限
        -   移除权限
        =   设置权限
        
        r/w/x   读/写/执行
        X   仅当对象是目录或者已有执行权限时才赋予执行权限。
        s   在执行时设置SUID或SGID。
        t   设置粘滞位(sticky bit)。
        u   设置属主权限。
        g   设置属组权限。
        o   设置其他用户权限。

$ chmod o+r newfile
$ chmod u-x newfile

7.4.2,chown chgrp改变文件属主

chown 可以修改文件的属主, chgrp 可以修改文件的默认属组。
只有root用户能修改文件的属主。任何用户都可以修改文件的属组,但前提是该用户必须是原属组和新属组的成员。

格式:
    chown options owner[.group] file
修改属主     
     # chown dan newfile
     # ls -l newfile
     -rw-rw-r--    1 dan      rich            0 Sep 20 19:16 newfile
修改文件的默认属组
     # chown .rich newfile
     # ls -l newfile
     -rw-rw-r--    1 dan      rich            0 Sep 20 19:16 newfile
修改属主和属组
     # chown dan.shared newfile
     # ls -l newfile
     -rw-rw-r--    1 dan      shared             0 Sep 20 19:16 newfile
使用与用户登录名相同的组名,则可以同时修改二者 
     # chown test. newfile
     # ls -l newfile
     -rw-rw-r--    1 test    test             0 Sep 20 19:16 newfile
-R选项与通配符相配合可以递归地修改子目录和文件的所属关系。
-h选项可以修改文件的所有符号链接文件的所属关系。

chgrp命令可以方便地修改文件或目录的默认属组:
     $ chgrp shared newfile
     $ ls -l newfile
     -rw-rw-r--    1 rich     shared          0 Sep 20 19:16 newfile

7.5,共享文件

Linux为每个文件和目录存储了3个额外的信息位。
    SUID(set user ID):当用户执行该文件时,程序会 以文件属主的权限 运行。
    SGID(set group ID):对文件而言,程序会 以文件属组的权限 运行;对目录而言,该目录中创建的新文件会 以目录的属组 作为默认属组。
    粘滞位(sticky bit):应用于目录时,只有 文件属主 可以删除或重命名 该目录中的文件。

启用SGID位后,可以强制在共享目录中创建的新文件都属于该目录的属组,这个组也就成了每个用户的属组。
通过 chmod命令设置SGID,将其添加到标准3位八进制值之前(组成4位八进制值),或者在符号模式下用符号s。
SUID,SGID,粘滞位 000~111 (0~7)

使目录中的所有新文件都沿用目录的属组,只需设置该目录的SGID位
    $ mkdir testdir
    $ ls -l
    drwxrwxr-x    2 rich     rich         4096 Sep 20 23:12 testdir/
    $ chgrp shared testdir
    $ chmod g+s testdir
    $ ls -l
    drwxrwsr-x    2 rich     shared       4096 Sep 20 23:12 testdir/
    $ umask 002
    $ cd testdir
    $ touch testfile
    $ ls -l 
    total 0
    -rw-rw-r--    1 rich     shared          0 Sep 20 23:13 testfile

7.6 访问控制列表 (access control list,ACL)

Linux的基本权限方法有一个缺点:局限性。
    只能将文件或目录的权限分配给单个组或用户账户。
    !!!对于文件和目录,不同的组需要不同的权限,基本权限方法解决不了。
    
ACL允许指定包含 多个用户或组 的列表以及为其分配的权限。和基本安全方法一样,ACL权限使用相同的 读取、写入和执行权限位。
使用 setfacl 命令和 getfacl 命令在Linux中实现ACL特性。

getfacl命令能够查看分配给文件或目录的ACL:
    $ touch test
    $ ls -l
    total 0
    -rw-r----- 1 rich rich 0 Apr 19 17:33 test
    $ getfacl test
    # file: test    文件
    # owner: rich   属主
    # group: rich   属组
    user::rw-
    group::r--
    other::---

setfacl命令可以为用户或组分配权限:
    setfacl [options] rule filenames
    -m选项    修改分配给文件或目录的权限,
    -x选项    删除特定权限。
可以使用 3种格式定义规则:
    u[ser]:uid:perms
    g[roup]:gid:perms
    o[ther]::perms
-m 为用户分配权限,可以使用user格式;要为组分配权限,可以使用group格式;要为其他用户分配权限,可以使用other格式。对于uid或gid,可以使用数字值或名称:
    $ setfacl -m g:sales:rw test    == 为test文件添加了sales组的读写权限
    $ ls -l
    total 0
    -rw-rw----+ 1 rich rich 0 Apr 19 17:33 test
    $ getfacl test
    # file: test
    # owner: rich
    # group: rich
    user::rw-
    group::r--
    group:sales:rw-
    mask::rw-
    other::---
权限列的末尾多了一个加号(+),指明该文件 应用了ACL

-x 删除权限:
    $ setfacl -x g:sales test
    $ getfacl test
    # file: test
    # owner: rich
    # group: rich
    user::rw-
    group::r--
    mask::r--
    other::---
    
Linux允许对目录设置默认ACL,在该目录中创建的文件会自动继承。这个特性称为ACL继承。
设置目录的默认ACL,在规则定义前加上 d:
    $ sudo setfacl -m d:g:sales:rw /sales

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hystrix Dashboard图形化监控

&#x1f449;&#x1f3fb; SpringCloud 入门实战系列不迷路 &#x1f448;&#x1f3fb;&#xff1a; SpringCloud 入门实战&#xff08;一&#xff09;什么是SpringCloud&#xff1f;SpringCloud 入门实战&#xff08;二&#xff09;-SpringCloud项目搭建SpringCloud 入门实…

【云计算•云原生】1.什么是云计算?它为什么这么火?

文章目录 1.云计算基础什么是云计算云计算的分类开源软件、自由软件、免费软件 2.云计算机制云基础设施机制云管理机制云安全机制基本云架构 3.虚拟化技术服务器虚拟化服务器虚拟化技术CPU虚拟化内存虚拟化设备和I/O虚拟化存储虚拟化网络虚拟化桌面虚拟化 KVM 4.网络与存储基础…

90后,第一批接棒白酒的“年轻人”

【潮汐商业评论/原创】 又到了每月的公司团建&#xff0c;“团建必喝酒”似乎已经成为了大家的共识。 但在酒水的选择上&#xff0c;有红的、啤的、洋的&#xff0c;还有低度果酒&#xff0c;唯独不见听谁说聚会喝白的。当Jason询问为什么没有白酒时&#xff0c;得到了几乎一…

C语言函数大全-- o 开头的函数

C语言函数大全 本篇介绍C语言函数大全-- o 开头的函数 1. obstack_init&#xff0c;obstack_free&#xff0c;obstack_alloc&#xff0c;obstack_blank&#xff0c;obstack_grow 1.1 函数说明 函数声明函数功能void obstack_init(struct obstack *obstack_ptr);它是 POSIX …

Python采集某网站小sp内容, m3u8内容下载

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: Python 3.8 Pycharm 模块使用: import requests >>> pip install requests import re 正则表达式 解析数据 import json 本次案例所用知识点: python基础语法: 字典创建/取值 print输出函数使用…

【人工智能概论】 RNN、LSTM、GRU简单入门与应用举例、代码耗时计算

【人工智能概论】 RNN、LSTM、GRU简单入门与应用举例、代码耗时计算 文章目录 【人工智能概论】 RNN、LSTM、GRU简单入门与应用举例、代码耗时计算一. RNN简介1.1 概念简介1.2 方法使用简介 二. 编码层embedding2.1 embedding的参数2.2 embedding的理解 三. Linear层与CrossEnt…

全景图像算法简述

全景图像拼接是一种将多个图像合成为一个大型全景图像的技术。这种技术广泛应用于虚拟现实、游戏开发、文化遗产保护等领域。本文将介绍三种主流的全景图像拼接算法&#xff0c;并对它们进行综合比较。 一、基于特征点匹配的拼接算法 特征点匹配是全景图像拼接中最常用的一种算…

深入讲解ARMv8 异常处理简介

内核稳定性问题复杂多样&#xff0c;最常见的莫过于“kernel panic”&#xff0c;意为“内核恐慌&#xff0c;不知所措”。这种情况下系统自然无法正常运转&#xff0c;只能自我结束生命&#xff0c;留下死亡信息。诸如&#xff1a; “Unable to handle kernel XXX at virtual …

直播系统开发中哪些技术架构是必不可少的

在当今数字化时代&#xff0c;直播已成为一种极其受欢迎的娱乐和营销方式。由于直播应用的复杂性&#xff0c;架构师在直播系统的开发和设计中扮演着至关重要的角色。本文将介绍直播系统开发中技术架构师所必不可少的技术和工具。 什么是直播系统&#xff1f; 直播系统是一种通…

uni-app入门到实战

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f35f;欢迎来到前端初见的博文&#xff0c;本文主要讲解uni-app入门到实战&#x1f35f; &#x1f468;‍&#x1f527; 个人主页 : 前端初见 &#x1f95e;喜欢的朋友可以关注一下&#xff…

【Linux】浏览器写代码!部署code-server远程vscode网页

部署code-server远程vscode网页&#xff0c;在浏览器上写代码&#xff01; 参考文档 https://developer.aliyun.com/article/876967#slide-7 本文首发于 慕雪的寒舍 1.什么是code-server&#xff1f; 注意&#xff0c;这不是在linux系统上安装vscode软件&#xff08;和windo…

虹科分享 | 如何主动保护个人信息 | 网络安全评级

网上报税和支付越来越流行&#xff0c;针对毫无防备的纳税人的税务欺诈也越来越频繁。以下是一些需要避免的常见网上税务骗局&#xff1a; 网络钓鱼诈骗 骗子利用电子邮件、短信或电话伪装成相关机构或报税软件提供商&#xff0c;诱骗人们提供他们的个人信息&#xff0c;或点击…

走进梦龙冰淇淋的生产线 揭晓“灯塔工厂”背后的秘密

作为一家积极履行社会责任的公司&#xff0c;联合利华和路雪在今年3月携手京东“青绿计划”&#xff0c;推出了包含梦龙、可爱多、千层雪、和路雪等多款可持续组合装产品&#xff0c;这一助力实现双碳目标的举措也引发了消费者的关注。其实&#xff0c;自联合利华太仓食品生产基…

我们都被 ChatGPT 给骗了?

引言&#xff1a; 用过 ChatGPT 的人都知道&#xff0c;当你与 chatgpt 对话的时候&#xff0c;它是“逐字输出”的&#xff0c;就像真的有个人在跟你打字一样。其实&#xff0c;这种技术并没有那么神奇&#xff0c;这种技术叫做“实时文本生成”或“逐字输出”技术&#xff0…

分布式事务Seata-AT模式

承接上文分布式事务-二阶段提交 Seata是开源的分布式事务解决方案&#xff0c;提供高性能和简单易用的分布式事务服务&#xff0c;包含AT、TCC、 SAGA、XA四种事务模式&#xff0c;为用户打造一站式的分布式解决方案。 Seata提供的4种事务模式都是由2PC&#xff08;二阶段提交…

【C++的内联函数】

文章目录 一、什么是内联函数二、内联函数的优缺点三、使用内联函数的注意事项 一、什么是内联函数 用关键字inline修饰的函数叫做内联函数。 C编译器编译时会自动在被调用的地方展开。 二、内联函数的优缺点 内联函数的优点&#xff1a; 没有函数栈帧创建&#xff0c;提升…

干货分享 | 如何在业余时间学习数据分析?

从社会学背景的数分小白到独揽公司市场部的数据分析&#xff0c;和大家简单分享我的数据分析升级打怪之路。 简单说就是两点【培养数据分析思维】【提升数据分析技能】 思维的培养主要靠书籍和课程 以下是一些对我影响较大的书籍&#xff0c;按照【入门、进阶、高阶】简单做了…

torch.nn.Multiheadattention介绍

初始化参数&#xff1a; class torch.nn.MultiheadAttention(embed_dim, num_heads, dropout0.0, biasTrue, add_bias_kvFalse, add_zero_attnFalse, kdimNone, vdimNone, batch_firstFalse, deviceNone, dtypeNone) 允许模型共同关注来自不同表示子空间的信息。 多头注意力…

C#连接数据库失败,ORA-28040: No matching authentication protocol

C#连接数据库失败 1.原先使用的是oracle11&#xff0c;后来升级数据库到oracle19c&#xff0c;启动程序&#xff0c;数据库连接时报错"ORA-28040: No matching authentication protocol" 2.原因分析&#xff1a;最近服务器数据库版本升级到了19c&#xff0c;网上查了…

【技巧】如何以“只读方式”打开PPT文稿?附两个方法

以“只读方式”打开PPT文稿&#xff0c;可以防止意外修改文稿。今天小编就来介绍一下以“只读方式”打开PPT的两种方法。 方法一&#xff1a;无密码的“只读”模式 1、打开PowerPoint程序&#xff0c;点击菜单中的【文件】选项&#xff0c;再依次点击【打开】-【浏览】。接着在…