linux目录与文件管理

目录与路径

关于执行文件路径的变量:$PATH

ls完整文件名为:/bin/ls
在任何文件夹下输入ls命令可以显示出一些信息而不是找不到命令,这就是因为环境变量PATH所致。在执行命令时,系统会依照PATH的设置去每个PATH定义的目录下查找文件名为ls的可执行文件,若在PATH中有多个同名文件,则先找的同名命令先被执行。
可以echo $PATH一下查看有哪些目录被定义出来了
echo有“显示、打印”的意思,PATH前加$表示后面接的是变量,所以会出现目前的PATH

在这里插入图片描述
PATH这个变量的内容是由一堆目录所组成,每个目录中间用冒号隔开,每个目录有顺序之分。
若要在PATH 中新增目录,如将/root目录加到环境变量中,可以使用命令:

PATH="${PATH}:/root:
  • tips:
    • 不同身份用户默认的PATH不同,默认能够随意执行的命令也不同
    • 本目录(.)最好不要放到PATH中

文件与目录管理

文件相关命令

见Linux常用命令👉相关链接

文件内容查看

直接查看:cat、tac、nl
可翻页查看:more、less
数据截取:head、tail

非纯文本文件:od

读取数据文件或二进制文件。

修改文件时间或创建新文件:touch

  • 三个主要变动时间
    1. 修改时间【mtime】:文件的“内容数据”变更时,会更新这个时间。内容数据指的是文件的内容,而不是文件的属性或权限
    2. 状态时间【ctime】:文件的“状态”改变时,会更新这个时间,如权限、属性被更改了,会修改这个时间
    3. 读取时间【atime】:文件的“内容被读取”时,会更新这个读取时间。如使用cat去读取时,会更新

文件的时间很重要,若文件时间错误的话,可能会导致某些程序无法顺利运行。
若要修改文件的时间为现在,则可以使用touch命令

[root@study ~]# touch [-acdmt] 文件
选项与参数:
-a  :仅修订 access time;
-c  :仅修改文件的时间,若该文件不存在则不创建新文件;
-d  :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m  :仅修改 mtime ;
-t  :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]

文件与目录的默认权限与隐藏权限

除了基本的rwx权限外,在Linux传统的ext2、ext3、ext4文件系统下,还可以设置文件的
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

文件默认权限:umask

umask制定目前用户在创建文件或目录是的权限默认值

  • 查看方式:
    1. 直接输入umask:查看数字类型的权限设置值
    2. 加上-S选项:以符号类型的方式显示权限

在这里插入图片描述

  • NT:
    1. 有的系统里会有四组数字,第一组是特殊权限用的,后面三组是常用的,也就是这里显示的
    2. umask的数字指的是该默认值需要减掉的权限(故如上为022而不是733)
      对于目录而言,X权限是很重要的,但是一般文件的建立不需要这个权限

文件隐藏属性

文件的隐藏属性对系统有很大帮助,尤其是在系统安全上面,非常重要。
NT:下面的chattr命令只能在ext2、ext3、ext4的linux传统文件系统上面完整生效,其他文件系统可能无法完整的支持这个命令了,如xfs仅支持部分参数而已。

  • 查看文件系统类型:df -hT
    在这里插入图片描述
    这里可以看到/dev/sda1使用的是ext4类型

