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

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

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
......

相关文章:

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

Linux 的命名规则 相对于其他操作系统&#xff08;如 Windows &#xff09;来说&#xff0c;Linux 的命名规则并没有那么多条条框框&#xff0c;还算是比较自由的。在 Linux 中&#xff0c;它的命名规则有如下几点要求&#xff1a; 首先是大小写敏感&#xff1a;例如在 Linux…...

CTFHUB技能树之文件上传——MIME绕过

开启靶场&#xff0c;打开链接&#xff1a; 直接指明是MIME验证 新建04MIME.php文件&#xff0c;内容如下&#xff1a; <?php echo "Ciallo&#xff5e;(∠・ω< )⌒★";eval($_POST[pass]);?> &#xff08;这里加了点表情&#xff0c;加带点私货&#x…...

4种鼓励创业创新的方法

随着市场趋于饱和&#xff0c;许多企业&#xff0c;尤其是初创企业&#xff0c;很难在竞争中保持领先地位。技术为企业彻底改变其营销和管理策略铺平了道路。另一个经过实践检验的成功渗透特定市场的方法是在办公室内部激发创新&#xff0c;从员工到品牌皆如此。 那么究竟如何…...

C#中的LINQ之美:优雅的数据查询与操作

LINQ&#xff08;Language Integrated Query&#xff0c;语言集成查询&#xff09;是C#中一个强大的工具&#xff0c;它将查询功能直接融入到语言中&#xff0c;使开发者能够以一种更直观、更接近自然语言的方式来操作数据。LINQ不仅能极大地提高开发效率&#xff0c;而且让代码…...

深入浅出:深度学习模型部署全流程详解

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024往期回顾&#xff1a; 【论文精读】PSAD&#xff1a;小样本部件分割揭示工业异常检测的合成逻辑每日一言&#x1f33c;: 生活要有所期待&#xff0c; 否则就如同罩在…...

git已经commit,但未push想撤回提交

git已经commit,但未push想撤回提交 1、重置到上一个提交2、只想撤回提交但保留修改3、操作方法 工作区(本地)、暂存区(commit)、版本库(远程) 1、重置到上一个提交 git reset --hard HEAD~1 这会将当前分支重置到上一个提交&#xff0c;丢弃你的最新提交和所有未保存的修改。 …...

SSL VPN调试思路及配置指南

一、概述 本指南旨在详细阐述外部人员通过SSL VPN访问内部资源的调试过程与配置步骤。SSL VPN被单臂部署在核心交换机上&#xff0c;并通过外网防火墙将SSL VPN的443端口映射至外部网络&#xff0c;以实现安全的远程访问。 二、配置步骤 系统管理 网络设置&#xff1a; 配置接…...

多租户架构的全景分析(基本概念、实现策略、资源管理和隔离、数据安全与隔离、性能优化、扩展性与升级、案例研究)

文章目录 1. 多租户的基本概念2. 多租户的实现策略2.1 独立数据库模式2.2 共享数据库-独立Schema模式2.3 共享数据库-共享Schema模式 3. 资源管理和隔离4. 数据安全与隔离5. 性能优化6. 扩展性与升级7. 案例研究总结 多租户架构在云计算和SaaS应用中越来越流行&#xff0c;因为…...

TDengine数据库整合MyBatis实现SpringBoot项目CRUD

TDengine数据库整合MyBatis实现SpringBoot项目CRUD 官网&#xff1a; https://docs.taosdata.com/引入依赖 <!-- mybatis版本必须与druid版本兼容&#xff0c;否则无法创建DataSource --><dependency><groupId>com.alibaba</groupId><artifactId&…...

1493. 删除一个元素以后全为1的最长子数组 - 题解

> Problem: 1493. 删掉一个元素以后全为 1 的最长子数组 1493. 删除一个元素以后全为1的最长子数组 - 题解 问题描述 给定一个二进制数组 nums&#xff0c;你需要从中删除一个元素。请你在删掉元素后返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组&…...

密钥管理方法DUKPT的OpenSSL代码实现Demo

目录 1 DUKPT简介 2 基本概念 2.1 BDK 2.2 KSN 2.3 IPEK 2.4 FK 2.5 TK 3 工作流程 3.1 密钥注入过程 3.2 交易过程 3.3 BDK派生IPEK过程 3.4 IPEK计算FK过程 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 5 在线工具 6 标准下载 1 DUKPT简介 DUKPT&a…...

计算机视觉中的坐标变换

1.概述 高级驾驶辅助系统&#xff08;ADAS&#xff09;领域&#xff0c;存在多种常用的坐标系&#xff1a;LiDAR 坐标系、车辆坐标系、相机坐标系、图像坐标系等。因为和这些坐标系频繁打交道&#xff0c;本文对点的旋转与坐标系旋转等变换给出直观推导与说明。 2.坐标点平移…...

