3.1 > Linux文件管理(基础版)

news2024/10/24 14:12:50

目录

    • Linux 的命名规则
        • file & stat 命令查看文件详细信息
    • 文件管理基础 之 “增”
        • mkdir 创建文件夹
        • touch 命令创建普通文件
        • ln 命令创建链接
        • cp 命令复制文件
    • 文件管理基础 之 “删”
        • rmdir 命令删除空文件夹
        • rm 命令删除一切
        • trash 命令:第三方回收站
    • 文件管理基础 之 “改”
        • mv 命令修改路径 & 重命名
    • 文件管理基础 之 “查”
        • ls 命令及其常用选项,更多参数选项使用 --help 查看
        • cd 命令及其常用选项等
        • pwd 命令
        • find 命令查找一切
        • cat 命令查看文件内容
        • more 命令查看文件内容
        • less 命令查看文件内容
        • head 命令查看文件内容的开头
        • tail 命令查看文件内容的结尾
        • nl 命令查看文件内容
        • xxd 命令查看二进制文件数据

Linux 的命名规则

相对于其他操作系统(如 Windows )来说,Linux 的命名规则并没有那么多条条框框,还算是比较自由的。在 Linux 中,它的命名规则有如下几点要求:

  • 首先是大小写敏感:例如在 Linux 中,文件 demo 和文件 Demo 不是一个文件,然而这在 Windows 中却是相同的文件。
  • 其次是 Linux 除了不允许 / 字符出现在名称中,其他任何字符都可以,这一点很宽松。
  • 然后是文件名称长度不要超过 255 个字符。
  • 最后是在 Linux 中没有文件后缀的说法,Linux 中一切皆是文件,你想用啥后缀都行,但还是建议遵循共识规范来命名。

那么问题来了,我如何识别一个文件是什么类型的文件呢???


第一种方式:看前缀,这大致识别文件是什么类型,也是我们最常用的方式,虽然有时候不靠谱,但能用就行

  • 文件类型: - 普通文件; d 文件夹; l 链接文件; b 块设备文件; c 字符设备文件; p 管道文件; s 套接字文件
[test@demo ~]$ ls -l		# 使用 ls 选项加 -l 选项,通过每一行的第一个字符来判定文件类型
总用量 0
drwxrwxr-x. 2 test test 6 1021 23:01 dir1		# 文件夹
-rw-rw-r--. 1 test test 0 1021 23:02 file1		# 普通文件
lrwxrwxrwx. 1 test test 5 1021 23:04 file2 -> file1		# 链接文件
file & stat 命令查看文件详细信息
[test@demo ~]$ file file1		# 通过 file 命令查看,这也是最常见的辨别一个文件的类型的方式
file1: ASCII text				# 当前文件为一个普通的 ascii 码字符文件
[test@demo ~]$ file dir1		
dir1: directory

[test@demo ~]$ stat file1		# 使用 stat 命令查看文件的 inode 块信息,也可以知道当前文件类型
  文件:file1
  大小:4               块:8          IO 块:4096   普通文件	# 当前文件类型时普通文件
设备:fd02h/64770d      Inode:136         硬链接:1
......

在 Linux 中,请不要通过文件后缀来辨别文件类型,除非你信任文件命名者采用了大家约定俗成的命名规范

文件管理基础 之 “增”

mkdir 创建文件夹
[test@demo ~]$ mkdir dir1		# 创建一个目录
[test@demo ~]$ mkdir dir2 dir3		# 创建多个目录,或使用大括号 mkdir {dir2,dir3}
[test@demo ~]$ mkdir -p dir4/a/b/c		# 使用 -p 参数递归创建多个目录
[test@demo ~]$ tree dir4
dir4
└── a
    └── b
        └── c
[test@demo ~]$ mkdir -m 700 dir5		# 使用 -m 参数在创建目录的同时设置权限,关于权限的问题后面再说
[test@demo dir5]$ cd dir5 && ll -a
总用量 0
drwx------. 2 test test   6 1021 23:28 .		# 当前文件夹的权限创建时给的权限为 700
touch 命令创建普通文件
[test@demo ~]$ touch file1				# 创建一个普通空文件
[test@demo ~]$ touch file2 file3		# 创建多个普通空文件,或使用大括号 touch {file2,file3}