chattr(配置文件隐藏属性)

  • 命令设置

    [root@study ~]# chattr [+-=][ASacdistu] 文件或目录名称
    选项与参数:
    +   :增加某一个特殊参数,其他原本存在参数则不动。
    -   :移除某一个特殊参数,其他原本存在参数则不动。
    =   :设置一定,且仅有后面接的参数
    
    A  :当设置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,
         可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)
    S  :一般文件是非同步写入磁盘的(原理请参考[前一章sync](../Text/index.html#sync)的说明),如果加上 S 这个属性时,
         当你进行任何文件的修改,该更动会“同步”写入磁盘中。
    a  :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性
    c  :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,
         但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
    d  :当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录)不会被 dump 备份
    i  :这个 i 可就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”
         对于系统安全性有相当大的助益!只有 root 能设置此属性
    s  :当文件设置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,
         所以如果误删了,完全无法救回来了喔!
    u  :与 s 相反的,当使用 u 来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,
         可以使用来救援该文件喔!
    注意1:属性设置常见的是 a 与 i 的设置值,而且很多设置值必须要身为 root 才能设置
    注意2:xfs 文件系统仅支持 AadiS 而已
    
    

    如:

    范例:请尝试到/tmp下面创建文件,并加入 i 的参数,尝试删除看看。
    [root@study ~]# cd /tmp
    [root@study tmp]# touch attrtest     <==创建一个空文件
    [root@study tmp]# chattr +i attrtest <==给予 i 的属性
    [root@study tmp]# rm attrtest        <==尝试删除看看
    rm: remove regular empty file `attrtest'? y
    rm: cannot remove `attrtest': Operation not permitted
    # 看到了吗?呼呼!连 root 也没有办法将这个文件删除呢!赶紧解除设置!
    
    

由于这些属性是隐藏的,故要使用lsattr才能看到这些属性。
其中较为重要的为+i与+a这个属性:

  • +i可以让一个文件无法被修改,助于实现系统安全
  • +a应用于logfile这种日志文件,实现可以增加但不能修改旧数据与删除参数

lsattr

[root@study ~]# lsattr [-adR] 文件或目录
选项与参数:
-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!

[root@study tmp]# chattr +i attrtest
[root@study tmp]# lsattr attrtest
----i----------- attrtest

在这里插入图片描述

此时若再修改这个文件:
在这里插入图片描述
去掉这个属性后,便能正删除:
在这里插入图片描述

  • NT:使用隐藏属性是要特别小心,如:若将/etc/shadow这个重要的密码记录文件设置成具有i的属性,当要新增用户时就会出现问题

文件的特殊权限:SUID、SGID、SBIT

除了rwx,还会有s和t权限,查看/tmp和/usr/bin/passwd的权限就可以看到
在这里插入图片描述
在这里插入图片描述
s和t这两个权限的意义与系统的账号及系统的进程管理较为相关。

Set UID

当s标志出现在文件拥有者的x权限上时,被称为Set UID,简称为SUID的特殊权限。

  • SUID的限制与功能为:
    1. SUID权限仅对二进制程序有效
    2. 执行者对于该程序需要具有x的可执行权限
    3. 本权限仅在执行该程序的过程中有效
    4. 执行者将具有该程序拥有者的权限

NT:SUID仅可用在二进制程序上,不能用在shell脚本上。
这是因为shell脚本只是将很多的二进制执行文件调用执行而已,故SUID的权限部分还是要看shell脚本调用进来的程序的设置,而不是shell脚本本身。

Set GID

s在用户组的x时为SGID,与SUID不同,SGID可以针对文件或目录来设置。

  • 对文件而言,SGID有如下功能:

    1. SGID对二进制程序有效
    2. 程序执行者对于该程序来说,需要有X权限
    3. 执行者在执行的过程中将会获得该程序用户组的支持

    [root@study ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
    -rwx--s--x. 1 root slocate   40496 Jun 10  2014 /usr/bin/locate
    -rw-r-----. 1 root slocate 2349055 Jun 15 03:44 /var/lib/mlocate/mlocate.db
    

    当其他用户执行locate时,其有x权限,那么在执行过程中它将会取得slocate用户组的支持,因此也就可以去读取mlocate.db

除了二进制程序外,SGID也能用在目录中

  • 当一个目录中被设置了SGID权限后,他将具有如下功能:
    1. 用户若对于此目录具有r与x的权限时,该用户能够进入此目录
    2. 用户在此目录下的有效用户组将会变成该目录的用户组
    3. 用途:若用户在此目录下具有w的权限(可以新建文件),则用户所建立的新文件,该文件的用户组与此目录的用户组相同

SGID对项目开发来说非常重要,因为其涉及用户权限的问题。

Sticky Bit

SBIT,当前只对目录有效,对于文件已经没有效果了

  • SBIT对于目录的作用
    • 当用户对于此目录有w、x权限,即具有写入的权限时
    • 当用户在该目录下建立文件或目录时,仅有自己与root才有权利删除该文件

即:当甲这个使用者于A目录时具有群组或其他人的身份,且拥有该目录的w权限,这表示“甲使用者对该目录内任何人创建的文件或目录均可进行‘删除/更名/搬移’等动作”。不过,若将A目录加上SBIT权限项目时,则甲只能针对自己创建的目录或文件进行删除/更名/搬移等动作,而无法删除他人的文件

SUID/SGID/SBIT权限的设置

数字法

之前修改权限的数字方式为:chmod 777 filename,在三个数字之前再加一个数字的话,最前面的数字就代表这几个权限了

  • 4:SUID
  • 2:SGID
  • 1:SBIT
    如要将一个文件权限设置为【-rwsr-xr-x】时,由于s在用户权限中,为SUID,故要在755前再加数字4,即chmod 4755 filename
    如:
    在这里插入图片描述
    最后一个例子要注意,前面都是小写s和t,出现大写是因为user、group、others都没有执行权限,所以这个S和T代表的就是空。也就是说,SUID是代表该文件在执行的时候具有文件拥有者的权限,但是文件拥有者都无法执行了,也就没有权限给其他人使用,也就是空了
符号法

除了数字法之外,也可以像之前一样使用符号法处理。
其中SUID为u+s,SGID为g+s,SBIT为o+t。
在这里插入图片描述

观察文件类型:file

命令与文件的查找

脚本文件的查找

在命令行模式中,连续输入两次[Tab]按键就能知道用户有多少命令可以执行,若要查找命令的完整文件,可以通过which或type查找
which命令是根据PATH这个环境变量所规范的路径,去查找执行文件的文件名,所以重点是找出执行文件而已,且which后面接的是完整文件名。若加上-a选项,则可以列出所有的可以找到的同名执行文件,而非仅显示第一个而已。
在这里插入图片描述
history是bash内置的命令,但是which默认是找PATH所设置的目录,所以会找不到这个命令,不过可以通过type来找,type命令在后面的bash中再说

文件的查找

linux下有相当优异的查找命令,通常find不很常用,除速度慢之外,也影响硬盘性能。一般都是先用whereis或是locate检查,找不到才用find找。因为whereis只找目录中某些特定目录下的文件,locate用数据库来查找文件名,故这俩就相当快速,且没有实际查找硬盘内的文件系统状态,较节省时间。

whereis:由一些特定目录中查找文件

whereis只找几个特定的目录,而不是全系统的去查找,故速度要比find快很多。所以说,whereis主要是针对于/bin/sbin下面的执行文件,以及/usr/share/man下面的man pahe文件,跟几个比较特定的目录来处理而已,可以通过参数确定查找的目录。
不过有些文件是找不到的,可以用whereis -l来查看whereis查了多少目录

locate/updatedb

在这里插入图片描述
locate命令直接在后面输入文件的部分名称后,就能得到结果,中间可以加入参数设置,如上加入参数-l 5,表示限制只列出5个。查找passwd,那么在完整文件名(包括文件路径)中,只要有passwd在其中都会被显示出来。
这是个很好用的命令,尤其是在忘记某个文件的完整文件名时。
但是,这个命令还是理由使用上的限制。因为他是根据已建立的数据库/var/lib/mlocate里面的数据所查找到的,所以不用直接再去硬盘当中读取数据,救护及很快。但是也是因为它是由数据库查找的,而数据库的建立默认是在每天执行一次(linux版本不同,这个时间也不相同),所以当新建立文件但在数据库更新之前查找文件时,就会找不到这个文件。

不过也可以手动更新数据库:直接输入updatedb就可以
updatedb命令会去读取/etc/updatedb.conf这个配置文件的设置,然后再去硬盘里面进行查找文件名的操作,最后去更新整个数据库文件。
因为updatedb会去查找硬盘,所以执行updatedb时,会等待数分钟的时间。

find

  • 与时间相关参数

    -mtime  n :n 为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件;
    -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名;
    -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。
    -newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名
    
    范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
    [root@study ~]# find / -mtime 0
    #那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,
    # 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内?
    # find / -mtime 3 有变动过的文件都被列出的意思!
    
    范例二:寻找 /etc 下面的文件,如果文件日期比 /etc/passwd 新就列出
    [root@study ~]# find /etc -newer /etc/passwd
    # -newer 用在分辨两个文件之间的新旧关系是很有用的!
    
    
  • 与使用者或用户组相关的参数

    	-uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在
                /etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。
       -gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在
                /etc/group,相关的介绍我们会第四篇说明~
       -user name :name 为使用者帐号名称喔!例如 dmtsai 
       -group name:name 为群组名称喔,例如 users-nouser    :寻找文件的拥有者不存在 /etc/passwd 的人!
       -nogroup   :寻找文件的拥有群组不存在于 /etc/group 的文件!
                    当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,
                    这是可能的!在这个时候,就可以使用 -nouser-nogroup 搜寻。
    
    范例三:搜寻 /home 下面属于 dmtsai 的文件
    [root@study ~]# find /home -user dmtsai
    # 这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有文件时,
    # 就可以利用这个指令将属于某个使用者的所有文件都找出来喔!
    
    范例四:搜寻系统中不属于任何人的文件
    [root@study ~]# find / -nouser
    # 通过这个指令,可以轻易的就找出那些不太正常的文件。如果有找到不属于系统任何人的文件时,
    # 不要太紧张,那有时候是正常的~尤其是你曾经以源代码自行编译软件时。
    
  • 与文件权限及名称有关的参数

       -name filename:搜寻文件名称为 filename 的文件;
       -size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:
                       c: 代表 Byte, k: 代表 1024Bytes。所以,要找比 50KB
                       还要大的文件,就是“ -size +50k ”
       -type TYPE    :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 设备文件 (b, c),
                       目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性。
       -perm mode  :搜寻文件权限“刚好等于” mode 的文件,这个 mode 为类似 chmod
                     的属性值,举例来说, -rwsr-xr-x 的属性为 4755-perm -mode :搜寻文件权限“必须要全部囊括 mode 的权限”的文件,举例来说,
                     我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744,
                     当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,
                     因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
       -perm /mode :搜寻文件权限“包含任一 mode 的权限”的文件,举例来说,我们搜寻
                     -rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw-------
                     也会被列出来,因为他有 -rw.... 的属性存在!
    
    范例五:找出文件名为 passwd 这个文件
    [root@study ~]# find / -name passwd
    
    范例五-1:找出文件名包含了 passwd 这个关键字的文件
    [root@study ~]# find / -name "*passwd*"
    # 利用这个 -name 可以搜寻文件名啊!默认是完整文件名,如果想要找关键字,
    # 可以使用类似 * 的任意字符来处理
    
    范例六:找出 /run 目录下,文件类型为 Socket 的文件名有哪些?
    [root@study ~]# find /run -type s
    # 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的文件,
    # 例如 socket 与 FIFO 文件,可以用 find /run -type p 或 -type s 来找!
    
    范例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性
    [root@study ~]# find / -perm /7000 
    # 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,所以当然要使用 /7000,
    # 使用 -7000 表示要同时含有 ---s--s--t 的所有三个权限。而只需要任意一个,就是 /7000
    

    这里比较有趣的是-perm选项,它重点在于找出特殊权限的文件。我们知道SUID和SGID都可以设置在二进制程序上,若想找出/usr/bin、/usr/sbin这两个目录下,只要具有SUID或SGID就列出该文件,可以进行操作:find /usr/bin /usr/sbin -perm /6000
    在这里插入图片描述
    NT:find的特性是会自行查找子目录,所以所写目录里面的目录也会查找的哦~

  • 额外可进行的操作

       -exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
       -print        :将结果打印到屏幕上,这个动作是默认动作!
    
    范例八:将上个范例找到的文件使用 ls -l 列出来~
    [root@study ~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
    # 注意到,那个 -exec 后面的 ls -l 就是额外的指令,指令不支持命令别名,
    # 所以仅能使用 ls -l 不可以使用 ll 喔!注意注意!
    
    范例九:找出系统中,大于 1MB 的文件
    [root@study ~]# find / -size +1M
    

如上范例八如图所示:
在这里插入图片描述

  • {} 代表的是“由 find 找到的内容”,如上图所示,find 的结果会被放置到 {} 位置中;
  • -exec 一直到 ; 是关键字,代表 find 额外动作的开始 (-exec) 到结束 (;) ,在这中间的就是 find 指令内的额外动作。 在本例中就是“ ls -l {} ”
  • 因为“ ; ”在 bash 环境下是有特殊意义的,因此利用反斜线来跳脱。

如果要找的文件是具有特殊属性的,那么用locate就不行了,就需要使用find进行查找。
另外,find还可以利用通配符来查找文件名。
find好用在于它不但可以指定查找的目录(连同子目录),还可以用额外的选项与参数来找到最正确的文件名。但是由于find在查找数据时相当消耗硬盘资源,所以没事不要用find

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【mysql】实现设置表中所有数据的update_time,要求每1000条设置在一天

实现效果示例 执行SQL:(mysql 版本查看: select VERSION() :5.7.36-log) 实现效果: 这里最后一个id 9 > 总条数 6,所以没有更新到,直接手动补下就行 SELECT * FROM my_test S…

最新ai系统ChatGPT商业运营版网站源码+支持GPT4.0/支持AI绘画+已支持OpenAI GPT全模型+国内AI全模型+绘画池系统

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

全平台七合一万能DIY小程序源码系统 带完整搭建教程

近年来互联网技术的飞速发展,尤其是移动互联网的普及。随着微信、支付宝、百度、抖音、头条等平台的迅速崛起,小程序成为了这些平台上重要的应用形态。这些小程序的应用范围广泛,包括电商、教育、娱乐、生活服务等各个领域。然而,…

常用排序算法

目录 直接插入排序 希尔排序 ​编辑 选择排序 堆排序 冒泡排序 快速排序 hoare版 挖坑法 前后指针法 非递归 归并排序 非递归 计数排序 直接插入排序 直接插入排序跟依次模扑克牌一样,将最后一张牌依次与前面的牌比较,最后将牌插入到指定位…

【设计模式】第16节:行为型模式之“命令模式”

一、简介 命令模式:将请求(命令)封装为一个对象,这样可以使用不同的请求参数化其他对象(将不同请求依赖注入到其他对象),并且能够支持请求(命令)的排队执行、记录日志、…

分布式理论和分布式锁知识点总结

文章目录 (一) 分布式理论算法和协议1)CAP理论总结 2)BASE理论BASE 理论的核心思想基本可用软状态最终一致性 3)Paxos算法Basic Paxos 算法4) Raft算法1 拜占庭将军 5)Gossip协议 (二) 分布式锁分布式锁应该具备哪些条…

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库安装 IndexDB类库引入 localForage测试 新增数据、获取数据 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 大部分场景使用 LocalStore都…