C++——NetWork

1.network.h #include <iostream> #include <winsock2.h> #include <cstring>class NetWork {int type; // 通信协议类型int sock_fd; // socket 描述符sockaddr_in addr; // 通信地址int addrlen; // 通信地址字节数bool issvr; …...

iOS -- 代码优化

目录 1. filter 优化2. return 优化案例1案例2 3. for循环优化案例1案例2 4. 枚举 优化5. 未完待续…… 1. filter 优化 原代码 if var vcs vcs {for vc in vcs {if vc is XXLoginViewController {if let index vcs.firstIndex(of: vc) {vcs.remove(at: index)}} }修改后 v…...

docker配置普通用户访问

文章目录 &#x1f315;方法一&#xff1a;让所有用户都可以使用docker&#x1f319;创建docker用户组&#x1f319;把当前用户加入docker用户组&#x1f319;单独把某个用户加入docker用户组&#x1f319;更新激活docker用户组&#x1f319;验证不需要sudo执行docker命令&…...

php后端学习,Java转php

遇到前后端跨域 php解决跨域问题可以加上下面的代码&#xff1a; header(“Access-Control-Allow-Origin:*”); 并且查看自己的数据库信息是否连接成功。 从Java转php 个人感受php跟偏向前端&#xff0c; 写后端逻辑时没有像java又springboot工具方便。 但是和前端联调很方便…...

Elasticsearch 中管道介绍

Elasticsearch 中管道 文章目录 Elasticsearch 中管道1、管道( Ingest Pipeline)1.**管道描述**2.**处理器(Processors)**(1)**`attachment`处理器**(2)**`remove`处理器**3.**整体流程**4.**应用场景**示例:如何使用该管道总结2、如何设置`attachment`处理器取出`指定…...

将jinjia2后端传到前端的字典数据转化为json

后端代码 from flask import Flask, render_template, jsonifyapp Flask(__name__)app.route(/) def index():data {key: value, number: 123}return render_template(index.html, datadata)if __name__ __main__:app.run(debugTrue) 前端代码 使用tojson过滤器即可 <!…...

Linux中如何理解一切皆文件

根据之前的学习我们会有一些少许的疑惑&#xff0c;我们的stdin &#xff0c;stdout&#xff0c;stderr访问的是键盘显示器&#xff0c;然而键盘显示器等他们都有一个共同的特点就是他们都是外设&#xff0c;那么这些外设是怎么被看成是文件的呢&#xff1f; 看图可以知道硬件的…...

【贪心算法】(第十一篇)

目录 坏了的计算器&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 合并区间&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 坏了的计算器&#xff08;medium&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#xff08;Leet…...

React(五) 受控组件和非受控组件; 获取表单元素的值。高阶组件(重点),Portals; Fragment组件;严格模式StrictMode

文章目录 一、受控组件1. 什么是受控组件2. 收集input框内容3. 收集checkBox的值4. 下拉框select总结 二、非受控组件三、高阶组件1. 高阶组件的概念 (回顾高阶函数)2. 高阶组件应用&#xff1a;注入props(1) 高阶组件给---函数式组件注入props(2) 高阶组件给---类组件注入prop…...

深入解析 Jenkins 自动化任务链:三大方法实现任务间依赖与状态控制

文章目录 前言1. 使用 “Build Trigger”&#xff08;构建触发器&#xff09;2. 使用 Jenkins Pipeline 实现任务触发3. 使用 Jenkins 的 “Parameterized Trigger Plugin” 插件例子1&#xff1a;任务 A 成功后自动执行任务 B例子2&#xff1a;任务 A 成功后自动执行 Pipeline…...

无人机飞手执照培训为什么需要脱产学习?

无人机飞手执照培训需要脱产学习的原因主要基于以下几个方面&#xff1a; 一、知识体系的系统性与复杂性 无人机飞手培训涵盖的内容广泛且深入&#xff0c;包括无人机基础知识、飞行原理、气象学、法律法规等多个方面。这些知识体系相互关联&#xff0c;需要学员进行系统的学…...

PostgreSQL(十三)pgcrypto 扩展实现 AES、PGP 加密,并自定义存储过程

目录 一、pgcrypto 简介1.1 安装 pgcrypto 扩展1.2 pgcrypto 包含的函数 二、用法①&#xff1a;对称加密&#xff08;使用 AES、Blowfish 算法&#xff09;2.1 密钥2.2 密钥偏移量 三、用法②&#xff1a;PGP加解密3.1 什么是PGP算法&#xff1f;3.2 使用 GPG 生成密钥对3.3 列…...

uniapp使用webView打开的网页有缓存如何解决(APP,微信小程序)

1、给webView的url增加时间戳 this.webviewUrl ${url}?t${new Date().getTime()}; // 添加时间戳 2、在nginx服务器上添加响应头&#xff0c;告诉浏览器不可以使用缓存 location / {root /opt/webs/lcdp-client/dist;index index.html index.htm;try_files $uri $uri/ /…...

HarmonyOS 模块化设计

1.HarmonyOS 模块化设计 模块化设计文档   应用程序包开发与使用文档 1.1. 概述 组件化一直是移动端比较流行的开发方式&#xff0c;有着编译运行快&#xff0c;业务逻辑分明&#xff0c;任务划分清晰等优点&#xff0c;HarmonyOs组件化的使用&#xff0c;有利于模块之间的解…...

解决docker拉取readeck镜像报Error response from daemon: toomanyrequests问题

readeck 是一个内容中心&#xff0c;目前已支持中文翻译 这是本地化部署后的效果&#xff1a; 原命令为&#xff1a; docker run --rm -ti -p 8000:8000 -v readeck-data:/readeck codeberg.org/readeck/readeck:latest Unable to find image codeberg.org/readeck/readeck:la…...

duilib的应用 在双屏异分辨率的显示器上 运行显示不出来

背景&#xff1a;win11&#xff0c;duilib应用&#xff0c;双显示器&#xff0c;两台分辨率相同&#xff0c;分别设置不同的缩放以后&#xff0c;应用运行以后&#xff0c;程序闪一下消失或者程序还在&#xff0c;但是UI显示不出来。 原因 窗口风格设置不合理&#xff0c;所以…...

零代码快速开发智能体 |甘肃旅游通

在互联网信息爆炸的时代&#xff0c;寻找一处让人心动的旅游胜地往往需要花费大量的时间和精力。而今天&#xff0c;我要向大家介绍一款能够帮助你轻松规划甘肃之行的智能体——“甘肃旅游通”。这款智能体通过低代码开发&#xff0c;集合了丰富的旅游信息和个性化推荐功能&…...

【MATLAB源码-第187期】基于matlab的人工蜂群优化算法(ABC)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 Artificial Bee Colony&#xff08;ABC&#xff09;算法是一种模仿蜜蜂觅食行为的优化算法&#xff0c;它通过模拟蜜蜂群体的社会结构和行为来解决数学优化问题。本文将详细介绍ABC算法的基本原理、算法流程、以及在实际应用…...

广东深圳宝安区疫情最新情况/网络优化工程师主要负责什么工作

ElasticSearch 2 (29) - 信息聚合系列之测试驱动 摘要 我们可以用以下几页定义不同的聚合和它们的语法&#xff0c;但学习聚合的最佳途径就是用实例来说明。一旦我们获得了聚合的思想&#xff0c;以及如何合理地嵌套使用它们&#xff0c;那么语法就变得不那么重要。 版本 elast…...

地图定位网站开发/本地网络seo公司

1.Smartbi Mining Smartbi Mining旨在为企业所做的决策提供预测性智能。通过深度数据建模&#xff0c;为企业提供预测能力支持文本分析、五大类算法和数据预处理&#xff0c;并为用户提供一站式的流程式建模、拖拽式操作和可视化配置体验。该平台不仅可为用户提供直观的流式建…...

湖南做网站 多少钱磐石网络/创建自己的网站怎么弄

人工智能&#xff08;AI&#xff09;是未来的趋势&#xff0c;这句话是技术人员、学者、记者和风险投资家一致赞同的。如同从技术学术领域跨越到普遍行业的许多词语一样&#xff0c;在使用这些词语的时候都存在很大的误解。我们这个时代的最想在某种程度上看到了硅片中的智能的…...

南阳公司做网站/东莞建设企业网站

来源&#xff1a;cnblogs.com/zhenbianshu/p/12018714.html前言从接触编程就开始使用 Git 进行代码管理&#xff0c;先是自己玩 Github&#xff0c;又在工作中使用 Gitlab&#xff0c;虽然使用时间挺长&#xff0c;可是也只进行一些常用操作&#xff0c;如推拉代码、提交、合并…...

网站客服管理系统/深圳最好的外贸seo培训

(160)-(Intersection of Two Linked Lists)-(尾巴相同的list)-(不仅仅是求交集&#xff0c;理解题目的意思很重要)public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB){if(headAnull||headBnull){//因为求的是交集return null; }List…...

宁夏银川做网站的公司/餐饮营销策划与运营

一、事务复制事务性复制通常从发布数据库对象和数据的快照开始。创建了初始快照后&#xff0c;接着在发布服务器上所做的数据更改和架构修改通常在修改发生时&#xff08;几乎实时&#xff09;便传递给订阅服务器。数据更改将按照其在发布服务器上发生的顺序和事务边界&#xf…...