[test@demo ~]$ ll --time=atime file1
-rw-rw-r--. 1 test test 0 1021 23:37 file1
[test@demo ~]$ touch file1				# 当文件存在时,使用 touch 创建文件只会修改文件的访问时间
[test@demo ~]$ ll --time=atime file1
-rw-rw-r--. 1 test test 0 1021 23:40 file1

[test@demo ~]$ touch -d "1999-12-12 04:23" file1		# touch 一般用于修改文件的时间,更多参数使用 --help 查看
[test@demo ~]$ ll --time=atime file1
-rw-rw-r--. 1 test test 0 1212 1999 file1
ln 命令创建链接

关于链接文件的 ”增“,链接文件分为 软链接 和 硬链接 两种类型,关于软硬链接的底层原理则需要了解 ext 文件系统的存储原理,则都是后话了。

  • 软链接:类似于 Windows 中的快捷方式,链接文件指向源文件,如果源文件发生改变则链接文件也会发生相同改变。
  • 硬链接:每个文件都有一个 inode 块来记录相关信息,当创建硬链接时就是为一个已存在的 inode 又在其中建立了一个新的目录项,也就是说多个文件名指向同一个 inode。不理解很正常,说人话就是 硬链接指向的源文件如果发生任何变化,链接文件都会发生相应变化,即使源文件被删了,也只是少了一个文件记录项而已,只要 inode 块还在,硬链接就还是可用的。
[test@demo ~]$ ln -s f1 ln1			# 使用 -s 参数创建一个软链接,指向源文件 f1
[test@demo ~]$ ll
-rw-rw-r--. 1 test test 0 1022 00:08 f1
lrwxrwxrwx. 1 test test 2 1022 00:08 ln1 -> f1		# 建立的软链接 ln1 指向了 f1,如果源文件被删除,则当前链接不可用

[test@demo ~]$ ln f1 ln2			# 建立一个硬链接,指向源文件 f1
[test@demo ~]$ ll
-rw-rw-r--. 2 test test 0 1022 00:08 f1
-rw-rw-r--. 2 test test 0 1022 00:08 ln2			# 硬链接,当 f1 被删除,则 ln2 还是可用,因为 inode 块还在
[test@demo ~]$ stat f1				# 查看 f1 文件的 inode 块信息
  文件:f1
  大小:0               块:0          IO 块:4096   普通空文件
设备:fd02h/64770d      Inode:136         硬链接:2		# 当前硬链接数为 2,即包含 f1 和 ln2 两个
cp 命令复制文件
[test@demo ~]$ cp file1 copy1		# 将文件 file1 复制为文件 copy1
[test@demo ~]$ cp -d ln1 ln2		# 使用 -d 参数,复制符号链接文件本身,而不是它所指向的源文件
[test@demo ~]$ cp -p  file1 file2	# 使用 -p 参数,复制的文件将会保留源文件的所有属性,如权限、时间、属主等
[test@demo ~]$ cp --preserve=mode f1 ffff	# 使用完整选项可以指定具体保留哪些属性,如权限(mode)、时间戳(timestamps)等
[test@demo ~]$ cp -r dir dircopy	# 使用 -r 参数,将递归复制 dir 中所有文件和目录
[test@demo ~]$ cp -a file1 copy2	# 使用 -a 参数,等于同时使用 -d -p -r
[test@demo ~]$ cp -l file1 copy3	# 使用 -l 参数,以复制的形式创建 file1 的硬链接
[test@demo ~]$ cp -s file1 copy4	# 使用 -s 参数,以复制的形式创建指向 file1 的软链接
[test@demo ~]$ cp -n file1 file3	# 使用 -n 参数,在复制文件 file1 时,如果 file3 已存在,则取消本次复制
[test@demo ~]$ cp -i file1 file2	# 使用 -i 参数,交互式复制,若文件 file2 存在,则给出提示
cp:是否覆盖'file2'? y				# file2 存在,给出提示,输入 n 拒绝,输入 y 允许
[test@demo ~]$ cp -f file1 file2	# 使用 -f 参数,强制复制,若目标文件已存在,则将其覆盖
[test@demo ~]$ cp -u f1 f2			# 使用 -u 参数,若 f1 的最近改动时间被 f2 新,则将 f1 复制到 f2,否则忽略本次复制
[test@demo ~]$ cp -b f1 f3 && ls	# 使用 -b 参数,当 f3 存在且于 f1 内容不同时,则先备份 f3 ,再将 f1 复制为 f3
f1  f2  f3  f3~						# f3~ 创建的为备份文件