mac m1下navicat执行mongorestore 到mongodb

首先,下载https://www.mongodb.com/try/download/mongocli 解压缩后 有可执行文件使用navicat打开 加载后再重新点击 选择 要恢复的文件即可

Vue之CSS基础

CSS:层叠样式表 1、选择器 从模板template中选择某元素进行样式设置 需要注意的是作用域到底是当前模板还是整个html文档 1.1 基础(单一)选择器 标签、类、 id、通配符 标签、直接使用标签名,比如div,span… 优点:全选 模板中的名{。。。}…

数字化时代,谈谈无处不在的大数据和商业智能BI的关系

随着数字化时代的正式到来,众多领域开展了新一轮的科技革命和产业革命,通过大数据或商业智能BI等数据类技术解决方案,完成了从业务、产品到经营模式、管理决策的全方位升级,获得了突破性的成长。 如今,大数据和商业智…

3D模型格式转换工具HOOPS Exchange对工业级3D产品HOOPS的支持与应用

一、概述 HOOPS Exchange是一套高性能模型转换软件库,可以给软件提供强大的模型的导入和导出功能,我们可以将其单独作为转换工具使用,也可以将其集成到自己的软件中。 同样,HOOPS 的其它产品,也离不开HOOPS Exchange…

SpringBoot整合阿里云OSS对象存储

