01. Linux嵌入式系统学习笔记(一)
一. linux基础操作指令
1. 新建文件和目录
(1) 新建文件
-
touch命令:用于创建空文件。
touch filename.txt
-
如果文件已存在,
touch会更新文件的访问时间和修改时间。
(2) 新建目录
-
mkdir命令:用于创建目录。
mkdir directoryname
-
使用
-p选项可以递归创建多级目录
mkdir -p parent/child/grandchild
2. 删除文件和目录
(1) 删除文件
-
rm命令:用于删除文件。
rm filename.txt
-
使用
-f选项可以强制删除文件,不提示确认。
rm -f filename.txt
(2) 删除目录
-
rmdir命令:用于删除空目录。
rmdir directoryname
-
如果目录不为空,需要使用
rm -r或rm -rf。
rm -r directoryname # 递归删除目录及其内容,但会提示确认
rm -rf directoryname # 强制递归删除目录及其内容,不提示确认
3. 查找文件和目录
(1) 查找文件
-
find命令:用于在指定目录及其子目录中查找文件。-name选项用于指定文件名。
find /path/to/search -name "filename.txt"
-
可以使用通配符(如
*.txt)来匹配特定模式的文件。
find /path/to/search -name "*.txt"
(2) 查找目录
-
使用
find命令查找目录。-type d表示只查找目录。
find /path/to/search -type d -name "directoryname"
4. 修改文件和目录
(1) 修改文件内容
-
nano或vim:使用文本编辑器直接编辑文件内容。
nano filename.txt # nano
vim filename.txt # vim
(2) 修改文件权限
-
chmod命令:用于修改文件或目录的权限。
chmod 644 filename.txt # 设置文件权限为所有者读写,组和其他用户只读
chmod -R 755 directoryname # 递归设置目录权限
(3) 修改文件所有者
-
chown命令:用于修改文件或目录的所有者。
chown newowner filename.txt
(4) 修改文件所属组
-
chgrp命令:用于修改文件或目录的所属组。
(4) 修改文件所属组
chgrp 命令:用于修改文件或目录的所属组。
5. 拷贝文件和目录
(1) 拷贝文件
-
cp命令:用于拷贝文件。
cp sourcefile destinationfile
(2) 拷贝目录
-
使用
-r或-R选项递归拷贝目录。
cp -r sourcedirectory destinationdirectory
6. 移动文件和目录
(1) 移动文件
-
mv命令:用于移动文件或重命名文件。
mv sourcefile destinationfile
(2) 移动目录
-
同样使用
mv命令。
mv sourcedirectory destinationdirectory
7. 查看文件内容
(1) 查看文件内容
-
cat命令:用于查看文件内容。
cat filename.txt
(2) 查看文件前几行
-
head命令:用于查看文件的前几行(默认显示前10行)。
head filename.txt
(3) 查看文件后几行
-
tail命令:用于查看文件的后几行(默认显示后10行)。
tail filename.txt
8. 总结
这些是 Linux 终端中常用的文件和目录操作命令。通过掌握这些命令,你可以高效地管理文件和目录。以下是这些命令的简要总结:
| 操作类型 | 命令 | 说明 |
|---|---|---|
| 新建文件 | touch | 创建空文件 |
| 新建目录 | mkdir | 创建目录 |
| 删除文件 | rm | 删除文件 |
| 删除目录 | rm -r 或 rmdir | 删除目录 |
| 查找文件 | find | 查找文件或目录 |
| 修改文件内容 | nano 或 vim | 编辑文件内容 |
| 修改文件权限 | chmod | 修改文件或目录的权限 |
| 修改文件所有者 | chown | 修改文件或目录的所有者 |
| 修改文件所属组 | chgrp | 修改文件或目录的所属组 |
| 拷贝文件 | cp | 拷贝文件或目录 |
| 移动文件 | mv | 移动文件或重命名文件 |
| 查看文件内容 | cat | 查看文件内容 |
| 查看文件前几行 | head | 查看文件的前几行 |
| 查看文件后几行 | tail | 查看文件的后几行 |
二. 熟悉文件操作指令
1. 建立一个目录~/work/test,在此目录下用 echo 命令建立一个文件 mytext,输 入以下内容:
Hello there !
There are things we know we know.
And things we know we don’t know.
Still there are things we don’t know we don’t know.
# 创建目录
mkdir -p ~/work/test
# 进入目录
cd ~/work/test
# 使用 echo 命令创建文件并写入内容 -e 是让echo识别转义字符
echo -e "Hello there ! \nThere are things we know we know. \nAnd thing we know we don't know. \nStill there are things we don't know we don't know." > mytext
2. 用 vi 打开 mytext 进行编辑修改,练习主要 vi 命令的使用。
# 打开 mytext 文件 vi mytext 在 vi 编辑器中,你可以练习以下常用命令:
i:进入插入模式
Esc:退出插入模式,回到命令模式
:wq:保存并退出
:q!:不保存并退出
dd:删除当前行
yy:复制当前行
p:粘贴
/pattern:搜索pattern
3. 用 echo 命令为 mytext 增加一行文本 “Add a new line”。
# 使用 echo 追加一行内容
echo "Add a new line" >> mytext
# 注意: > 是覆盖写入
# >> 是追加写入
4. 用 grep 命令搜索 mytext 中“there”,不分大小写。然后统计包含”there”字 串的行数。
# 搜索 "there",忽略大小写
grep -i "there" mytext
# 统计包含 "there" 的行数
grep -i "there" mytext | wc -l
grep是文本搜索工具,用于在文件或文本流中搜索符合特定模式的行。global/regular expression/print的缩写,表示全局正则表达式打印
1. 基本搜索
grep "pattern" filename # 在文件 filename 中搜索包含字符串 pattern 的行,并打印这些行。2. 忽略大小写
grep -i "pattern" filename # -i 选项表示忽略大小写,搜索时不区分大小写。3. 反向匹配
grep -v "pattern" filename # -v 选项表示反向匹配,打印不包含指定模式的行。4. 显示行号
grep -n "pattern" filename # -n 选项会在匹配的行前显示行号。5. 递归搜索
grep -r "pattern" directory/ # -r 或 -R 选项表示递归搜索,会在指定目录及其子目录中搜索匹配的文件。6. 显示匹配的上下文
grep -C 2 "pattern" filename # -C 选项表示上下文(Context),会显示匹配行的上下各2行。 # 类似地,-A 显示匹配行之后的行,-B 显示匹配行之前的行。7. 使用正则表达式
grep "^[a-z]" filename # grep 默认支持基本正则表达式(BRE)。例如,^ 表示行首,[a-z] 表示任意小写字母。 # 使用 -E 或 egrep 可以启用扩展正则表达式(ERE),支持更复杂的表达式。8. 统计匹配的行数
grep -c "pattern" filename # -c 选项统计匹配的行数,而不是显示匹配的行。9. 只显示匹配的部分
grep -o "pattern" filename # -o 选项只显示匹配的部分,而不是整行。
5. 用 file mytext 查看文件类型。
# 查看文件类型
file mytext
6. 用 chmod 命令修改 mytext 让所有用户可读写。
# 修改文件权限为所有用户可读写
chmod a+rw mytext
`chmod`(change mode)是 Linux 和 Unix 系统中用于更改文件或目录权限的命令。它允许用户修改文件或目录的访问权限,以控制谁可以读取、写入或执行这些资源。
1. 权限概述
在 Linux 系统中,文件和目录的权限分为三类:
所有者(Owner) :文件或目录的所有者。
所属组(Group) :文件或目录所属的用户组。
其他用户(Others):不属于上述两类的其他用户。每类用户可以有以下三种权限:
读权限(r) :允许查看文件内容或列出目录内容。
写权限(w) :允许修改文件内容或删除/修改目录中的文件。
执行权限(x):允许运行文件(如可执行脚本)或进入目录。2. 查看权限
使用 `ls -l` 命令可以查看文件或目录的权限:ls -l filename输出示例:
-rw-r--r-- 1 user group 123 Mar 18 10:00 filename
解释:
- `-rw-r--r--`:权限部分。- 第一个字符 `-` 表示文件类型(`-` 表示普通文件,`d` 表示目录)。- 接下来的三个字符 `rw-` 表示所有者的权限(读写权限)。- 接下来的三个字符 `r--` 表示所属组的权限(只读权限)。- 最后三个字符 `r--` 表示其他用户的权限(只读权限)。3. 修改权限
`chmod` 命令可以通过两种方式修改权限:符号模式 和 数字模式。(1) 符号模式
符号模式使用符号(`+`、`-`、`=`)来修改权限。`+` :添加权限。
`-` :移除权限。
`=` :设置权限。用户类别:
`u` :所有者(user)。
`g` :所属组(group)。
`o` :其他用户(others)。
`a` :所有类别(all)。权限类型:
`r` :读权限。
`w` :写权限。
`x` :执行权限。示例:
给文件所有者添加执行权限:chmod u+x filename移除文件所属组的写权限:
chmod g-w filename设置文件对所有用户为只读:
chmod a=r filename(2) 数字模式
数字模式使用八进制数字表示权限。每个权限类型对应一个数字:
读权限(r) :4
写权限(w) :2
执行权限(x):1权限组合:
`rwx` :7(4 + 2 + 1)
`rw-` :6(4 + 2)
`r-x` :5(4 + 1)
`r--` :4
`w-` :2
`wx` :3(2 + 1)
`---` :0示例:
- 设置文件权限为所有者读写执行,所属组只读,其他用户无权限:chmod 740 filename设置目录权限为所有者读写执行,所属组和他人只读执行:
chmod 755 directoryname4. 常用命令
以下是一些常用的 `chmod` 命令:(1) 修改文件权限
设置文件所有者为读写权限,所属组和其他用户为只读权限:
chmod 644 filename(2) 修改目录权限
设置目录所有者为读写执行权限,所属组和其他用户为读执行权限:
chmod 755 directoryname(3) 递归修改权限
对目录及其所有子文件和子目录递归设置权限:
chmod -R 755 directoryname(4) 添加或移除权限
给文件所有者添加执行权限:chmod u+x filename移除文件所属组的写权限:
chmod g-w filename(5) 设置特殊权限
设置用户ID(SetUID):允许用户以文件所有者的身份运行文件:chmod u+s filename设置组ID(SetGID):允许用户以文件所属组的身份运行文件:
chmod g+s filename设置粘滞位(Sticky Bit)**:防止用户删除或移动不属于自己的文件(常用于共享目录):
chmod +t directoryname5. 总结
`chmod` 是一个强大的命令,用于管理文件和目录的权限。通过符号模式和数字模式,可以灵活地设置权限,以满足不同的安全需求。以下是一些关键点:
符号模式:适合快速修改权限。
数字模式:适合设置复杂的权限组合。
递归修改权限:(`-R`)可以批量设置目录及其内容的权限。
特殊权限:(如 SetUID、SetGID 和 Sticky Bit)可以实现更高级的权限管理。
7. 建立文件连接: mytext 的硬连接 yourtext,mytext 的软连接 thetext。
# 创建硬连接
ln mytext yourtext
# 创建软连接
ln -s mytext thetext
在 Linux 系统中,
ln命令用于创建链接(Link),包括硬链接(Hard Link)和软链接(Soft Link,也称为符号链接或 Symbolic Link)。链接是一种特殊的文件,它指向另一个文件或目录。1. 硬链接(Hard Link)
硬链接是文件系统中的一种机制,它允许一个文件在文件系统中拥有多个名称。硬链接直接指向文件的 inode(索引节点),而不是文件的路径。
特点:
硬链接不能跨文件系统。
硬链接不能链接到目录(出于安全和文件系统结构的考虑)。
硬链接和原始文件共享同一个 inode,因此对文件的修改会反映在所有链接上。
删除硬链接不会删除原始文件,只有当所有链接都被删除时,文件才会被真正删除。
创建硬链接:
ln [源文件] [硬链接名] # 示例 ln file.txt link_to_file.txt # file.txt 是原始文件,link_to_file.txt 是硬链接。 # 修改 file.txt 或 link_to_file.txt 的内容,另一个文件也会相应变化。2. 软链接(Soft Link / Symbolic Link)
软链接是一种特殊的文件,它包含了一个指向目标文件或目录的路径。软链接类似于 Windows 系统中的快捷方式。
特点:
软链接可以跨文件系统。
软链接可以链接到目录。
软链接有自己的 inode,与目标文件或目录的 inode 不同。
如果目标文件被删除,软链接会变成“死链接”(无效链接)。
创建软链接:
#软连接多了 -s ln -s [目标文件或目录] [软链接名] # 示例 ln -s /path/to/file.txt link_to_file.txt # /path/to/file.txt 是目标文件,link_to_file.txt 是软链接。 # 如果目标文件被删除,link_to_file.txt 会变成无效链接。3. 常用选项
-s:创建软链接(符号链接)。
-f:强制创建链接。如果目标链接已经存在,会先删除旧链接再创建新链接。
-i:交互模式。如果目标链接已经存在,会提示用户是否覆盖。
-n:当创建指向目录的软链接时,避免覆盖已存在的软链接。示例:
(1)强制创建软链接
ln -sf /path/to/new_file.txt link_to_file.txt # 如果 link_to_file.txt 已经存在,会先删除旧链接,再创建指向 /path/to/new_file.txt 的新链接。(2)创建指向目录的软链接
ln -s /path/to/directory link_to_directory # 创建一个软链接 link_to_directory,指向 /path/to/directory。5. 使用场景
(1) 硬链接
用于在文件系统内为文件创建别名,方便访问。
用于备份文件,节省存储空间(因为硬链接不占用额外的磁盘空间)。
(2) 软链接
用于创建跨文件系统的链接。
用于创建指向目录的链接。
用于创建指向文件或目录的快捷方式。
用于在开发环境中快速切换配置文件或版本。
6. 总结
ln命令在 Linux 系统中用于创建链接,包括硬链接和软链接。它们的主要区别在于:
硬链接直接指向文件的 inode,不能跨文件系统,不能链接到目录。
软链接包含目标文件或目录的路径,可以跨文件系统,可以链接到目录。
8. ls –l 观察文件属性,引用次数
# 查看文件属性
ls -l
# 输出示例
# -rw-rw-rw- 2 user user 200 Oct 10 12:00 mytext
# -rw-rw-rw- 2 user user 200 Oct 10 12:00 yourtext
# lrwxrwxrwx 1 user user 6 Oct 10 12:00 thetext -> mytext
# mytext 和 yourtext 的引用次数为 2,表示它们共享相同的 inode。
# thetext 是软连接,指向 mytext。
ls(list)是 Linux 和 Unix 系统中最基本的命令之一,用于列出目录中的文件和子目录。它提供了多种选项,可以用来显示文件的详细信息、排序文件、过滤文件等。1. 基本功能
ls命令的主要功能是列出指定目录中的文件和子目录。如果没有指定目录,默认会列出当前工作目录的内容。2. 基本用法
ls [选项] [目录或文件]3. 常见选项
以下是一些常用的
ls选项及其功能:(1)
-l:长格式显示以长格式显示文件和目录的详细信息,包括权限、所有者、所属组、大小、修改时间等。
ls -l # 输出示例 # drwxr-xr-x 2 user group 4096 Mar 18 10:00 directory # -rw-r--r-- 1 user group 1234 Mar 18 09:00 file.txt(2)
-a:显示所有文件显示所有文件和目录,包括以
.开头的隐藏文件。ls -a # 输出示例 # . .. .hiddenfile file.txt directory # . 表示当前目录。 # .. 表示父目录。 # .hiddenfile 是隐藏文件。(3)
-h:以易读格式显示文件大小以更易读的格式(如 KB、MB、GB)显示文件大小。
ls -lh # 输出示例 # drwxr-xr-x 2 user group 4.0K Mar 18 10:00 directory # -rw-r--r-- 1 user group 1.2M Mar 18 09:00 file.txt(4)
-t:按修改时间排序按修改时间排序,最近修改的文件或目录会显示在前面。
ls -lt(5)
-r:反向排序对排序结果进行反向排序。
ls -ltr # 按修改时间反向排序(6)
-S:按文件大小排序按文件大小排序,较大的文件会显示在前面。
ls -lS(7)
-R:递归显示递归显示目录及其子目录中的内容。
ls -R(8)
-1(数字1):每行显示一个文件或目录每行显示一个文件或目录名称,而不是按列显示。
ls -14. 组合使用选项
ls命令支持组合使用多个选项,以满足不同的需求。例如:ls -lath # -l:长格式显示。 # -a:显示所有文件(包括隐藏文件)。 # -t:按修改时间排序。 # -h:以易读格式显示文件大小。5. 示例
# (1) 列出当前目录的内容 ls # (2) 列出当前目录的详细信息 ls -l # (3) 列出包括隐藏文件的所有内容 ls -la # (4) 列出按修改时间排序的内容 ls -lt # (5) 列出按文件大小排序的内容 ls -lS # (6) 递归列出目录内容 ls -R # (7) 列出指定目录的内容 ls /path/to/directory
9. 用 chmod 修改连接属性 yourtext 和 thetext 的属性为只读,用 ls –l 观察
# 修改硬连接 yourtext 为只读
chmod a-w yourtext
# 修改软连接 thetext 为只读
chmod a-w thetext
# 查看文件属性
ls -l# 输出示例
# -rw-rw-rw- 2 user user 200 Oct 10 12:00 mytext
# -r--r--r-- 2 user user 200 Oct 10 12:00 yourtext
# lrwxrwxrwx 1 user user 6 Oct 10 12:00 thetext -> mytext
# yourtext 的权限变为只读。
# thetext 是软连接,其权限不受 chmod 影响。
10. 删除 mytext,用 ls –l 观察
# 删除 mytext
rm mytext
# 查看文件属性
ls -l# 输出示例
# -r--r--r-- 1 user user 200 Oct 10 12:00 yourtext
# lrwxrwxrwx 1 user user 6 Oct 10 12:00 thetext -> mytext# mytext 被删除后,yourtext 仍然存在,因为它是硬连接。
# thetext 仍然存在,但指向的文件 mytext 已被删除,因此 thetext 会显示为红色或提示文件不存在。
11. cp yourtext mytext,用 ls –l 观察
# 复制 yourtext 到 mytext
cp yourtext mytext
# 查看文件属性
ls -l# 输出示例
# -r--r--r-- 1 user user 200 Oct 10 12:00 mytext
# -r--r--r-- 1 user user 200 Oct 10 12:00 yourtext
# lrwxrwxrwx 1 user user 6 Oct 10 12:00 thetext -> mytext# mytext 被重新创建,内容与 yourtext 相同。
# thetext 现在指向新的 mytext 文件。
三. 练习文档建立和压缩/解压操作
1. 创建测试目录
假设当前目录下已存在 test 目录。若没有,可通过以下命令创建:
mkdir test && touch test/file{1..3}.txt # 创建 test 目录及三个测试文件
2. 压缩操作
(1)使用 gzip 压缩(.tar.gz 或 .tgz)
tar -czvf test.tar.gz test/ # 打包并压缩为 .tar.gz
# 或
tar -czvf test.tgz test/ # 等效写法
(2)使用 bzip2 压缩(.tar.bz2)
tar -cjvf test.tar.bz2 test/ # 打包并压缩为 .tar.bz2
(3)使用 xz 压缩(.tar.xz 或 .txz)
tar -cJvf test.tar.xz test/ # 打包并压缩为 .tar.xz
# 或
tar -cJvf test.txz test/ # 等效写法
(4)仅打包不压缩(.tar)
tar -cvf test.tar test/ # 仅打包,不压缩
3. 解压操作
(1)解压 .tar.gz 或 .tgz
tar -xzvf test.tar.gz # 指定解压参数
# 或
tar -xvf test.tar.gz # 自动检测压缩类型(推荐)
(2)解压 .tar.bz2
tar -xjvf test.tar.bz2 # 指定解压参数
# 或
tar -xvf test.tar.bz2 # 自动检测压缩类型(推荐)
(3)解压 .tar.xz 或 .txz
tar -xJvf test.tar.xz # 指定解压参数
# 或
tar -xvf test.tar.xz # 自动检测压缩类型(推荐)
(4)解压 .tar
tar -xvf test.tar # 解压未压缩的 tar 包
(可选)解压到指定目录
tar -xvf test.tar.gz -C /path/to/target_dir # 将内容解压到 target_dir
4. 常用参数说明
| 参数 | 作用 |
|---|---|
c | 创建压缩包 |
x | 解压 |
z | 使用 gzip 压缩/解压 |
j | 使用 bzip2 压缩/解压 |
J | 使用 xz 压缩/解压 |
v | 显示操作过程(详细信息) |
f | 指定文件名(必须紧跟文件名) |
C | 指定解压目录 |
5. 验证压缩/解压结果
-
查看压缩包内容:
tar -tf test.tar.gz # 列出 .tar.gz 中的文件
-
检查解压后的目录:
ls test/ # 确认文件与原始目录一致
四. 练习编写和运行简单的 bash 脚本
1. 将课上 PPT 上的简单脚本例子用 vi 编辑为 test.sh。
(1).使用 vi 创建并编辑脚本
vi test.sh
(2).在 vi 中输入以下内容(按 i 进入编辑模式)
#!/bin/bash
# 这是一个简单的 Bash 脚本示例
echo "Hello World!"
date # 显示当前时间
(3).保存并退出 vi(按 Esc 退出编辑模式;输入 :wq 保存并退出)
2. 用两种方法执行这个脚本:sh test.sh 和./test.sh。
(1). 方法一: 直接使用 sh 命令
sh test.sh
(2).方法二:赋予执行权限后通过路径运行
# 1. 添加可执行权限
chmod +x test.sh# 2. 通过相对路径执行
./test.sh
两种方法的区别:
sh test.sh :显示指定使用 sh 解释器执行脚本,即使脚本中没有 #!/bin/bash 也能运行。
./test.sh :依赖脚本首行的 ( #!/bin/bash )指定解释器,需先赋予执行权限。
3. 编写一个脚本设置自己需要的环境变量,例如设置程序别名,增加可执行路径。
创建一个脚本 set_env.sh ,用于设置别名和添加可执行路径:
步骤:
(1). 编辑脚本
vi set_env.sh
(2). 输入以下内容
#!/bin/bash
# 设置环境变量示例
alias ll='ls -alF' # 定义别名 ll
export PATH=$PATH:~/bin # 将 ~/bin 添加到 PATH
(3). 保存并退出 vi
4. 用 source 命令执行这个脚本,然后执行进行测试,看看环境变量设置是否成功。
(1). 使用 source 或 . 执行脚本
source set_env.sh # 方法一
# 或
. set_env.sh # 方法二(等效写法)
(2). 测试环境变量是否生效
测试别名 ll :
ll # 应显示详细文件列表
检查 PATH 是否更新 :
echo $PATH # 输出中应包含 ~/bin
关键点:
使用 source 或 . 是为了让脚本在当前 Shell 中生效(而非子 Shell )。
直接运行 ./set_env.sh 或 sh set_env.sh 不会生效,因为环境变量仅在子 Shell 中有效。
5. 永久生效(可选)
若希望环境变量永久生效,可将脚本内容添加到 ~/.bashrc 或 ~/.bash_profile:
echo "alias ll='ls -alF'" >> ~/.bashrc
echo "export PATH=\$PATH:~/bin" >> ~/.bashrc
source ~/.bashrc # 立即生效
总结
| 操作 | 命令/方法 |
|---|---|
| 编辑脚本 | vi test.sh |
| 执行脚本(无权限) | sh test.sh |
| 执行脚本(有权限) | chmod +x test.sh + ./test.sh |
| 设置环境变量并生效 | source set_env.sh |
| 永久生效 | 将内容添加到 ~/.bashrc |
五. 练习文件搜索
1. 搜索以 arm- 开头、以 gcc 结尾的文件,找到用于 ARM 程序编译的 GCC 编译器路径。
sudo find / -type f -name 'arm-*gcc' 2>/dev/null
参数说明
sudo | 以管理员权限搜索整个系统(可能需要输入密码) |
-find / | 从根目录开始递归搜索 |
-type f | 仅搜索普通文件 |
-name 'arm-*gcc' | 匹配以 arm- 开头、以 gcc 结尾的文件名 |
2>/dev/null | 忽略权限错误等干扰信息 |
输出示例
/usr/bin/arm-linux-gnueabi-gcc
/opt/arm-toolchain/bin/arm-none-eabi-gcc
注意事项
-
常见 ARM GCC 编译器路径可能位于
/usr/bin或工具链安装目录(如/opt)。 -
如果未安装 ARM GCC,需先通过包管理器安装(如
apt install gcc-arm-linux-gnueabi)。
2. 搜索 /bin/ 目录下的所有符号链接文件
列出 /bin/ 目录中所有软链接文件。
find /bin -type l
参数说明
-type l | 仅搜索符号链接文件(软链接) |
输出示例
/bin/sh -> dash
/bin/rm -> /usr/bin/rm
验证链接指向
ls -l /bin/sh # 查看软链接指向的实际文件
3. 统计 /dev/ 下的字符设备和块设备文件数量
echo "字符设备文件数量:$(find /dev -type c | wc -l)"
echo "块设备文件数量:$(find /dev -type b | wc -l)"
参数说明
-type c | 搜索字符设备文件(如终端 /dev/tty) |
-type b | 搜索块设备文件(如磁盘 /dev/sda) |
-wc -l | 统计行数(即文件数量) |
输出示例
字符设备文件数量:123
块设备文件数量:5
设备类型说明
| 类型 | 描述 | 常见示例 |
| 字符设备 | 按字符流读写 | /dev/tty, /dev/null |
| 块设备 | 按数据块读写 | /dev/sda, /dev/loop0 |
总结
| 问题 | 命令/方法 | 关键参数 |
| 搜索特定文件名 | find / -name 'arm-*gcc' | -name, 2>/dev/null |
| 搜索符号链接 | find / bin -type l | -type l |
| 统计设备文件 | find /dev -type c 和 find /dev -type b | -type c, -type b |
六. 练习挂在移动存储设备
1. 查看现有磁盘设备
命令
ls /dev/sd* # 列出所有以 sd 开头的设备(如 sda, sdb)
sudo fdisk -l # 列出所有磁盘及分区信息(需管理员权限)
说明
-
/dev/sda: 第一块物理磁盘(如系统盘)。 -
/dev/sdb: 第二块物理磁盘(可能是插入的 U 盘)。
2. 插入 U 盘并分配给虚拟机(仅限虚拟机环境)
操作步骤
1. 插入 U 盘到物理机。
2. 虚拟机软件设置(以 VirtualBox 为例)
点击虚拟机菜单栏:设备 → USB → 选择你的 U 盘设备。
3. 确认 U 盘已连接到虚拟机:
虚拟机右下角状态栏显示 U 盘图标。
3. 检查 U 盘设备及挂载状态
命令
sudo fdisk -l # 查看新增的 U 盘设备(如 /dev/sdb1)
mount | grep sd # 查看已挂载的磁盘设备(自动挂载的 U 盘路径通常是 /media/用户名/卷标)
示例输出
/dev/sdb1 /media/user/USB_DISK vfat rw,nosuid,nodev 0 0
4. 卸载自动挂载的 U 盘
命令
# 如果系统已自动挂载,先卸载
sudo umount /dev/sdb1 # 通过设备路径卸载
# 或
sudo umount /media/user/USB_DISK # 通过挂载点卸载
5. 再次检查设备状态
sudo fdisk -l # 确认 /dev/sdb1 仍存在(设备未移除)
mount | grep sd # 确认 U 盘挂载点已消失
6. 手动挂载 U 盘到指定目录
步骤
1. 创建挂载目录
sudo mkdir -p /media/udisk # 创建目标目录
2. 挂载U盘
sudo mount /dev/sdb1 /media/udisk # 手动挂载
3. 验证挂载
mount | grep udisk # 查看挂载信息
ls /media/udisk # 列出 U 盘内容
7. 卸载 U 盘并从虚拟机移除
步骤
1. 卸载U盘
sudo umount /media/udisk # 通过挂载点卸载
# 或
sudo umount /dev/sdb1 # 通过设备路径卸载
2. 安全移除U盘
虚拟机环境:点击右下角 U 盘图标 → 选择 断开连接
物理机环境:直接拔出 U 盘(确保已卸载)。
关键命令总结
| 操作 | 命令/方法 |
|---|---|
| 查看磁盘设备 | sudo fdisk -l |
| 查看已挂载设备 | mount | grep sd |
| 卸载设备 | sudo umount /dev/sdb1 或 sudo umount /挂载点 |
| 手动挂载 | sudo mount /dev/sdb1 /media/udisk |
| 安全移除 U 盘(虚拟机) | 虚拟机菜单栏断开 USB 设备 |
注意事项
1. 设备名称可能不同:U 盘可能为 /dev/sdc1 或其他名称,需根据 fdisk -l 实际输出调整。
2. 文件系统兼容性:如果 U 盘为 NTFS 文件系统,需安装 ntfs-3g 驱动:
sudo apt install ntfs-3g # Ubuntu/Debian
3. 卸载前确保无占用:若提示 target is busy,关闭所有访问 U 盘的程序或终端。
七. 操作磁盘映像文件
1. 创建磁盘镜像文件 disk.img
命令
dd if=/dev/zero of=disk.img bs=1024 count=65536
参数说明
-
if=/dev/zero: 输入源为/dev/zero(生成全零文件)。 -
of=disk.img: 输出文件名为disk.img。 -
bs=1024: 每次读写块大小为 1KB。 -
count=65536: 写入 65536 个块,总大小 64MB(1024 * 65536 = 64 MiB)。
验证
ls -lh disk.img # 查看生成的文件大小是否为 64M
2. 格式化镜像文件为 ext2 文件系统
命令
mkfs.ext2 -F disk.img
参数说明
-
-F: 强制格式化,即使文件不是块设备。
可能的问题
-
若提示
mkfs.ext2: command not found,需安装e2fsprogs:
sudo apt install e2fsprogs # Ubuntu/Debian
3. 挂载镜像文件到目录
步骤
1. 创建挂载点目录
mkdir mydisk
2. 挂载镜像文件(需要管理员权限)
sudo mount -o loop disk.img mydisk # 关键:必须添加 `-o loop` 参数
-
-o loop: 将文件关联为循环设备(虚拟块设备)。
3. 验证挂载
mount | grep mydisk # 查看挂载信息
df -h mydisk # 查看挂载点磁盘使用情况
4. 读写操作
cd mydisk
sudo touch test.txt # 创建测试文件(需管理员权限)
sudo echo "Hello" > test.txt
4. 卸载镜像文件
命令
sudo umount mydisk
注意事项
-
若提示
target is busy,表示有进程正在访问挂载点:-
退出
mydisk目录。 -
关闭所有占用该目录的程序或终端。
-
5. 压缩磁盘镜像文件
方法一:使用 gzip(快速压缩)
gzip disk.img # 生成 disk.img.gz
方法二:使用 xz(高压缩率,速度慢)
xz -z disk.img # 生成 disk.img.xz
方法三:使用 bzip2(平衡压缩率与速度)
bzip2 disk.img # 生成 disk.img.bz2
压缩后操作
-
查看压缩文件大小:
ls -lh disk.img.*
-
解压缩:
gunzip disk.img.gz # 解压 .gz
unxz disk.img.xz # 解压 .xz
bunzip2 disk.img.bz2 # 解压 .bz2
关键问题总结
| 步骤 | 命令/操作 | 常见问题及解决方案 |
|---|---|---|
| 创建镜像文件 | dd if=/dev/zero of=disk.img ... | 文件大小不足?调整 bs 和 count |
| 格式化镜像 | mkfs.ext2 -F disk.img | 安装 e2fsprogs 包 |
| 挂载镜像 | mount -o loop ... | 必须添加 -o loop |
| 卸载镜像 | umount mydisk | 确保无进程占用挂载点 |
| 压缩镜像 | gzip/xz/bzip2 | 根据需求选择压缩工具 |
扩展操作
调整镜像文件大小(扩容)
1. 扩展镜像文件至 128 M
dd if=/dev/zero bs=1M count=64 >> disk.img # 追加 64MB
2. 调整文件系统大小
sudo losetup /dev/loop0 disk.img # 关联为循环设备
sudo e2fsck -f /dev/loop0 # 检查文件系统
sudo resize2fs /dev/loop0 # 扩展 ext2 文件系统
sudo losetup -d /dev/loop0 # 解除关联
八. 练习挂载 NFS 网络文件系统
目的:将练习目录~/work 进行 NFS 共享,可以将其挂载到从其它主机或本地其它目录。
1. 配置 NFS 服务器端
(1)安装 NFS 服务器软件包
sudo apt update
sudo apt install nfs-kernel-server # Ubuntu/Debian
(2)编辑 /etc/exports 文件
sudo nano /etc/exports 在文件末尾添加以下行(替换实际共享路径):
/home/your_username/work *(rw,no_subtree_check,sync,no_root_sash) -
路径说明:
-
/home/your_username/work:需共享的本地目录(如~/work对应绝对路径/home/user/work)。 -
*:允许所有 IP 访问(生产环境建议限制为特定 IP 或网段,如192.168.1.0/24)。
-
-
权限参数:
-
rw:允许读写。 -
no_subtree_check:禁用子目录检查,提升性能。 -
sync:同步写入,保证数据一致性。 -
no_root_squash:允许客户端 root 用户保留权限(谨慎使用,存在安全风险)。
-
(3)重启 NFS 服务
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server # 开机自启 (4)验证共享配置
sudo exportfs -v 输出应显示共享目录及参数,例如:
/home/user/work<world> (rw,wdelay,no_root_squash,no_subtree_check)
2. 本地挂载测试
(1)创建本地挂载点
mkdir ~/test
(2)挂载 NFS 共享目录
sudo mount -t nfs localhost:/home/your_username/work ~/test
-
参数说明:
-
-t nfs:指定文件系统类型为 NFS。 -
localhost:若在本地测试,可直接用localhost;跨主机需替换为服务器 IP。
-
(3)验证挂载
ls ~/test # 查看共享目录内容
touch ~/test/file.txt # 测试写入权限
(4)卸载共享目录
sudo umount ~/test
3. 其他主机挂载(以客户端为例)
(1)客户端安装 NFS 工具
sudo apt update
sudo apt install nfs-common # Ubuntu/Debian
(2)创建挂载点
sudo mkdir /mnt/nfs_shared
(3)挂载远程 NFS 共享
sudo mount -t nfs 服务器IP:/home/your_username/work /mnt/nfs_shared
示例:
sudo mount -t nfs 192.168.1.100:/home/user/work /mnt/nfs_shared
(4)验证挂载
df -h | grep nfs_shared # 查看挂载信息
ls /mnt/nfs_shared # 检查文件内容
(5)卸载共享目录
sudo umount /mnt/nfs_shared
4. 常见问题及解决
(1)权限被拒绝(Access Denied)
-
原因:
-
服务器端
/etc/exports未正确配置 IP 或权限。 -
客户端用户无共享目录的本地权限。
-
-
解决:
-
检查
/etc/exports的 IP 范围和权限参数(如rw)。 -
确保服务器端共享目录的本地权限开放:
-
sudo chmod 777 /home/your_username/work # 临时测试(不建议生产环境使用)
(2)挂载超时或连接失败
-
原因:
-
防火墙阻止 NFS 端口(默认使用
2049/tcp和111/udp)。 -
服务器与客户端网络不通。
-
sudo ufw allow from 客户端IP to any port nfs # Ubuntu
-
解决:
-
开放防火墙端口。
-
sudo ufw allow from 客户端IP to any port nfs # Ubuntu
-
-
使用
ping和telnet测试网络连通性。
-
telnet 服务器IP 2049
(3) 文件系统只读(Read-Only)
-
原因:
-
服务器端
/etc/exports未配置rw权限。 -
客户端挂载时未指定读写选项。
-
-
解决:
-
修改服务器端配置为
rw并重启 NFS 服务。 -
重新挂载时添加
-o rw参数:
-
sudo mount -t nfs -o rw 服务器IP:/共享目录 /挂载点
5. 自动挂载(可选)
编辑 /etc/fstab 实现开机自动挂载:
sudo nano /etc/fstab
添加以下行:
服务器IP:/home/your_username/work /mnt/nfs_shared nfs defaults 0 0
验证自动挂载:
sudo mount -a # 加载所有 fstab 条目
总结
| 步骤 | 命令/操作 | 关键点 |
|---|---|---|
| 配置 NFS 服务器 | 编辑 /etc/exports + 重启服务 | 确保路径、IP 范围和权限正确 |
| 本地挂载测试 | mount -t nfs localhost:/path ~/test | 验证读写权限 |
| 跨主机挂载 | 客户端安装 nfs-common + 挂载命令 | 检查防火墙和网络连通性 |
| 故障排查 | 检查权限、防火墙、日志 (/var/log/syslog) | 使用 exportfs -v 和 showmount -e |
九. 进程观察和管理
1. 使用 sleep 100 练习进程管理
(1) 启动 sleep 100 进程
sleep 100 # 前台运行,阻塞终端
(2) 暂停进程(Ctrl-Z)
-
按下
Ctrl-Z,进程暂停并转入后台,终端显示:
[1]+ Stopped sleep 100
(3) 查看作业状态
jobs # 输出示例:[1]+ Stopped sleep 100
(4) 后台恢复进程
bg %1 # 输出示例:[1]+ sleep 100 &
(5) 获取进程 PID
ps -x | grep sleep # 查找 PID(如 1234)
(6) 查看进程内存映射
cat /proc/1234/maps # 或使用 pmap
pmap 1234 # 显示内存布局
(7) 前台恢复进程
fg %1 # 进程回到前台继续运行
(8) 进程结束后重新后台启动
sleep 100 & # 直接后台运行
(9) 查看后台作业详情
jobs -l # 显示作业号、PID 和状态
(10) 终止进程
kill 1234 # 通过 PID 终止
# 或
kill %1 # 通过作业号终止
(11) 验证进程状态
ps -x | grep sleep # 确认进程已终止
2. 使用 C 程序 dvar 重复操作
(1) 准备并编译程序
<1>. 创建 dvar.c:
#include <unistd.h>
int main() {while(1) { sleep(1); }return 0;
}
<2>. 编译:
gcc -o dvar dvar.c
(2) 执行程序并重复步骤
./dvar # 前台运行
# 后续操作与 sleep 100 完全相同(Ctrl-Z、jobs、bg/fg、kill 等)
3. 关键命令总结
| 操作 | 命令/快捷键 | 说明 |
|---|---|---|
| 启动前台进程 | sleep 100 或 ./dvar | 阻塞终端 |
| 暂停进程 | Ctrl-Z | 进程转入后台并暂停(状态 T) |
| 查看作业列表 | jobs | 显示所有后台作业 |
| 后台恢复运行 | bg %作业号 | 进程在后台运行(状态 R) |
| 查看进程 PID | ps -x 或 jobs -l | 过滤关键词如 sleep 或 dvar |
| 查看内存映射 | pmap PID | 显示虚拟内存布局 |
| 前台恢复运行 | fg %作业号 | 进程回到前台运行 |
| 终止进程 | kill PID 或 kill %作业号 | 发送 SIGTERM 信号 |
| 强制终止进程 | kill -9 PID | 发送 SIGKILL 信号(慎用) |
4. 进程状态说明
| 状态符号 | 含义 |
|---|---|
R | 运行中或可运行 |
S | 可中断的睡眠(等待事件) |
T | 暂停(Ctrl-Z 或 SIGTSTP) |
Z | 僵尸进程(已终止未回收) |
5. 常见问题
(1)Ctrl-Z 无响应
-
原因:程序未处理
SIGTSTP信号(如自定义信号处理忽略此信号)。 -
解决:修改程序代码或使用
kill -SIGSTOP PID强制暂停。
(2)kill 无法终止进程
-
原因:进程处于
D状态(不可中断睡眠,如等待 I/O)。 -
解决:等待或重启系统(极端情况)。
(3)僵尸进程处理
-
现象:进程状态为
Z,父进程未回收子进程。 -
解决:终止父进程或重启服务。
十. Linux 应用基础 - 课后作业
1. 内核贡献者统计
1.1 author_stats.sh(统计高频作者)
#!/bin/bash# 统计内核源码中前 5 位高频 MODULE_AUTHOR
echo "Top 5 MODULE_AUTHOR contributors:"
grep -r -h -o 'MODULE_AUTHOR(".*")' . | \awk -F'"' '{print $(NF-1)}' | \sort | uniq -c | sort -nr | head -5
说明:
-
grep -r递归搜索所有文件,-h隐藏文件名,-o只输出匹配部分。 -
提取双引号内的作者名,统计频率并取前 5 名。
1.2 danger_func_check.sh(检测危险函数 sprintf)
#!/bin/bash# 查找使用 sprintf 的文件并标红显示
echo "Files using sprintf (highlighted in red):"
grep -rn --color=always '\<sprintf\>' ./*.[ch]
说明:
-
\<sprintf\>精确匹配单词sprintf,避免误匹配。 -
--color=always强制显示颜色(标红)。
1.3 find_magic_secret.sh(查找内核彩蛋)
#!/bin/bash# 查找包含 "magic" 和 "secret" 的文件
echo "Files containing both 'magic' and 'secret':"
grep -rl 'magic' . | xargs grep -l 'secret'
2. 打包脚本
# 赋予脚本执行权限
chmod +x *.sh# 打包为 tar.gz
tar czvf kernel_scripts.tar.gz *.sh
输出文件:kernel_scripts.tar.gz
3. 使用说明
3.1 解压并使用脚本
tar xzvf kernel_scripts.tar.gz
cd <解压目录>
3.2 运行脚本
# 统计高频作者
./author_stats.sh# 检测 sprintf 使用
./danger_func_check.sh# 查找彩蛋文件
./find_magic_secret.sh
4. 示例输出
4.1 author_stats.sh 输出
Top 5 MODULE_AUTHOR contributors:42 Linus Torvalds <torvalds@linux-foundation.org>35 Greg Kroah-Hartman <gregkh@linuxfoundation.org>28 Arnd Bergmann <arnd@arndb.de>25 David S. Miller <davem@davemloft.net>20 Kees Cook <keescook@chromium.org>
4.2 danger_func_check.sh 输出
(终端中 sprintf 显示为红色)
4.3 find_magic_secret.sh 输出
./drivers/misc/magic_driver.c
./kernel/secret_module.c
5.关键命令参数说明
| 命令/参数 | 作用 |
|---|---|
grep -r | 递归搜索目录 |
awk -F'"' | 以双引号为分隔符提取字段 |
sort | uniq -c | 统计频率 |
grep --color=always | 强制终端显示颜色(即使输出到管道) |
grep -rl | 递归搜索并仅输出文件名 |
相关文章:
01. Linux嵌入式系统学习笔记(一)
一. linux基础操作指令 1. 新建文件和目录 (1) 新建文件 touch 命令:用于创建空文件。 touch filename.txt 如果文件已存在,touch 会更新文件的访问时间和修改时间。 (2) 新建目录 mkdir 命令:用于创建目录。 mkdir directoryname 使…...
【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试
【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试 嵌入式系统测试测试策略及测试流程嵌入式软件测试问题及测试方法嵌入式软件的测试流程游戏开发与测试过程游戏开发与通用软件的开发过程区别游戏测试主要内容…...
# [RPA] 使用八爪鱼进行高效网页数据采集
在许多行业中,数据是核心资产。然而,虽然许多网站的文本内容可以免费访问,但手动一条一条采集,不仅耗时耗力,还容易出错。这种情况下,使用自动化工具来提高采集效率就显得尤为重要。本文将介绍 八爪鱼 这一…...
K8S学习之基础三十七:prometheus监控node资源
Prometheus v2.2.1 编写yaml文件,包含创建ns、configmap、deployment、service # 创建monitoring空间 vi prometheus-ns.yaml apiVersion: v1 kind: Namespace metadata:name: monitor-sa# 创建SA并绑定权限 kubectl create serviceaccount monitor -n monito…...
#mapreduce打包#maven:could not resolve dependencies for project
打包报错: #报错信息: [ERROR] Failed to execute goal on project mapreduce_teacher1: Could not resolve dependencies for project org.example:mapreduce_teacher1:jar:1.0-SNAPSHOT: Failed to collect dependencies at org.apache.hive:hive-exe…...
QT软件匠心开发,塑造卓越设计服务
在当今这个数字化飞速发展的时代,软件已经成为我们生活中不可或缺的一部分。而QT,作为一款跨平台的C图形用户界面应用程序开发框架,凭借其强大的功能和灵活性,在众多软件开发工具中脱颖而出。我们深知,在软件开发领域&…...
田间机器人幼苗视觉检测与护苗施肥装置研究(大纲)
田间机器人幼苗视觉检测与护苗施肥装置研究 基于多光谱视觉与精准施肥的农业机器人系统设计 第一章 绪论 1.1 研究背景与意义 农业智能化需求: 传统幼苗检测依赖人工,效率低且易遗漏弱苗/病苗施肥不精准导致资源浪费和环境污染 技术挑战:…...
生物化学笔记:医学免疫学原理 免疫系统的组成与功能+克隆选择学说
免疫系统的组成与功能 克隆选择学说 克隆选择学说(Clonal Selection Theory)是免疫学的核心理论之一,由 麦克法兰伯内特(Frank Macfarlane Burnet) 在 1957 年提出,用于解释特异性免疫反应的机制。 基本概…...
Android 15 获取网络切片信息的标准接口
相关术语 简称全称中文说明URSPUE Route Selection Policy用户路由选择策略URSP 是 5G 核心网(PCF)下发给 UE 的策略,用于指导应用流量如何路由到不同的网络切片或 PDU 会话。其包含多个规则,每条规则由 优先级、业务描述符(Traffic Descriptor) 和 路由选择描述符(Rout…...
MySql创建分区表并且按月分区
前言 在mysql中,按月份分区,再使用分区字段时间来查询数据将会很快,因为这样只需要扫描指定的分区。因此,在处理大量数据时,使用分区表是一个非常好的选择。 1、创建表,并使用RANGE COLUMNS分区 按创建时间…...
招聘面试季--一文顿悟,Java中字节流和字符流的区别及使用场景上的差异
一、核心区别 特性字节流字符流数据单位以字节(8-bit)为单位处理数据(如0xA1)以字符(16-bit Unicode)为单位处理数据(如A, 你)基类InputStream / OutputSt…...
使用【docker】+【shell】脚本半自动化部署微服务项目
一.前言 以下是一个基于 Docker Shell脚本 的半自动化部署方案,包含镜像构建、容器管理、网络配置和日志监控等核心功能,适用于大多数Web应用或微服务项目。 二.目录结构 三.脚本代码实现 1.Shell脚本实现 (deploy.sh) #!/bin/bash# 设置颜…...
uni-app——计时器和界面交互API
API 基本概要 概念说明 API(应用程序接口)是预先定义的方法集合,用于实现特定功能。在 uni-app 中,通过全局对象 uni 调用 API,例如 uni.getSystemInfoSync 获取设备信息。 API 分类与调用规则 事件监听型 以 on 开…...
使用 GitHub 可重用工作流和 GitHub Actions 简化 DevOps
在当今的 DevOps 环境中,自动化是开发团队能够更快地交付功能并维护高质量代码库的关键。这就是像 GitHub Actions 这样的工具变得不可或缺的地方,因为它能够直接在存储库中自动化、自定义和执行 GitHub 工作流程。 当然,随着项目的规模和存…...
深入理解MySQL日志机制
目录 1. MySQL日志概述 2. 错误日志(Error Log) 2.1 错误日志的作用 2.2 错误日志的配置 2.3 查看错误日志 3. 二进制日志(Binary Log) 3.1 二进制日志的作用 3.2 二进制日志的配置 3.3 查看二进制日志 3.4 二进制日志的…...
Sql Server 索引性能优化 分析以及分表
定位需优化语句 根据工具 skywking 或者开启慢查询日志 找到 慢sql 的语句根据 执行过程 来 判断 慢的原因 row filter 指标 看查了多少数据 比例多少 type 看下是单表 还是 join联表 比如 执行步骤多 没索引 优化方向 减少执行次数索引 没索引考虑加索引 加索引 尽量选择 i…...
vue使用element-ui自定义样式思路分享【实操】
前言 在使用第三方组件时,有时候组件提供的默认样式不满足我们的实际需求,需要对默认样式进行调整,这就需要用到样式穿透。本篇文章以vue3使用element-ui的Tabs组件,对Tabs组件的添加按钮样式进行客制化为例。 确定需要修改的组…...
2020年全国职业院校技能大赛改革试点赛高职组“云计算”竞赛赛卷第二场次题目:容器云平台部署与运维
2020年全国职业院校技能大赛改革试点赛高职组 “云计算”竞赛赛卷 第二场次题目:容器云平台部署与运维 说明:本任务提供有2台服务器master和node,都安装了centos7.5操作系统,在/opt/centos目录下有CentOS-7-x86_64-DVD-1804系统光盘文件所有文件,在/opt/containerk8s目…...
PowerBI 条形图,解决数据标签在条形内部看不清的问题
比如下面的条形图: 最上面两行,数据标签显示在了条形内部,哪怕设置了值为黑色 字体也会自动切换为白色,如果设计要求条形的颜色是浅色,就会导致数据看不清晰。 解决方法一: 将数据标签位置设置为端外 效果…...
下载与快速上手 NVM:Node.js 版本管理工具
一、准备工作:卸载旧版 Node.js 重要提示:在安装 NVM 前,请先彻底删除已安装的 Node.js,避免路径冲突: 检查安装路径 bash where node常见路径: C:\Program Files\nodejs\C:\Users\用户名\AppData\Local\n…...
网络防火墙(Firewall)、Web防火墙(WAF)、入侵检测系统(IDS)、入侵防御系统(IPS)对比总结
目录 一、Firewall、WAF、IDS、IPS四种设备简介 二、Firewall、WAF、IDS、IPS四种设备的角色定位 三、防火墙(Firewall)与入侵检测系统(IPS)的区别 四、入侵检测系统(IDS)与入侵防御系统(IP…...
Unity | 游戏数据配置
目录 一、ScriptableObject 1.创建ScriptableObject 2.创建asset资源 3.asset资源的读取与保存 二、Excel转JSON 1.Excel格式 2.导表工具 (1)处理A格式Excel (2)处理B格式Excel 三、解析Json文件 1.读取test.json文件 四、相关插件 在游戏开发中,策划…...
IT工具 | node.js 进程管理工具 PM2 大升级!支持 Bun.js
P(rocess)M(anager)2 是一个 node.js 下的进程管理器,内置负载均衡,支持应用自动重启,常用于生产环境运行 node.js 应用,非常好用👍 🌼概述 2025-03-15日,PM2发布最新版本v6.0.5,这…...
VulnHub-Web-Machine-N7通关攻略
一、信息收集 第一步:确定靶机IP为192.168.0.107 第二步:扫描后台及开放端口 第三步:进行敏感目录及文件扫描 http://192.168.0.107/index.html (CODE:200|SIZE:1620) http://192.168.0.107/server-status (CODE:403|SIZ…...
发现一个好用的Vue.js内置组件
目录 一、这个好用的内置组件是什么? 二、这个组件的主要功能 三、怎么使用? 四、使用注意事项 五、我的使用场景 一、这个好用的内置组件是什么? 今天在优化我的平台应用时,发现一个好用的组件标签--<keep-alive>。 …...
论华为 Pura X 折叠屏性能检测
在科技浪潮中,折叠屏手机以其创新形态掀起市场热潮。华为 Pura X 作为华为最新折叠手机,承载前沿科技与精湛工艺,成为行业焦点。它融合先进折叠屏技术与优质材质,致力于打破传统手机使用边界,为用户开启全新体验。但产…...
生成PDF文件:从html2canvas和jsPdf渲染到Puppeteer矢量图
刚刚实现而已:第一次明白,双击或file:///打开html文件,居然和从localhost:3000打开同一个html文件有本质的区别。 字体居然还能以Base64代码嵌入到网页,只是太大太笨。 需要安装node.js,npm安装更多依赖:…...
在 Elasticsearch 中探索基于 NVIDIA 的 GPU 加速向量搜索
作者:来自 Elastic Chris Hegarty 及 Hemant Malik 由 NVIDIA cuVS 提供支持,此次合作旨在为开发者在 Elasticsearch 中的向量搜索提供 GPU 加速。 在 Elastic Engineering 组织内,我们一直致力于优化向量数据库的性能。我们的使命是让 Lucen…...
Junit在测试过程中的使用方式,具体使用在项目测试中的重点说明
JUnit 是一个广泛使用的 Java 单元测试框架,主要用于编写和运行可重复的测试。以下是 JUnit 在项目测试中的使用方式和重点说明: 1. 基本使用 场景:测试一个简单的 Java 类。 示例: import org.junit.Test; import static org.junit.Assert.*;public class CalculatorTe…...
关于CNN,RNN,GAN,GNN,DQN,Transformer,LSTM,DBN你了解多少
以下是神经网络中常见的几种模型的简要介绍: 1. CNN (Convolutional Neural Network, 卷积神经网络) 用途: 主要用于图像处理和计算机视觉任务。特点: 通过卷积核提取局部特征,具有平移不变性,能够有效处理高维数据(如图像…...