文件管理基础 之 “删”

rmdir 命令删除空文件夹
[test@demo ~]$ rmdir dir1			# 使用 rmdir 删除空目录,若目录非空,则删除失败
[test@demo ~]$ tree a
a									# 虽然每个目录都为空,但是目录树存在多个分支,所以不能删除
├── b
│   └── c
└── d
[test@demo ~]$ rmdir -p a/b/c		# 使用 -p 参数,递归从最底层开始依次删除所有空目录,前提是目录树只能是一条线
rmdir: 删除目录 'a' 失败: 目录非空

上面的命令虽然很鸡肋,但是在一些应用场景下它是安全的,可以防止手贱贸然删除一些文件

rm 命令删除一切
[test@demo ~]$ rm file1				# 使用 rm 命令,可以删除一切文件,没有回收站的那种删除
[test@demo ~]$ rm -r dir1			# 使用 -r 参数,可以删除一切目录
[test@demo ~]$ rm -i file1			# 使用 -i 参数,在删除之前进行询问,可以防止手贱意外删除
[test@demo ~]$ rm -f file1			# 使用 -f 参数,强制删除文件,和 -r 搭配成 -rf 可以强制删除目录
[test@demo ~]$ rm -rf dir1 file1	# 终极命令,可以删除任何文件目录

为什么你在使用 rm 不加 -i 时还是存在删除提示??? 因为系统使用了 alias rm=“rm -i” 命令给你做了别名,等于是防呆设计。在没有完全把握之前,请不要使用终极命令大力出奇迹,虽然系统尽力防止你手贱,但是防呆不防傻。

trash 命令:第三方回收站
# 当你没有安装 RHEL 系列的额外软件仓库 epel 时,请先安装此仓库;如果你没有条件,可以忽略这一步
[root@demo ~]$ sudo dnf install epel-release			# 安装 epel 软件仓库

# 注意:此软件需要你的系统中已存在 python 环境
# 如果你没有安装 epel 仓库,则可以通过 https://pkgs.org 网站搜索和下载对应发行版的 trash-cli 软件包和依赖
[root@demo ~]$ sudo dnf install -y trash-cli			# 从 epel 仓库中安装 trash-cli 软件包

# 对于离线安装此软件包的用户,执行如下命令来离线安装
[test@demo ~]$ ls					# 首先确定你已经拥有了如下两个软件包,其中第一个为依赖包,第二个为软件包
python3-unipath-1.1-16.el8.noarch.rpm  trash-cli-0.21.4.18-2.el8.noarch.rpm
[test@demo ~]$ sudo rpm -ivh *		# 执行命令安装软件包,其中 * 表示当前文件夹下所有文件
[sudo] test 的密码:
......

[test@demo ~]$ trash file1				# 使用 trash 命令删除文件到回收站中
[test@demo ~]$ trash-list				# 使用 tsash-list 命令查看回收站
2024-10-22 18:21:15 /home/test/file1
[test@demo ~]$ trash-restore file1		# 使用 trash-restore 来恢复文件,(请切换到需要恢复的文件夹中执行)
   0 2024-10-22 18:21:15 /home/test/file1