文章目录 1、OSS介绍及开通1.1、阿里云OSS简介1.2、开通OSS 2、创建存储空间bucket及密钥获取2.1、创建存储空间2.2、获取密钥 3、OSS快速入门案例4、在springboot项目中整合4.1、将oss配置放到yml文件中4.2、创建Oss属性类,接收yml文件中的属性4.3、封装文件上传功…

Vue Router使用VueUse更改标签页名称的工具函数

进入正题 安装 npm i vueuse/core or pnpm i vueuse/core or yarn add vueuse/corerouter/helper.js import { useTitle } from vueuse/coreexport const usePageTitle (to) > {const projectTitle import.meta.env.VITE_APP_TITLE // 将可变名抽出到 .env 内配置cons…

docker进阶

文章目录 docker 进阶Part1 常用命令总结docker version 查看docker客户端和服务端信息docker info 查看更加详细信息docker images 列出所有镜像基本用法常用选项 docker search 搜索镜像基本用法示例用法 docker pull 拉取镜像基本用法示例用法 docker rmi 删除镜像基本用法示…

前后端配合实现按钮级操作权限控制

背景 公司项目需要做到按钮级权限限制,至此有了该文,如有错误,请联系博主指出,多多感谢。 角色配置前后端操作 首先最基本的角色配置,配置该类角色有哪些菜单以及那些菜单的哪些按钮权限 菜单及菜单按钮由前端维护&a…

kali搭建docker

kali搭建docker 更新kali源 sudo apt update出错 更新一下密钥 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ED444FF07D8D0BF6安装docker sudo apt install docker.io -y #安装docker docker -v #docker版本 sudo systemctl status docker #查看docker…

C语言数据结构之数据结构入门

目录 数据结构介绍 数据结构发展史 何为算法 数据结构基础 基本概念和术语 四大逻辑结构(Logic Structure) 数据类型 理解复杂度概念 时间空间复杂度定义 度量时间复杂度的方法 程序运行时的内存与地址 编程预备 数据结构介绍 数据结构发展…

CSS+Javascript+Html日历控件

最近&#xff0c;因需要用HTMLJAVASCRIPTCSS实现了一个日历控件&#xff0c;效果如下&#xff1a; 单击上月、下月进行日历切换。当前日期在日历中变颜色标注显示。还是老老套路、老方法&#xff0c;分HMLCSSJAVASCRIPT三部分代码。 一、html代码 <h1>学习计划</h1…

1.6 基本安全设计准则

思维导图&#xff1a; 1.6 基本安全设计准则笔记 目标&#xff1a;理解和遵循一套广泛认可的安全设计准则&#xff0c;以指导保护机制的开发。 主要准则&#xff1a; 机制的经济性&#xff1a;安全机制应设计得简单、短小&#xff0c;便于测试和验证&#xff0c;减少漏洞和降…

ES 8.x新特性一览(完整版)

一、看点 在 2022 年 2 月 11 日&#xff0c;Elasticsearch&#xff08;ES&#xff09;正式发布了 8.0 版本&#xff0c;而截止到 2023 年 10 月&#xff0c;历经一年半时间&#xff0c;ES官方已经连续发布了多个版本&#xff0c;最新版本为 8.10.4。这一系列的更新引入了众多引…