嵌入式学习
共享文件夹的路径 forlinx@ubuntu:/mnt/hgfs/share$
查找文件路径sudo find / -type d -name "OK113i-linux-sdk" 2>/dev/null
源码路径 /home/forlinx/work/OK113i-linux-sdk
cp /home/forlinx/work/OK113i-linux-sdk/out/t113_i_linux_ok113i_uart0.img /mnt/hgfs/share/
scp /home/forlinx/work/OK113i-linux-sdk/out/t113_i/ok113i/longan/boot.img
root@192.168.0.232:/home/
嵌入式学习
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /t REG_DWORD /d 1 /f 主机连了 Wi-Fi,同时通过网线连接开发板,虚拟机需要通过主机访问开发板。
查看当前启动服务
ls /etc/init.d/ ls /etc/rcS.d/
Linux 常用命令说明
touch
功能:创建大小为0的一个空文件参数:touch 文件名
mv
英文全拼:move功能:可以将一个目录移到另一个目录或者对文件进行改名参数:mi 源文件/目录 目的文件/目录 移动文件不要加/
echo
功能:将内容回显到输出设备,echo命令加上重定向可以创建带内容的文件。参数:echo 内容 或者“内容”>文件
cp 命令
-
英文全拼:copy
-
功能:实现文件的复制操作
-
参数
:
-
-r
:递归复制目录下的文件和目录 -
-a
:复制目录时,保留链接、文件属性并递归复制目录下的内容 -
-d
:复制时保留链接 -
-p
:将访问权限以及修改时间也复制到新文件中 -
-i
:若存在目标文件需要用户确认操作 -
-f
:强制复制,如果目标文件已存在则删除不提示 -
-v
:显示文件复制过程
-
file 命令
-
功能:读取文件头并识别文件
-
参数
:
-
-b
:列出辨识结果时,不显示文件名称 -
-f
:指定名称文件 -
-v
:显示版本信息
-
cat 命令
-
英文全拼:concatenate
-
功能:用于连接文件或将文件打印到标准输出设备上
-
参数:直接跟文件名即可
more 命令
功能:用于分页查看文件内容,适用于中等大小的文件。
常用操作:
-
空格(或 Ctrl+f):向下翻一页。
-
b(或 Ctrl+b):往回翻一页,但仅对文件有效,对管道输出无效。
-
Enter:向下滚动一行。
-
:显示文件名以及当前显示的行数。
-
=:输出当前的行号。
-
q:退出 more,不再显示文件内容。
参数:more [选项] 文件名
less 命令
功能:less 命令是 more 命令的升级版,功能更强大,支持前后翻页,适用于大文件或日志文件。
常用操作:
-
空格:向下翻一页(或 PageDown)。
-
PageUp:向上翻一页。
-
Enter(或 ↓):向下滚动一行。
-
↑:向上滚动一行。
-
/字符串:向下搜索指定的字符串。
-
?字符串:向上搜索指定的字符串。
-
n:重复前一个搜索,方向向下。
-
N:重复前一个搜索,方向向上。
-
q:退出 less,不再显示文件内容。
额外功能:
-
less 支持更多快捷键,如 g 跳转到文件开头,G 跳转到文件末尾。
-
可以使用 -N 参数显示行号,使用 -S 参数禁用折行。
whereis 命令
用于定位文件位置,参数格式:whereis [选项] 文件名
。常用选项:
-
-b:只查找二进制文件。
-
-m:只查找帮助文件。
-
-s:只查找源代码文件。
-
-B
-
-M
find 命令
在指定目录下查找文件,参数格式:find 目录 [选项] 查找条件
。常用选项:
-
-name:文件名称符合。
-
-iname:文件名称符合,忽略大小写。
grep 命令
用于查找文件里符合条件的字符串,参数格式:grep [选项]
。常用选项:
-
-r:递归查找符合条件的文件。
-
-n:显示匹配行的行号。
-
-i:忽略大小写进行匹配。
Linux中常见的压缩文件扩展名及说明
-
.gz:gzip压缩生成的文件。gzip是由GNU计划开发出的压缩命令,应用广泛。
-
.bz2:bzip2压缩生成的文件。bzip2提供了比gzip更好的压缩比。
-
.tar:tar打包的数据,没有进行压缩。tar命令可以将多个文件打包成一个文件,但本身不具备压缩功能。
-
.tar.gz:tar打包的数据,经过了gzip压缩。结合了tar的打包功能和gzip的压缩功能。
-
.tar.bz2:tar打包的数据,经过了bzip2压缩。结合了tar的打包功能和bzip2的压缩功能。
gzip 命令
功能
-
压缩:将文件压缩为gz格式。
-
解压缩:对gz格式的文件进行解压缩。
-
限制:仅能针对单个文件进行压缩和解压缩。
参数
-
gzip [选项] 文件名
选项 | 说明 |
---|---|
-c | 在标准输出上写入,保持源文件不变 |
-k | 保持源文件不变 |
-d | 解压缩 |
-r | 对目录进行递归操作(但仅压缩目录下的文件) |
bzip2 命令
功能
-
压缩:将文件压缩为bz2格式。
-
解压缩:对bz2格式的文件进行解压缩。
-
限制:仅能针对单个文件进行压缩和解压缩。
参数
-
bzip2 [选项] 文件名
选项 | 说明 |
---|---|
-c | 输出到标准输出 |
-k | 保持源文件不变 |
-d | 解压缩 |
zcat 命令
功能
-
解压并输出:将gz格式的文件解压缩到标准输出。
参数
-
zcat gz格式文件
bzcat 命令
功能
-
解压并输出:将bz2格式的文件解压缩到标准输出。
参数
-
bzcat bz2格式文件
tar 命令
英文全拼
tape archive
功能
-
文件打包工具:用于将多个文件和目录打包成一个归档文件(称为 "tarball"),通常带有
.tar
扩展名。tar 本身不压缩文件,但可以与压缩工具结合使用,创建压缩的归档文件(如.tar.gz
或.tar.bz2
)。
常用参数
选项 | 说明 |
---|---|
-c | 创建一个新的归档文件 |
-x | 解压归档文件 |
-t | 列出归档文件的内容 |
-f | 指定归档文件的名称,与其他选项同时使用时必须放在最后 |
-v | 显示详细处理信息 |
-C | 转到指定目录进行操作,一般用于解压文档 |
-j | 调用 bzip2 程序进行压缩或解压 |
-z | 调用 gzip 程序进行压缩或解压 |
--exclude=PATH | 排除指定目录或文件,用于打包时排除不需要的文件 |
其他重要选项
-
-r
:向现有归档文件中追加文件。 -
-u
:仅追加比归档文件中已有文件更新的文件。 -
--transform=<expression>
:重命名归档中的文件。 -
--strip-components=<number>
:解压时剥离指定数量的路径组件。
示例
-
创建归档文件:
tar -cvf archive.tar file1 file2 directory
-
解压归档文件:
tar -xvf archive.tar
-
压缩归档文件:
tar -zcvf archive.tar.gz directory
(使用 gzip 压缩)
用户组配置文件说明
/etc/passwd 文件内容
-
用户名:elf
-
UID:1000
-
密码标志:x(表示密码被加密并存储在 /etc/shadow 文件中)
-
GID:1000
-
用户说明:elf,,(通常包含用户的全名或其他描述信息,此处为空)
-
家目录:/home/elf
-
shell:/bin/bash
/etc/shadow 文件内容
-
用户名:elf
-
加密密码:$6$XqMqLXNw$89WhQcYC15HgjyU(经过加密的密码)
-
最后一次密码修改时间:19487(通常是一个时间戳)
-
密码最小修改间隔:0(表示密码可以随时更改)
-
密码最大有效期:99999(表示密码在很长时间内有效)
-
密码到期前警告天数:7(在密码到期前7天开始警告)
-
密码到期后宽限天数:无(:: 表示没有设置宽限天数)
-
账户失效时间:无(:: 表示账户不会失效)
注意事项:/etc/shadow
文件存储了用户的加密密码和其他密码相关信息,是系统中非常敏感的文件,通常只有 root 用户才有权限读取和修改。
/etc/group 文件
-
格式:
组名:密码:GID:附加用户
-
示例:
sambashare:x:126:elf
-
组名:sambashare
-
密码:x(表示加密后的密码)
-
GID:126
-
附加用户:elf
-
/etc/gshadow 文件
-
格式:
组名:密码:组管理员:附加用户
-
示例:
elf:!::
-
组名:elf
-
密码:!(表示密码被禁用或未设置)
-
组管理员:无
-
附加用户:无
-
注意:/etc/group
存储用户组的基本信息,而 /etc/gshadow
存储用户组的密码及管理员信息,用于增强安全性。
useradd
功能:用于创建新用户
基本语法:useradd [选项] 用户名
常用选项:
-
-m:若主目录不存在则自动创建用户家目录。
-
-d 目录:指定用户家目录的具体路径。
-
-u UID:手动为用户设置唯一的用户ID(UID)。
-
-g 组名:指定用户的主要组,且该组必须已存在。
-
-G 组名:指定用户的附加组,附加组必须已存在,可指定多个,用空格隔开。
-
-s:指定用户的登录Shell,如
/bin/bash
。
passwd
功能:设置或修改用户密码
基本语法:passwd [选项] 用户名
常用选项:
-
无选项:普通用户修改自己的密码,root用户可修改任意用户的密码。
-
-S:查询用户的密码状态。
-
-l:锁定用户账户。
-
-u:解锁用户账户。
-
--stdin:允许从标准输入读取密码,用于脚本自动化。
adduser
功能:在某些系统中,adduser
是useradd
的友好前端,用于添加用户
基本语法:adduser [选项] 用户名
常用选项(注意,这些选项可能因系统不同而有所差异):
-
--group 组名:在创建用户时同时创建用户组(某些系统中可能不适用)。
-
--home 目录:指定用户家目录。
-
--uid UID:指定用户ID。
-
--gid GID:指定用户的主要组ID或附加组ID(具体行为可能因系统而异)。
注意:adduser
命令在交互性更强的系统中(如Debian系)会提示设置密码等额外信息,而useradd
则更侧重于命令行操作。
符号 | 类型 |
---|---|
- | 普通文件 |
d | 目录文件 |
l | 软连接文件 |
b | 块设备文件 |
c | 字符设备文件 |
p | 管道文件 |
s | socket文件 |
Linux 文件权限详解
一、权限分类
Linux一般将文件的所属身份分为三类:
-
owner(所有者)
-
group(所属组)
-
others(其他用户)
二、权限类型
文件或目录具有的权限主要包括:
-
只读(read, r)
-
可写(write, w)
-
可执行(execute, x)
三、非目录文件权限
对于非目录文件,权限的具体含义如下:
-
r: 允许用户读取文件的实际内容。
-
w: 允许用户编辑、新增或修改文件内容。
-
x: 允许用户执行该文件(如果它是一个可执行程序)。
四、目录文件权限
对于目录文件,权限的具体含义有所不同:
-
r: 允许用户读取目录结构列表,即查看目录下的文件和子目录。
-
w: 允许用户修改目录结构列表,包括新建、删除、转移或重命名目录下的文件及子目录。
-
x: 允许用户进入该目录,使其成为当前工作目录。
五、权限查看与更改
-
查看权限:使用
ls -l
命令可以查看文件和目录的详细权限信息。 -
更改权限:使用
chmod
命令可以更改文件或目录的权限。权限可以通过符号表示法(如u+x
给文件所有者添加执行权限)或数字表示法来指定。数字表示法基于权限的位运算特性,将读、写、执行分别赋予4、2、1的数值,从而组合出不同的权限设置。
通过以上内容,我们可以清晰地了解Linux系统中文件权限的管理机制,以及如何查看和更改这些权限。
chmod 命令详解
英文全拼
change mode
功能
设置用户对于文件的权限
参数格式
chmod [参数] 目录或文件
权限类型与字符表示
类型 | Owner | Group | Others |
---|---|---|---|
权限 | 读 | 写 | 执行 |
字符 | r | w | x |
权限类型与数字表示
-
读(r):4
-
写(w):2
-
执行(x):1
组合示例:
-
7(rwx):4+2+1
-
5(r-x):4+1
用户类型符号
符号 | 含义 |
---|---|
u | 表示文件的所有者 |
g | 表示文件的所属组 |
o | 表示其他用户 |
a | 表示所有用户(all) |
操作符号
符号 | 含义 |
---|---|
+ | 增加某种权限 |
- | 减少某种权限 |
= | 赋予给定权限并取消其他所有权限 |
示例
-
chmod u+x file.txt
:为文件file.txt
的所有者增加执行权限。 -
chmod 755 directory/
:设置目录directory/
的权限为所有者(rwx),所属组(r-x),其他用户(r-x)。
使用 chmod
命令时,可以灵活组合用户类型符号、操作符号以及权限字符或数字,以实现精细的权限管理。
chgrp 与 chown 命令详解
chgrp 命令
英文全拼:change group
功能:用于设置文件或目录的所属用户组。
参数:chgrp [选项] 组名 文件或目录
常用选项:
-
-R:递归修改,即修改指定目录及其下所有文件和子目录的所属组。
示例:
chgrp -R mengxin /usr/meng/
此命令将递归地更改 /usr/meng/
目录下所有文件和子目录的所属组为 mengxin
。
chown 命令
英文全拼:change owner
功能:用于设置文件或目录的所有者和所属组。只有超级用户或文件的所有者才能使用该命令。
参数:chown [选项] [用户]:[组] 文件或目录
-
用户和组之间可以用冒号
:
分隔,也可以只指定用户(此时组不变)。
常用选项:
-
-R:递归修改,即修改指定目录及其下所有文件和子目录的所有者和组。
示例:
-
更改所有者:
shCopy Code chown -R liu /usr/meng/
此命令将递归地更改
/usr/meng/
目录下所有文件和子目录的所有者为liu
。 -
同时更改所有者和组:
shCopy Code chown -R liu:mengxin /usr/meng/
此命令将递归地更改
/usr/meng/
目录下所有文件和子目录的所有者为liu
,所属组为mengxin
。
注意事项:
-
在使用
chown
命令时,确保指定的用户和组在系统中存在(分别检查/etc/passwd
和/etc/group
文件)。 -
使用冒号
:
连接所有者和组时,避免用户名或组名中包含小数点.
,以免造成系统误判。
挂载与卸载命令详解(md格式)
mount 命令
功能:挂载文件系统到指定目录。
基本语法:mount [参数] <设备名> <挂载点>
常用参数:
-
-t
:指定文件系统类型,如ext4
、ntfs
、vfat
等。 -
-o
:指定挂载选项,如rw
(读写)、ro
(只读)、user
(允许普通用户挂载)等。 -
-l
:显示当前系统中所有已挂载的文件系统列表。 -
-v
:在挂载时显示详细信息。 -
-V
:显示mount
命令的版本信息。
常见挂载选项:
-
rw
:以读写模式挂载文件系统。 -
ro
:以只读模式挂载文件系统。 -
user
:允许普通用户挂载文件系统。 -
noexec
:禁止在文件系统中执行可执行文件。
umount 命令
功能:卸载已挂载的文件系统。
基本语法:umount [参数] <设备名/挂载点>
常用参数:
-
-a
:卸载/etc/fstab
中定义的所有文件系统。 -
-r
:懒惰卸载,标记文件系统为卸载状态,随后在文件系统不再使用时真正卸载。 -
-f
:强制卸载,即使设备正在被使用。 -
-n
:不更新/etc/mnttab
文件。 -
-v
:显示卸载过程的详细信息。 -
-V
:显示umount
命令的版本信息。
注意事项:
-
在卸载文件系统之前,确保没有进程正在使用该文件系统,否则卸载可能失败。
-
使用
lsof
或fuser
命令可以查看哪些进程在使用某个挂载点,便于及时处理。
文件系统特性详解
inode
-
定义:inode(索引节点)是文件系统中用于记录文件属性的数据结构。
-
功能:每个文件占用一个inode,描述文件的属性,如权限、所有者、大小、创建/访问/修改时间以及指向数据块(block)的指针等。
-
特性:通过inode号唯一标识文件,即使文件名改变,inode号仍保持不变。
block
-
定义:block(数据块)是文件系统中用于存储文件内容的固定大小的数据单元。
-
功能:存储文件的实际数据。若文件较大,可占用多个block。
-
特性:
-
普通文件的block存储文件数据。
-
目录文件的block存储目录项信息,包括文件的inode号、文件名、文件类型等。
-
super block
-
定义:super block(超级块)是文件系统的核心元数据结构。
-
功能:包含文件系统的关键信息,如block和inode的总量、使用量、剩余量以及文件系统状态等。
-
特性:是文件系统的“目录索引”,确保文件系统的一致性和完整性,在文件系统挂载和访问时起到关键作用。
硬连接详解
硬连接(Hard Link)是通过文件系统的inode连接来产生新文件名,而不是产生新文件。以下是硬连接的详细解释:
-
基本概念:
-
硬连接是指多个文件名指向同一个inode(索引节点)。
-
在Linux文件系统中,每个文件都会被分配一个唯一的inode编号。
-
-
结构说明:
-
目录文件inode:存储了文件或目录的元数据,包括文件名、权限、所有者等,并指向对应的inode。
-
例如,
/home/elf/work1/file1
和/home/elf/work2/file2
可能指向同一个inode。
-
-
文件inode:存储了文件的实际数据块信息。
-
目录block:指向inode的指针,用于在目录中查找文件。
-
文件block:存储文件的实际内容。
-
-
硬连接特点:
-
多个入口:一个文件可以有多个硬连接,即多个文件名指向同一个inode。
-
数据共享:所有硬连接共享同一份数据,修改任何一个硬连接的内容,其他硬连接都会看到变化。
-
防止误删:即使删除了其中一个硬连接,只要还有其他硬连接存在,文件数据就不会被删除。只有当最后一个硬连接被删除时,文件数据才会被释放。
-
-
创建与删除:
-
创建硬连接:使用
ln
命令,如ln 源文件 硬链接文件
。 -
删除硬连接:使用
rm
命令,如rm 硬链接文件
。但注意,这只会删除硬连接,不会删除文件数据。
-
-
注意事项:
-
目录不能创建硬连接,但可以创建软连接(符号链接)。
-
硬链接不能跨越文件系统。
-
符号连接/软连接详解:
-
定义:符号连接(软连接)是创建一个独立的文件,该文件的数据部分仅包含要连接的文件的路径名。
-
inode关系:
-
连接文件拥有自己的inode(如No.3)。
-
它不直接指向文件内容,而是指向目标文件的路径。
-
-
block内容:
-
连接文件block:存储了目标文件的路径,如
/home/elf/work1/file1
。 -
目录block:包含连接文件的目录信息。
-
目标文件block:存储实际文件内容。
-
连接文件命令——ln(转为md格式)
ln命令简介
英文全拼:link files
功能:ln
命令用于为某一个文件在另外一个位置建立一个同步的链接,分为硬链接和软链接(符号链接)两种。
命令格式
ln [选项] 源文件 目标文件
选项说明
选项 | 说明 |
---|---|
-s | 创建软链接(符号链接)。软链接类似于Windows的快捷方式,可以跨文件系统,删除软链接不会影响原始文件。 |
-v | 显示详细的处理过程。在执行链接操作时,会显示详细的操作信息。 |
硬链接与软链接的区别
-
硬链接:指向文件数据的指针,不是文件名。多个硬链接可以指向同一份文件数据,删除其中一个硬链接不会影响其他硬链接或原始文件。硬链接不能跨文件系统,且不能为目录创建硬链接。
-
软链接:包含了指向另一个文件的路径的独立文件。软链接可以跨文件系统,删除软链接不会影响原始文件。但如果软链接指向的文件被删除,软链接会变成一个无效链接。
使用示例
-
创建硬链接:
ln file.txt hardlink.txt
(在当前目录下为file.txt
创建一个名为hardlink.txt
的硬链接) -
创建软链接:
ln -s /home/user/documents /home/user/links/docs_link
(在/home/user/links
目录下创建一个指向/home/user/documents
目录的软链接docs_link
)
网络相关命令——ifconfig
ifconfig命令功能
显示或配置Linux系统中的网络接口参数。
ifconfig命令的基本语法
ifconfig [网络接口] [选项] 地址/参数
ifconfig命令的常用选项及说明
-
ifconfig -a
:显示所有网络接口的信息,包括未激活的接口。 -
ifconfig ens33 172.16.0.151
:为ens33网络接口设置IP地址为172.16.0.151。 -
ifconfig ens33 broadcast 172.16.0.255
:设置ens33网络接口的广播地址为172.16.0.255。 -
ifconfig ens33 netmask 255.255.255.0
:设置ens33网络接口的子网掩码为255.255.255.0。 -
ifconfig ens33 hw ether 22:22:22:22:22:22
:为ens33网络接口设置MAC地址为22:22:22:22:22:22(需先关闭接口再设置,设置后重新启用)。 -
ifconfig ens33 up
:激活ens33网络接口。 -
ifconfig ens33 down
:关闭ens33网络接口。
网络相关命令 - ping
功能
ping 命令用于检查网络的连接情况,通过发送 ICMP(Internet Control Message Protocol)回显请求和响应消息来判断目标主机是否可达,以及获取连接的丢包率和平均往返时间等状态信息。
参数
-
ping [选项] IP地址/域名
选项 说明 -c 设置完成要求回应的次数 -i 指定收发信息的间隔时间 -n 只输出数值,不显示主机名
详细说明
-
工作原理:ping 命令通过发送 ICMP Echo 请求数据包到目标主机,并等待 ICMP Echo 回复数据包来判断网络连接状态。
-
应用场景:常用于测试本地主机与远程主机之间的网络连接是否通畅,以及判断网络配置是否正确。
-
注意事项:ping 成功并不一定代表 TCP/IP 配置完全正确,还需考虑其他网络配置因素。若 ping 成功但网络仍无法使用,可能是网络系统的软件配置问题。
网络相关命令
route 命令详解
功能
-
添加、删除或查看网关参数,是网络配置中的重要工具。
参数说明
-
基础参数:
route
,用于启动该命令。
操作示例
-
添加默认网关:
bashCopy Code sudo route add default gw 192.168.0.1
此命令将默认网关设置为 192.168.0.1。
-
删除默认网关:
bashCopy Code sudo route del default gw 192.168.0.1
此命令将删除当前的默认网关设置。
nameserver 配置说明
功能概述
-
主要功能:使用域名访问 DNS 服务,需预先设置 DNS 参数。
参数设置
-
关键参数:
nameserver xx.xx.xx.xx
(请将xx.xx.xx.xx
替换为实际的 DNS 服务器 IP 地址)。
配置位置
-
存放路径:该设置需存放在系统的
/etc/resolv.conf
文件中,以确保网络域名解析正常进行。
进程相关命令ps
-
功能:显示当前操作系统中由该用户运行的进程列表。
-
常见参数:
-
-a
:显示所有与终端相关的进程。 -
-u
:查看进程所有者及其详细信息。 -
-x
:显示没有控制终端的进程。 -
-e
:显示所有进程。 -
-l
:显示详细信息,例如优先级、父进程等。
-
top 命令说明
功能
动态显示当前系统中由该用户运行的进程列表。top 命令是 Linux 系统管理员和开发人员常用的工具,用于实时监控系统的运行状态。
参数
-
无:运行
top
命令时不带任何参数,将显示默认的进程和系统信息界面。
使用说明
界面组成
-
系统信息:显示系统的一般信息,包括运行时间、活跃用户数量、负载平均值和运行中的进程数量。
-
任务摘要:显示总活动任务的摘要,包括进程数量及其状态。
-
系统进程列表:详细列出每个进程的 PID、用户、CPU 使用率、内存使用率和命令信息等。
常用选项
-
-d
:设置屏幕更新之间的时间间隔。 -
-p
:监控特定的进程 ID。 -
-n
:定义 top 退出前的迭代次数。 -
-b
:批处理模式,将输出捕获到文件中。 -
-u
:显示特定用户的进程。 -
-s
:安全模式,隐藏或掩蔽某些信息。 -
-i
:忽略空闲和僵尸进程。 -
-o
:根据特定字段(如 CPU 使用率)对进程进行排序。 -
-H
:显示单独的线程。 -
-c
:显示命令名称而不是命令行参数。
交互式命令
-
h
:显示帮助信息。 -
k
:使用 PID 杀死进程。 -
q
:退出 top 界面。 -
z
:切换颜色/单色模式。 -
r
:调整进程的优先级。 -
u
:通过特定用户过滤进程。 -
P
:按 CPU 使用率排序进程。 -
M
:按内存使用率排序进程。 -
T
:按运行时间排序进程。 -
c
:切换显示命令行。 -
1
:切换显示单个 CPU 状态。
高级选项
-
在安全模式下运行,隐藏或掩蔽某些信息。
-
使用
V
键查看进程的树状结构。 -
使用
Z
键(具体可能因 top 版本而异)进行其他高级操作。
kill 命令说明
功能: 强制终止进程
使用参数:
-
kill -signal pid
其中,signal
是要发送的信号(如9
代表强制终止),pid
是要终止的进程 ID。
示例: 如果你想要强制终止进程 ID 为 1234
的进程,可以使用以下命令:
kill -9 1234
clear 命令说明
功能:清除屏幕 参数:无
sync 命令说明
功能:将文件系统的缓冲区数据立即写入磁盘中,确保文件系统的数据与磁盘数据保持同步,防止数据丢失或损坏。
详细解释:
-
数据同步机制:在Linux系统中,为了提高性能,数据写入磁盘并不是即时完成的,而是先缓存到内存中。
sync
命令的作用就是将内存中的这些数据强制写入磁盘。 -
使用场景:在关机、重启或卸载文件系统前,建议多次执行
sync
命令,以确保数据完整性。此外,在备份数据或管理高负载服务器上的文件系统时,sync
也是不可或缺的工具。 -
基本语法:
sync [选项] [文件...]
。不带选项时,sync
会同步所有文件系统的缓存;指定文件时,仅同步该文件的缓存数据和元数据。 -
安装与环境:
sync
命令是coreutils
软件包的一部分,默认包含在几乎所有Linux发行版中。如未安装,可通过包管理器进行安装。
man 命令使用说明
功能
显示Linux系统命令、函数、配置文件、系统调用的帮助信息
语法格式
man [选项] 命令/函数
选项说明
选项 | 说明 |
---|---|
无选项(直接跟命令) | 显示该命令的详细帮助信息 |
-a | 在所有手册页中搜索关键词 |
-k | 模糊搜索相关手册(相当于搜索标题) |
-f | 快速查看该命令属于哪一类及其简要说明 |
-w | 显示手册页文件的路径但不显示其内容 |
-P [pager] | 指定用于显示手册页的分页程序 |
-s [num] | 仅在指定的手册章节内搜索 |
数字(如1, 2, 3等) | 指定章节查看,比如系统调用、库函数等 |
手册章节解释
-
1:用户命令(如ls, cp)
-
2:系统调用(如open, read)
-
3:库函数(如printf, malloc)
-
4:设备文件和驱动
-
5:配置文件格式(如/etc/passwd)
-
6:游戏和娱乐
-
7:杂项(如协议、文件格式描述)
-
8:系统管理命令(如mount, ifconfig)
-
9:内核例程,面向Linux内核开发者
快捷键
-
空格键:向下翻页
-
b:向上翻页
-
/关键字:搜索关键字
-
n:跳到下一个搜索结果
-
q:退出man页面
示例
-
查看ls的官方文档:
man ls
-
查看系统调用open:
man 2 open
-
模糊搜索包含copy的命令:
man -k copy
-
快速查看ls命令类型:
man -f ls
工作模式(转为md格式)
vim工作模式详解
三种核心工作模式
-
一般模式(Normal Mode)
-
功能:进行光标的移动、复制、粘贴、删除等基本操作。
-
进入方式:Vim启动后默认进入此模式,或在其他模式下按
Escape(Esc)
键返回。
-
-
编辑模式(Insert Mode)
-
功能:进行文本编辑,如输入、修改文本内容。
-
进入方式:在一般模式下按
i
键进入。 -
退出方式:按
Esc
键返回一般模式。
-
-
命令模式(Command Mode 或 Last Line Mode)
-
功能:执行保存文件、退出编辑器、查找、替换等高级操作。
-
进入方式:在一般模式下按
:
键进入。 -
常用命令
:
-
:w
:保存文件。 -
:q
:退出编辑器。 -
:wq
:保存并退出。 -
/pattern
:搜索指定模式。 -
:s/old/new/g
:全局替换。
-
-
模式切换总结
-
一般模式到编辑模式:按
i
键。 -
编辑模式到一般模式:按
Esc
键。 -
一般模式到命令模式:按
:
键。
流程图说明
主要模式
-
光标插入指令:
-
使用ESC键退出至
-
一般模式
-
命令模式
-
编辑模式
-
-
-
ESC键功能:
-
从任意模式退出至
-
一般模式
-
直接进入命令模式或编辑模式
-
-
Vim 编辑器快捷键
移动光标
-
k 或 ↑:将光标上移一行
-
j 或 ↓:将光标下移一行
-
h 或 ←:将光标左移一个字符
-
l 或 →:将光标右移一个字符
屏幕翻页
-
Ctrl+f 或 Page Down:向下翻页
-
Ctrl+b 或 Page Up:向上翻页
其他常用命令
-
zz:将当前行置于屏幕中央
-
zt:将当前行置于屏幕顶部
-
zb:将当前行置于屏幕底部
-
Ctrl+e:向上移动一行
-
Ctrl+y:向下移动一行
-
Ctrl+u:向文件首翻半屏
-
Ctrl+d:向文件尾翻半屏
-
gg:光标移动到文件顶部
-
G:光标移动到文件尾部
Vim常用操作--一般模式
删除文本
-
dd:删除光标所在的整行内容。若在
dd
前增加数字,如2dd
,则可以删除从光标所在行开始的两行。 -
d$:删除本行光标所在位置及以后的所有字符。
-
d^:删除本行光标之前的所有字符。
-
dw:删除从光标所在位置直到下一个单词开始的所有内容。
复制文本
-
yy:复制当前整行内容。
-
ynl:复制n个字符。
-
y^:复制当前行光标之前的内容。
-
y$:复制当前行光标之后的内容。
-
yw:复制光标所在的单词。
粘贴文本
-
p:粘贴已复制或剪切的内容。若在前面加上数字,如
3p
,则粘贴三次。
光标移动
-
h:光标左移。
-
j:光标下移。
-
k:光标上移。
-
l:光标右移。
-
w:光标移动到下一个单词的词头。
-
b:光标移动到上一个单词的词头。
-
gg:光标移动到文章开头。
-
G:光标移动到文章结尾。
-
行数+shift+g:光标移动到指定的某一行。
其他常用操作
-
u:撤销上一步操作。
-
Ctrl + r:恢复上一个被撤销的操作。
-
:w:保存文件。
-
:q:退出Vim。
-
:wq:保存并退出Vim。
-
:q!:不保存强制退出Vim。
-
:set nu:显示行号。
-
:set nonu:不显示行号。
-
/查找词+回车:进行查找,再按
n
向下遍历,N
向上遍历。
-
指令 | 作用 |
---|---|
/p1 | 查找 p1 |
:%s/p1/p2/g | 在文件中将所有的 p1 替换为 p2 |
:%s/p1/p2/gc | 在文件中将所有的 p1 替换为 p2,并在每次替换前进行确认 |
Shell脚本执行方法
执行要求
-
文件需具备可读和可执行权限
执行方式
1. 当前目录执行
./myshell.sh
2. 绝对路径下执行
/home/elf/myshell.sh
2. 绝对路径下执行
bashCopy Code /home/elf/myshell.sh
3. 使用shell应用程序执行
bashCopy Code bash myshell.sh
4. 使用source
或.
执行
-
source
是bash的内置命令
bashCopy Codesource myshell.sh # 或 . myshell.sh # 注意:.后边有空格
Shell脚本执行方式
一、在子shell中执行
-
父进程 shell:
-
当在子shell中执行脚本时,父shell的环境与子shell是隔离的。
-
变量:脚本中设置的变量在脚本执行完毕后不会保存,这些变量和环境设置在子shell中局部生效,不会影响当前(父)shell的环境。
-
-
子进程 shell:
-
子shell是由父shell派生出来的一个新的shell进程。
-
在子shell中执行的命令和脚本对父shell的状态无影响。
-
二、在当前shell进程中执行
-
父进程 shell:
-
如果直接在当前shell进程中执行脚本(例如使用
.
或source
命令),则脚本中设置的变量在脚本执行完毕后会保存下来。 -
变量:这些变量会保留在当前shell的环境中,方便与当前shell的环境进行交互,适用于修改环境变量、切换工作目录等情况。
-
-
执行方式:
-
使用
.
(点命令)或source
命令来在当前shell中执行脚本,例如:. script.sh
或source script.sh
。
-
总结:
-
子shell执行:适用于需要隔离环境的场景,变量和环境设置在子shell中局部生效。
-
当前shell执行:适用于需要保留变量和修改当前shell环境的场景。
shell变量详解
什么是shell变量
变量是编程中用于存放数据的容器。在Shell脚本中,变量同样扮演着至关重要的角色,用于存储和引用数据。Shell变量无需事先声明类型,直接赋值即可使用,这符合Shell作为弱类型语言的特性。
shell变量的命名规则
-
组成:变量名由字母、数字和下划线组成。
-
开头:自定义变量必须以字母或下划线开头,不能是数字。
-
限制:不能使用Shell中的保留关键字,如
$
、#
、?
等。
shell变量的定义与赋值
-
赋值:使用
=
号进行赋值,如变量名=变量值
。 -
引号:变量值可以加上单引号或双引号,特别是当值中包含空格或特殊字符时。
-
空格:
=
两侧不能有空白符号,如空格或tab。
shell变量的类型与操作
-
类型:虽然Shell不强制要求变量类型,但根据用途可分为字符串变量、数值变量、环境变量等。
-
操作:包括变量替换、变量修改(如搜索和替换)、获取变量长度等。
shell变量的特殊用法
-
环境变量:由操作系统提供,用于配置程序环境,如
PATH
、HOME
等。 -
位置参数:执行脚本时传递给脚本的参数,可通过
$1
、$2
等访问。 -
局部变量与全局变量:局部变量仅在函数或当前shell会话中有效,全局变量在整个脚本中有效。
示例
# 定义变量 my_var="Hello, World!" num1=5 num2=3 # 变量替换与输出 echo $my_var # 输出: Hello, World! sum=$((num1 + num2)) echo "The sum is $sum" # 输出: The sum is 8 # 环境变量 echo "Your home directory is: $HOME" echo "Current PATH is: $PATH"
shell脚本在vim写完然后用echo $变量名 查看
变量使用详解及Markdown格式示例
不同情况下的变量应用
将命令执行结果赋值给变量
-
方法一:反引号(不推荐,易混淆)
bashCopy Code `date` # 执行date命令,结果赋值给变量(示例,实际需赋值给具体变量)
示例:
current_date=
date`,然后
echo $current_date`显示当前日期。 -
方法二:$()(推荐)
bashCopy Codefile_list=$(ls -l) # 列出文件并赋值给变量 echo "$file_list" # 打印文件列表
变量中引用变量或命令
-
单引号:直接当字符串输出,不解析变量。
bashCopy Codename="John" echo 'Hello $name' # 输出:Hello $name
-
双引号:解析变量。
bashCopy Codename="John" greeting="Hello" echo "$greeting $name" # 输出:Hello John
删除变量
-
使用
unset
命令。
bashCopy Codename="John" unset name echo $name # 无输出,变量已删除
只读变量
-
使用
readonly
命令,变量不可修改或删除。
bashCopy Codename="John" readonly name unset name # 报错:bash: unset: readonly variable 'name' cannot be unset
Shell变量种类详解
本地变量
-
定义:仅在当前Shell会话中可见,对于其他的Shell和Shell执行的程序是不可见的。
-
特点:用户自定义,用于临时存储数据,脚本执行完毕后失效。
环境变量
-
定义:在操作系统中用来指定操作系统运行环境的一些参数,有些程序需要环境变量来保证其正常运行。
-
查看:可以使用
env
命令查看当前Shell环境中的所有环境变量。 -
配置文件:
-
用户级别:
~/.profile
、~/.bashrc
-
系统级别:
/etc/environment
、/etc/profile
、/etc/bash.bashrc
-
其他变量类型
-
位置变量:Shell脚本中通过位置引用的命令行参数,例如
$1
、$2
等代表第一个、第二个参数。 -
预定义特殊变量:如
$0
(脚本名)、$#
(参数个数)、$*
(所有参数)、$?
(上一条命令的退出状态)等。 -
局部变量:在函数内使用
local
声明的变量,作用域限于函数内部。
总结:Shell变量种类繁多,每种变量都有其特定的用途和作用范围。理解并掌握这些变量的使用,对于编写高效、灵活的Shell脚本至关重要。
Shell特殊变量详解
在Shell脚本编程中,特殊变量扮演着至关重要的角色。以下是Shell中常见特殊变量的详细解释,以Markdown格式呈现:
位置参数变量
-
$0:Shell脚本本身的文件名。若脚本通过相对或绝对路径执行,则显示对应路径。
-
$1, $2, ..., $n:传递给Shell脚本的第1, 第2, ..., 第n个参数。例如,
$1
代表第一个参数。
参数相关变量
-
$#:传递给Shell脚本的参数个数。
-
$:所有参数列表,作为一个整体字符串输出。例如,
"$*"
会输出"$1 $2 ... $n"
。 -
$@:所有参数列表,但每个参数被视为独立的字符串。例如,
"$@"
会输出"$1" "$2" ... "$n"
。在双引号中使用时,$*
和$@
的区别尤为明显。
进程相关变量
-
$$:当前Shell进程的PID(Process ID,进程标识符)。
-
$!:最后一个在后台运行的进程的PID。
状态变量
-
$?:最后运行的命令的退出状态。0通常表示成功,非0值表示失败或错误。
以下是一些示例,展示了如何在脚本中使用这些特殊变量:
#!/bin/bash echo "脚本名称: $0" echo "第一个参数: $1" echo "参数总数: $#" echo "所有参数(作为一个字符串): $*" echo "所有参数(每个参数独立): $@" echo "当前进程ID: $$" # 运行一个后台进程并获取其PID sleep 10 & echo "后台进程ID: $!" # 运行一个命令并检查其退出状态 ls /nonexistent echo "上条命令退出状态: $?"