What file to restore [0..0]: 0			# 查询当前文件夹下可以恢复的同名文件个数,通过对应编号来选取需要恢复的文件
[test@demo ~]$ trash-rm file1			# 使用 trash-rm 来删除回收站中对应文件,(会删除所有同名文件)
[test@demo ~]$ trash-empty 20			# 使用 trash-empty 来清空回收站,20 表示删除过去 20 天的文件,不加天数则删除所有

注意:trash 删除文件并不是真正的删除,而是将文件移入了 ~/.local/share/Trash 的文件夹中,在 ~/.local/share/Trash 文件夹中,files 文件夹中记录了你删除的所有文件,info 文件夹中记录了所删除文件的所有信息(如 何时删除,路径是哪里等)。


建议:如果你觉得命令太长用起来麻烦,那么可以使用前面章节提到得 alias 命令来为其设置别名。

文件管理基础 之 “改”

文本文件内容的改动请参照 “vi 和 vim 怎么玩” 和 “Linux 文本处理三剑客” 章节的内容。

mv 命令修改路径 & 重命名
[test@demo ~]$ ls
dir1  file1
[test@demo ~]$ mv file1 dir1/			# 使用 mv 命令移动文件,将文件 file1 移动到 dir1 目录下,
# 注意:若目标区域存在和当前需移动文件名相同的文件,采用如上方式将会覆盖目标区域的同名文件

[test@demo ~]$ mv -i file1 dir1/		# 使用 -i 参数,如果出现意料之外的情况将会提示,和 -f 完全相反
mv:是否覆盖'dir1/file1'? n				# 使用 n 或 y 来选择是否覆盖
[test@demo ~]$ mv -f file1 dir1/		# 将会强制覆盖 dir1/ 下的同名文件,和 -i 完全相反
[test@demo ~]$ mv -n file1 dir1/		# 使用 -n 参数,若 dir1/ 下存在同名文件,将终止此次操作,不会覆盖
[test@demo ~]$ mv -u file1 dir1/		# 使用 -u 参数,和上面的 cp 命令 -u 参数功能一样
[test@demo ~]$ mv -b file1 dir1/		# 使用 -b 参数,和上面的 cp 命令 -b 参数功能一样

# mv 命令除了用来移动文件位置,由于其不加任何参数时会覆盖相同位置的同名文件的特性,因此也经常用来重命名文件
[test@demo ~]$ ls
a
[test@demo ~]$ mv a b					# 将文件 a 重命名为 b
[test@demo ~]$ ls
b

文件管理基础 之 “查”

ls 命令及其常用选项,更多参数选项使用 --help 查看
[test@demo ~]$ ls					# 使用 ls 命令查看目录中所有文件,不包含隐藏( 以 . 开头 )文件
b
[test@demo ~]$ ls -a				# 使用 -a 参数,查看所有文件,包含隐藏的,(其中 . 表示本级目录,.. 表示上级目录)
.  ..  b  .bash_history  .bash_logout  .bash_profile  .bashrc  .local  .viminfo
# 注意: 如果你不想看到 . 和 .. 两个目录,则可以使用 -A 选项

[test@demo ~]$ ls -l				# 使用 -l 参数,查看所有文件的长格式
-rw-rw-r--. 1 test test 0 1022 19:13 b
-rw-rw-r--. 1 test test 0 1022 19:13 c
[test@demo boot]$ ls -lh			# 使用 -h 参数,以人类能读懂的方式查看文件的长格式,如文件大小
总用量 166M
-rw-r--r--. 1 root root 192K 510 2022 config-4.18.0-372.9.1.el8.x86_64
drwxr-xr-x. 3 root root   17 1021 15:55 efi
drwx------. 4 root root   83 1021 15:59 grub2
-rw-------. 1 root root  85M 1021 15:58 initramfs-0-rescue-a6af9cee7de24b79a602774b242f2e89.img
[test@demo ~]$ ls -lt				# 使用 -t 参数,将所有文件按照时间排序,(联合 -r 选项可以反转顺序)
drwxrwxr-x. 2 test test  6 1022 19:18 d1
-rw-rw-r--. 1 test test  0 1022 19:13 b
-rw-rw-r--. 1 test test  0 1022 19:13 c
[test@demo boot]$ ls -lSh			# 使用 -S 参数,将所有文件按照大小排序,(联合 -r 选项可以反转顺序)
总用量 166M
-rw-------. 1 root root  85M 1021 15:58 initramfs-0-rescue-a6af9cee7de24b79a602774b242f2e89.img
-rw-------. 1 root root  31M 1021 16:00 initramfs-4.18.0-372.9.1.el8.x86_64.img
-rw-------. 1 root root  26M 1021 16:01 initramfs-4.18.0-372.9.1.el8.x86_64kdump.img
[test@demo boot]$ ls -ld			# 使用 -d 参数,只查看当前目录情况
dr-xr-xr-x. 5 root root 4096 1021 16:01 .
cd 命令及其常用选项等
[test@demo ~]$ cd dir1/				# cd 命令没有选项可选,直接跟路径即可,无论绝对路径还是相对路径

# cd 可以跟着几个特殊路径符号
[test@demo dir1]$ cd .				# . 表示当前目录,表示进入到当前目录
[test@demo dir1]$ cd ..				# .. 表示上一级目录,表示进入到上一级目录
[test@demo dir1]$ cd ~				# ~ 表示当前用户家目录,表示进入到用户家目录
[test@demo dir1]$ cd ~tom			# 表示进入到用户 tom 的家目录
[test@demo dir1]$ cd -				# 表示回退到上次所在的目录
pwd 命令
[test@demo ~]$ pwd					# 查看当前所在的绝对路径位置
/home/test
# pwd 存在两个参数 -L 、-P不过没啥用,结果都一样
find 命令查找一切
[test@demo ~]$ sudo find /etc -name "sudoers"		# 使用 -name 参数,指定在路径下需要查找的文件名称
/etc/sudoers										# 命中到的结果
[test@demo ~]$ sudo find /etc -iname "sUdoErs"		# 使用 -iname 参数,不区分名称大小写
/etc/sudoers
[test@demo ~]$ find /dev -maxdepth 1 -type c		# 使用 -type 参数,查找指定类型的文件(普通文件为 f,其他和上面一样)
/dev/vcsa6
/dev/vcs6
......
# 使用 -maxdepth [数字] 可以指定最大查找深度,使用 -mindepth [数字] 可以指定从第几层开始查找
[test@demo ~]$ sudo find /boot -size +10M			# 使用 -size 参数,查找文件 >10M 的文件( -10M 就是 <10M 的文件)
[sudo] test 的密码:
/boot/initramfs-4.18.0-372.9.1.el8.x86_64.img
/boot/initramfs-0-rescue-a6af9cee7de24b79a602774b242f2e89.img
/boot/initramfs-4.18.0-372.9.1.el8.x86_64kdump.img
[test@demo ~]$ find ./ -mtime -1					# 使用 -mtime 参数,查找在 1 天以内修改过的文件( +1 表示在 1 天前修改过的文件;1 表示刚好 1 天前修改过的文件 )
[test@demo ~]$ find ./ -perm 664					# 使用 -perm 参数,查找权限为 664 的文件
./text
./f
[test@demo ~]$ find ./ -perm /u+rw					# 支持字符串,查找用户有读写权限的文件
./text
./f
[test@demo ~]$ find ./ -user test					# 使用 -user 参数,查找指定用户的文件
[test@demo ~]$ find ./ -group test					# 使用 -group 参数,查找指定组的文件
[test@demo dir1]$ find ./ -name file1 -exec cat {} \; # 使用 -exec 参数,对查找到的文件执行 cat 命令
# -exec 后面根需要执行的命令,{} 占位符表示 find 查到的文件, \; 是结束标记
[test@demo dir1]$ find ./ -name file -ok cat {} \;	# 使用 -ok 参数,功能和 -exec 一样,唯一的区别就是自行命令前会提示
< cat ... ./file > ? y								# 使用 y 、n 来确定和否定执行命令 cat
111

# 使用多条件查找,条件优先级请看下面的警告部分
[test@demo dir1]$ find . -name "*.txt" -size +1M	# 使用 and 查找以 .txt 结尾且大小 <1M 的文件( -and 可以省略 )
[test@demo dir1]$ find . -name "*.txt" -o -name "*.log"	# 使用 or 查找名称以 .txt 或 .log 结尾的文件
[test@demo dir1]$ find . -not -name "*.txt"			# 使用 not 查找不以 .txt 结尾的文件

警告:使用多条件查找时的条件优先级顺序是:(依次递减) [()] 、[ !; -not ] 、[ -a ; -and ] 、[ -o ; -or ]
若未指定条件运算符号,则默认使用 -and 连接,这也是 -and 可以省略的原因

cat 命令查看文件内容
[test@demo ~]$ echo hello,world > text
[test@demo ~]$ cat text				# 查看文件内容
hello,world
[test@demo ~]$ cat -n text			# 使用 -n 参数,查看内容时显示行号
     1  hello,world
[test@demo ~]$ cat -A text			# 使用 -A 参数,显示所有内容,包含回车($)、、制表符(^|)等
hello,world$
# 没啥参数常用的,其他参数使用 --help 查看用法

cat 命令的缺点就是一次性打印所有内容,当文件过大时,翻页都难受,这时就需要下面的交互式查看命令了

more 命令查看文件内容
[test@demo etc]$ sudo more /etc/sudoers		# 选择一个长文件,通过 more 打开(因为查看的是受限的文件,所以使用了 sudo)
# 用的少,基本不用,需要其他参数使用 --help 查看用法

more 中常用的交互式命令:
q 或 Q : 退出交互模式
Enter :向下翻页一行内容
Space: 向下翻页一页内容
= : 显示当先所处位置的行号
/ : 搜索指定字符
v : 进入编辑模式,要退出按 :q 退出,按 :q! 强制退出 (不推荐使用,因为几乎没用过)
:f :在 v 模式里,按下 :f 显示当前光标位置和文件名称
h 或 ?: 查看帮助

注意:more 命令只能从前向后翻页,居然不能反过来,这就是个鸡肋命令,不如下面的 less 命令

less 命令查看文件内容
[test@demo etc]$ sudo less /etc/sudoers			# 查看文件
[test@demo etc]$ sudo less -N /etc/sudoers		# 使用 -N 参数,显示行号
[test@demo etc]$ sudo less -e /etc/sudoers		# 使用 -e 参数,在文件翻页完继续翻页后自动退出
[test@demo etc]$ sudo less -i /etc/sudoers		# 使用 -i 参数,打开的文件搜索字符串时将忽略大小写
[test@demo etc]$ sudo less -f /etc/sudoers		# 使用 -f 参数,强制打开某个文件,如设备文件等
[test@demo etc]$ sudo less -o /etc/sudoers		# 使用 -o 参数,将 less 输出的内容追加到指定文件中,(使用 -O 则是覆写)

less 常用的一些交互命令:
上下键:上下滚动一行内容
左右键:左右滚动一个页面的内容
Space:下滚动一个页面
Enter :下滚动一行
Home:滚动到顶部,其他键(End、PgUp等)功能对应键的含义
/ : 搜索指定字符串
N : 搜索字符串时切换到前一个匹配项
n : 搜索字符串时切换到下一个匹配项
q 或 Q :退出交互界面
h 或 H :显示帮助

注意:在滚动页面时还可以通过字母来滚动(如 j 向下滚动一行),但是由于很多字母都具有滚动效果,很繁琐记不住,所以一般就不推荐通过字符滚动

head 命令查看文件内容的开头
[test@demo ~]$ sudo head  /etc/sudoers			# 默认查看文件开头的 10 行内容
[test@demo ~]$ sudo head -3 /etc/sudoers		# 以行模式查看文件开头的 3 行内容,( 等于使用 -n3 )
[test@demo ~]$ sudo head -c3  /etc/sudoers		# 以字符模式查看文件开头 3 个字符
tail 命令查看文件内容的结尾
[test@demo ~]$ sudo tail /etc/sudoers			# 默认查看文件结尾的 10 行内容
[test@demo ~]$ sudo tail -3  /etc/sudoers		# 以行模式查看文件结尾的 3 行内容,( 等于使用 -n3 )
[test@demo ~]$ sudo tail -c3  /etc/sudoers		# 以字符模式查看文件结尾 3 个字符
[test@demo ~]$ sudo tail -f 5 /var/log/xx.log	# 使用 -f 参数,持续关注文件的结尾 5 行内容,按ctrl + c 可以退出关注
nl 命令查看文件内容
[test@demo ~]$ sudo nl /etc/sudoers				# 按行号查看文件内容,效果等同于 cat -n 命令
xxd 命令查看二进制文件数据
[test@demo ~]$ sudo xxd /etc/sudoers			# 输出文件的十六进制内容。适合查看一些二进制文件
00000000: 2323 2053 7564 6f65 7273 2061 6c6c 6f77  ## Sudoers allow
00000010: 7320 7061 7274 6963 756c 6172 2075 7365  s particular use
......

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

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

相关文章

开放式耳机排行榜前十名,开放式耳机全价位段盘点

关于开放式蓝牙耳机的品牌选择&#xff0c;这是一个常见的问题。因为市面上的蓝牙耳机种类繁多&#xff0c;各种样式和类型层出不穷&#xff0c;让许多消费者感到困惑&#xff0c;不知道如何选择一款适合自己的蓝牙耳机。一款好的蓝牙耳机不仅需要音质好、配置高&#xff0c;还…

计算机毕业设计hadoop+spark知识图谱中药推荐系统 中药材推荐系统 中药可视化 中药数据分析 中药爬虫 机器学习 深度学习 人工智能 大数据

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 摘 要 本文所探讨的领域是…

深度学习-2:数据向量化

向量化 在逻辑回归中&#xff0c;x,w,b都是列向量&#xff0c;若要计算w.T*xb&#xff0c;不向量化的话就需要for循环计算起来很麻烦 向量化后&#xff0c;使用numpy.dot(w,x)函数即可快速计算 逻辑回归向量化

接口测试(六)jmeter——参数化(配置元件 --> 用户定义的变量)

一、jmeter——参数化&#xff08;配置元件 --> 用户定义的变量&#xff09; 注&#xff1a;示例仅供参考 1. 参数化格式&#xff1a;${变量名} 2. 配置元件&#xff1a;用户定义的变量 3. 添加【用户定义的变量】&#xff0c;【线程组】–>【添加】–>【配置元件】–…

手持无人机飞手执照,会组装调试入伍当兵有多香!

手持无人机飞手执照&#xff0c;并具备组装调试技能&#xff0c;在入伍当兵时确实会具有显著的优势和吸引力。以下是对这一情况的详细分析&#xff1a; 一、无人机飞手执照的优势 1. 法规遵从与安全保障&#xff1a; 根据《民用无人驾驶航空器系统驾驶员管理暂行规定》等相关…

深入浅出 Vue3 nextTick

程序员节日快乐~ #1024程序员节 | 征文# nextTick 概念 当你在 Vue 的响应式数据模型中对数据进行修改时&#xff0c;这些变化并不会立即同步到 DOM 上_&#xff0c;而是会在当前的微任务队列&#xff08;microtask queue&#xff09;执行完毕后进行批量更新。这种机制被称为…

【宝塔面板】轻松使用docker搭建lobe-chat项目(AI对话)

我们的目的&#xff1a;就是下面的这个玩意&#xff1a; 主要也就三步 1、创建容器编排模版 2、创建容器 3、配置 第一步&#xff1a;创建编排模版 代码我放下面了&#xff1a;&#xff08;你要记住这里开放的是3210端口&#xff09; # https://github.com/lobehub/lobe-ch…

Spring Boot驱动的植物健康监测革命

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理植物健康系统的相关信息成为必然。开发合适…

Linux Redis查询key与移除日常操作

维护老项目Express node 编写的后端程序、有这么一个方法、没有设置redis过期时间&#xff08;建议设置过期时间&#xff0c;毕竟登录生产服务器并不是每个人都有权限登录的&#xff01;&#xff01;&#xff01;&#xff09;。如果变动只能通过登录生产服务器、手动修改… 于…

自动化抖音点赞取消脚本批量处理

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

CSS综合案例——新闻详情

一、知识点 1、文字颜色 属性名&#xff1a;color 属性值&#xff1a; 颜色表示方式属性值说明使用场景颜色关键字颜色英文单词red,green,blue学习测试rgb表示法rg(r,g,b)r,g,b表示红绿蓝三原色&#xff0c;取值0-255了解rgba表示法rgba(r,g,b,a)a表示透明度&#xff0c;取…

CVE-2024-36401 Geoserver远程代码执行漏洞复现

目录 CVE-2024-36401 Geoserver远程代码执行漏洞 影响版本 环境搭建 漏洞复现 poc GeoServer是一个用Java编写的开源软件服务器&#xff0c;允许用户共享和编辑地理空间数据。它为提供交互操作性而设计&#xff0c;使用开放标准发布来自任何主要空间数据源的数据。 CVE-20…

大模型日常:支持中英混合及多语言文生语音的MeloTTS本地部署

简要介绍 MeloTTS 是一个强大的多语言文本转语音库&#xff0c;特别设计以支持CPU环境下的实时语音合成&#xff0c;无需依赖GPU。该库能够输出自然流畅的语音&#xff0c;提供了一种高效便捷的方式&#xff0c;将文本信息转换为听觉内容。MeloTTS不仅支持多种语言&#xff0c…

Ubuntu20.04安装opencv3.1.0(包含详细解决报错方法)

我的环境是cuda10.1 cmake是3.16.5 第一步骤&#xff1a;下载安装包 第二步骤&#xff1a;编译环境安装 第三步骤&#xff1a;解压opencv安装包&#xff0c;并且在opencv文件夹内新建build文件夹 第四步骤&#xff1a;打开cmake-gui&#xff0c; 第五步骤&#xff1a;进行…

驱动-----内核启动

目录 一、最小系统 二.操作系统 三.操作系统的启动 四.linux启动准备工作 五.安装nfs和tftp环境 六.总结 设备驱动:驱使设备行动的程序。 裸机程序:没有和操作系统结合的驱动程序pwm.c,uart.c,adc.c 有操作系统的时候,应用层不能直接操作硬件,由底层写驱动的人写…

凹凸性和拐点的概念

二阶导不存在也可能是拐点 判断拐点的充分条件

第三十一篇:TCP协议如何解决丢包的问题,TCP系列六

前面我们说TCP协议是可靠的、基于字节流、面向连接的传输层通信协议&#xff1b; 这里我想换种说法&#xff1a;与其说是TCP协议是可靠的&#xff0c;不如说传输层程序软件实现了TCP协议的规范&#xff08;网络层次模型&#xff0c;每一层都有对应的程序软件&#xff09;&…

【从零开始的LeetCode-算法】3185. 构成整天的下标对数目 II

给你一个整数数组 hours&#xff0c;表示以 小时 为单位的时间&#xff0c;返回一个整数&#xff0c;表示满足 i < j 且 hours[i] hours[j] 构成 整天 的下标对 i, j 的数目。 整天 定义为时间持续时间是 24 小时的 整数倍 。 例如&#xff0c;1 天是 24 小时&#xff0c…

ApacheShiro反序列化 550 721漏洞

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理个漏洞被称为 Shiro550 是因为在Apache Shiro的GitHub问题跟踪器中&#xff0c;该漏洞最初被标记为第550个问题,721漏洞名称也是由此而来 Shiro-550 CVE-2016-4437 Shiro反序列化Docker复现 …

重学SpringBoot3-Spring WebFlux之HttpHandler和HttpServer

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-Spring WebFlux之HttpHandler和HttpServer 1. 什么是响应式编程&#xff1f;2. Project Reactor 概述3. HttpHandler概述3.1 HttpHandler是什么3.2 Http…