Linux实用操作及命令
一、各类小技巧(快捷键)
1、强制停止(ctrl+c)
-
Linux某些程序的运行,如果想要强制停止它,可以使用快捷键ctrl + c
-
命令输入错误,也可以通过快捷键ctrl + c,退出当前输入,重新输入
2、退出或登出(ctrl+d)
-
可以通过快捷键:ctrl + d,退出账户的登录
-
或者退出某些特定程序的专属页面
-
不能用于退出vi/vim
3、历史命令搜索(history)
- 可以通过history命令,查看历史输入过的命令
- 可以通过:!命令前缀,自动执行上一次匹配前缀的命令(即!+命令前缀)
- 可以通过快捷键:ctrl + r,输入内容去匹配历史命令
- 如果搜索到的内容是你需要的,那么:
- 回车键可以直接执行
- 键盘左右键,可以得到此命令(不执行)
- 如果搜索到的内容是你需要的,那么:
4、光标移动快捷键
- ctrl + a,跳到命令开头
- ctrl + e,跳到命令结尾
- ctrl + 键盘左键,向左跳一个单词
- ctrl + 键盘右键,向右跳一个单词
5、清屏
- 通过快捷键ctrl + l,可以清空终端内容
- 或通过命令clear得到同样效果
二、软件安装相关命令
-
操作系统安装软件有许多种方式,一般分为:
- 1.1、下载安装包自行安装
- 如win系统使用exe文件、msi文件等
- 如mac系统使用dmg文件、pkg文件等
- 1.2、系统的应用商店内安装
- 如win系统有Microsoft Store商店
- 如mac系统有AppStore商店
- 1.1、下载安装包自行安装
-
Linux系统同样支持这两种方式
Linux命令行内的”应用商店”,yum命令安装软件
yum命令
- yum:是一个RPM包软件管理器,用于自动化安装配置Linux软件,并可以自动解决依赖问题。
yum命令需要root权限哦,可以su切换到root,或使用sudo提权。
yum命令需要联网
语法:yum [-y] [install | remove | search] 软件名称选项:-y,自动确认,无需手动确认安装或卸载过程install:安装remove:卸载search:搜索
- yum search wget(通过yum命令,搜索是否有wget安装包)
3. yum [-y] install wget(通过yum命令安装wget程序)
- yum [-y] remove wget(通过yum命令卸载wget命令)
三、systemctl命令
- Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启。
- 能够被systemctl管理的软件,一般也称之为:服务
语法:systemctl start | stop | status | enable | disable 服务名start 启动stop 关闭status 查看状态enable 开启开机自启disable 关闭开机自启系统内置的服务比较多,比如:NetworkManager,主网络服务network,副网络服务firewalld,防火墙服务sshd,ssh服务(FinalShell远程登录Linux使用的就是这个服务)
- 除了内置的服务以外,部分第三方软件安装后也可以以systemctl进行控制。(只要它内置有去注册为系统的服务的功能,就可以通过systemctl命令去控制它的启动或关闭等)
yum install -y ntp,安装ntp软件
可以通过ntpd服务名,配合systemctl进行控制(注意该软件是ntp,但是注册的服务名是ntpd)yum install -y httpd,安装apache服务器软件
可以通过httpd服务名,配合systemctl进行控制
部分软件安装后没有
自动集成到systemctl中,我们可以手动添加。
ntp软件的下载,查看状态,修改状态…
-
查看防火墙的状态
-
关闭防火墙
-
总结(systemctl命令的作用是):
- 可以控制软件(服务)的启动、关闭、开机自启动
- 系统内置服务均可被systemctl控制
- 第三方软件,如果自动注册了可以被systemctl控制
- 第三方软件,如果没有自动注册,可以手动注册(后续学习)
防火墙配置(firewalld)
- 防火墙配置防火墙默认将用户安装的所有软件端口默认屏蔽的,外界不可以访问
1. 查看防火墙状态命令
systemctl status firewalld
2. 启动防火墙命令
systemctl start firewalld
3. 关闭防火墙命令
- 禁用防火墙以后所有后所有端口都会放行,慎用
systemctl stop firewalld
4. 禁用防火墙命令
- 防火墙不会随着操作系统开始自动启动
systemctl disable firewalld
5. 查看防火墙开放端口命令
firewall-cmd --zone=public --list-ports
- –zone=public:指定操作针对的防火墙区域(public 为常用区域,可根据实际需求调整)。
6. 增加防火墙开放端口命令
- 增加开放端口,注意事项–permanent永久生效,不加–permanent命令的话重新进入系统配置会被还原的
firewall-cmd --zone=public --add-port=8080/tcp --permanent
- –zone=public指定了这个规则所适用的区域,默认就是public
- –add-port=8080/tcp指定了要开放的端口和协议
firewall-cmd --zone=public --add-port=10000-20000/tcp --permanent
- 开放一系列连续的端口(上面的命令是开放从 10000 到 20000 的所有 TCP 端口)
firewall-cmd --zone=public --add-port={3000/tcp,4000/tcp,5000/tcp} --permanent
- 开放多个不连续的端口(上面的命令是开放 3000、4000、5000 的 TCP 端口)
7. 重新加载防火墙命令
- 修改了防火墙的设置后必须重新加载一下防火墙命令
firewall-cmd --reload
8. 移除开放端口
firewall-cmd --remove-port=80/tcp --permanent
四、软连接
ln命令创建软连接
- 在系统中创建软链接,可以将文件、文件夹链接到其它位置。
链接只是一个指向,并不是物理移动,,类似Windows系统中的《快捷方式》
语法:ln -s 参数1 参数2
-s选项,创建软连接
参数1:被链接的文件或文件夹
参数2:要链接去的目的地
五、日期和时区
1、date命令
- 通过date命令可以在命令行中查看系统的时间
语法:date [-d] [+格式化字符串]
-d 按照给定的字符串显示日期,一般用于日期计算格式化字符串:通过特定的字符串标记,来控制显示的日期格式%Y 年%y 年份后两位数字 (00..99)%m 月份 (01..12)%d 日 (01..31)%H 小时 (00..23)%M 分钟 (00..59)%S 秒 (00..60)%s 自 1970-01-01 00:00:00 UTC 到现在的秒数
-
使用date命令本体,无选项,直接查看时间
-
格式化字符串自定义显示格式
-
- 按照2022-01-01的格式显示日期
- 按照2022-01-01的格式显示日期
-
- 按照2022-01-01 10:00:00的格式显示日期
- 按照2022-01-01 10:00:00的格式显示日期
-
-
date命令进行日期加减
- -d选项,可以按照给定的字符串显示日期,一般用于日期计算
- 其中支持的时间标记为:
- year年
- month月
- day天
- hour小时
- minute分钟
- second秒
- -d选项也可以和格式化字符串配合一起使用
2、修改时区
-
通过date查看的日期时间是不准确的,这是因为:系统默认时区非中国的东八区。
使用root权限,执行如下命令,修改时区为东八区时区
-
将系统自带的localtime文件删除,并将/usr/share/zoneinfo/Asia/Shanghai文件链接为localtime文件即可
3、ntp程序自动校准系统时间
- 我们可以通过ntp程序自动校准系统时间
- 安装ntp:yum -y install ntp
- 启动并设置开机自启:
-
systemctl start ntpd
-
systemctl enable ntpd
-
- 当ntpd启动后会定期的帮助我们
联网
校准系统的时间 - 也可以手动校准(
需root权限
):ntpdate -u ntp.aliyun.com(通过阿里云提供的服务网址配合ntpdate(安装ntp后会附带这个命令)命令自动校准)
- ntp的作用:可以自动联网同步时间,也可以通过ntpdate -u ntp.aliyun.com手动校准时间。
六、IP地址、主机名
1、IP地址
-
每一台联网的电脑都会有一个地址,用于和其它计算机进行通讯
- IP地址主要有2个版本,V4版本和V6版本(V6很少用,课程暂不涉及)
- IPv4版本的地址格式是:a.b.c.d,其中abcd表示0~255的数字,如192.168.88.101就是一个标准的IP地址
-
可以通过命令:ifconfig,查看本机的ip地址。(如无法使用ifconfig命令,可以安装:yum -y install net-tools)
-
特殊的IP
-
127.0.0.1,这个IP地址用于指代本机
-
0.0.0.0,特殊IP地址
- 可以用于指代本机
- 可以在端口绑定中用来确定绑定关系
- 在一些IP地址限制中,表示所有IP的意思,如放行规则设置为0.0.0.0,表示允许任意IP访问
-
2、主机名
- 每一台电脑除了对外联络地址(IP地址)以外,也可以有一个名字,称之为主机名
- 无论是Windows或Linux系统,都可以给系统设置主机名
Windows系统主机名:
linux查看主机名:
- 修改主机名:可以使用命令:hostnamectl set-hostname 主机名,修改主机名(需root)
3、域名解析
-
IP地址实在是难以记忆,有没有什么办法可以通过主机名或替代的字符地址去代替数字化的IP地址呢?
- 实际上,我们一直都是通过字符化的地址去访问服务器,很少指定IP地址
- 比如,我们在浏览器内打开:www.baidu.com,会打开百度的网址。其中,www.baidu.com,是百度的网址,我们称之为:
域名
- 1、先查看本机的记录(私人地址本)
- Windows看:C:\Windows\System32\drivers\etc\hosts
- Linux看:/etc/hosts
- 2、再联网去DNS服务器(如114.114.114.114,8.8.8.8等)询问
-
什么是域名解析:
- 可以通过主机名找到对应计算机的IP地址,这就是主机名映射(域名解析)
- 先通过系统本地的记录去查找,如果找不到就联网去公开DNS服务器去查找
4、配置主机名映射
- 例子:比如,我们FinalShell是通过IP地址连接到的Linux服务器,那有没有可能通过域名(主机名)连接呢?
- 我们只需要在Windows系统的:C:\Windows\System32\drivers\etc\hosts文件中配置记录即可
配置完成之后:就可以通过域名(主机名)进行连接
5、虚拟机配置固定IP(window系统)
-
当前我们虚拟机的Linux操作系统,其IP地址是通过
DHCP服务
获取的。- DHCP:动态获取IP地址,即每次重启设备后都会获取一次,可能导致IP地址频繁变更
-
为什么需要固定IP:
-
原因1:办公电脑IP地址变化无所谓,但是我们要远程连接到Linux系统,如果IP地址经常变化我们就要频繁修改适配很麻烦
-
原因2:在刚刚我们配置了虚拟机IP地址和主机名的映射,如果IP频繁更改,我们也需要频繁更新映射关系
-
-
在VMware Workstation中配置固定IP(步骤):
-
- (第一步)在VMware Workstation(或Fusion)中配置IP地址网关和网段(IP地址的范围)
- (第一步)在VMware Workstation(或Fusion)中配置IP地址网关和网段(IP地址的范围)
-
- 注意:这个子网只是一个网络IP地址范围来的,这里表示的范围是:192.168.88.0——192.168.88.254之间
- 子网掩码一定要确认是255.255.255.0
- 2. (第二步)在Linux系统中手动修改配置文件,固定IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
然后重启网关即可:
- 当bootproto属性设置为none时,Linux系统的IP地址不会自动发生变化。这意味着,你需要
手动
为系统配置IP地址等网络参数,否则系统将无法访问网络。 - 当bootproto属性被设置为其他值时(如dhcp、static等),系统会根据设置自动获取或配置网络参数。
- 当设置为dhcp时,系统会向DHCP服务器请求IP地址和其他网络参数。
- 而当设置为static时,需要手动配置IP地址、子网掩码、网关等网络参数。(将会从用户手动设置的值中获取IP地址等信息。)
6、在虚拟机创建时配置静态ip
点击《网络和主机名》:
在网络页面做下面的几件事情:
- 修改主机名为自己喜欢的主机名,不要出现中文和特殊字符,建议用localhost
- 点击应用
- 将网络连接打开
- 点击配置,设置详细网络信息
最好用一个截图软件,记住上图中的网络详细信息,接下来的配置要参考:
点击配置按钮后,我们需要把网卡地址改为静态IP,这样可以避免每次启动虚拟机IP都变化。所有配置照搬你自己截图的网络信息填写,不要照抄我的:
上图中的四个信息参考之前的以太网(ens33)网卡的截图,不要照搬我的来写。
最后,点击完成按钮:
回到配置界面后,点击开始安装:
7、在虚拟机创建后配置静态ip
未配置静态ip前:
然后根据刚刚记录的信息进行配置,netmark一般填写255.255.255.0
配置完成后的:
- 当bootproto属性设置为none时,Linux系统的IP地址不会自动发生变化。这意味着,你需要
手动
为系统配置IP地址等网络参数,否则系统将无法访问网络。 - 当bootproto属性被设置为其他值时(如dhcp、static等),系统会根据设置自动获取或配置网络参数。
- 当设置为dhcp时,系统会向DHCP服务器请求IP地址和其他网络参数。
- 而当设置为static时,需要手动配置IP地址、子网掩码、网关等网络参数。(将会从用户手动设置的值中获取IP地址等信息。)
子网掩码
子网掩码并不一定是固定的 255.255.255.0。子网掩码用于指示 IP 地址中哪些位用于网络标识,哪些位用于主机标识。它可以是各种形式的,取决于网络的规模和需要划分的子网数量。
常见的子网掩码包括:
- 255.255.255.0:用于小型局域网或家庭网络,允许划分 254 个主机地址。
- 255.255.255.128:用于划分子网时,每个子网有 126 个主机地址。
- 255.255.255.192:用于划分子网时,每个子网有 62 个主机地址。
- 255.255.255.224:用于划分子网时,每个子网有 30 个主机地址。
- 255.255.255.240:用于划分子网时,每个子网有 14 个主机地址。
- 255.255.255.248:用于划分子网时,每个子网有 6 个主机地址。
- 255.255.255.252:用于划分子网时,每个子网有 2 个主机地址。
这些子网掩码是根据需要划分的子网数量和主机数量来选择的。在实际网络中,根据网络规模和设计需求,管理员可以选择不同的子网掩码来满足需求。
7、网络传输
1、下载和网络请求
1.1、ping命令
- ping命令是用来测试网络是否联通。
- 语法
ping [-c num] 参数选项:-c,检查的次数,不使用-c选项,将无限次数持续检查
参数:ip或主机名,被检查的服务器的ip地址或主机名地址
测试是否能连接上百度:
1.2、wget命令
- wget是非交互式的文件下载器,可以在命令行内下载网络文件
- 语法:
wget [-b] url
选项:-b,可选,后台下载,会将日志写入到当前工作目录的wget-log文件
参数:url,下载链接
- 通过tail命令可以监控后台下载进度:tail -f wget-log
注意:无论下载是否完成,都会生成要下载的文件,如果下载未完成,请及时清理未完成的不可用文件。
1.3、curl命令
- curl可以发送http网络请求,可用于:下载文件、获取信息等
- 语法:
curl [-O] url
选项:-O,用于下载文件,当url是下载链接时,可以使用此选项保存文件
参数:url,要发起请求的网络地址
2、端口
- 端口,是设备与外界通讯交流的出入口。端口可以分为:物理端口和虚拟端口两类
- 物理端口:又可称之为接口,是可见的端口,如USB接口,RJ45网口,HDMI端口等
- 虚拟端口:是指计算机内部的端口,是不可见的,是用来操作系统和外部进行交互使用的
端口(虚拟)
- 计算机程序之间的通讯,通过IP只能锁定计算机,但是无法锁定具体的程序。
- 通过
端口
可以锁定计算机上具体的程序,确保程序之间进行沟通 - IP地址相当于小区地址,在小区内可以有许多住户(程序),而门牌号(端口)就是各个住户(程序)的联系地址
- 通过
- Linux系统是一个超大号小区,可以支持65535个端口,这6万多个端口分为3类进行使用:
- 公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如SSH服务的22端口,HTTPS服务的443端口。
- 非特殊需要,不要占用这个范围的端口
- 注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序\服务
- 动态端口:49152~65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用。
- 公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如SSH服务的22端口,HTTPS服务的443端口。
- 如图中,计算机A的微信连接计算机B的微信,A使用的50001即动态端口,临时找一个端口作为出口计算机B的微信使用端口5678,即注册端口,长期绑定此端口等待别人连接
1、nmap命令
- namp命令可以查看端口的占用情况。
- namp命令需要下载资源:需要安装namp。
- namp命令需要下载资源:需要安装namp。
- nmap语法:
nmap 被查看的IP地址
2、netstat命令
-
可以通过netstat命令,查看指定端口的占用情况
- 使用之前需要安装netstat:yum -y install net-tools
- 使用之前需要安装netstat:yum -y install net-tools
-
语法:
netstat -anp | grep 端口号
端口号25正在被进程1369占用。
3、进程管理
- 程序运行在操作系统中,是被操作系统所管理的。
- 为管理运行的程序,每一个程序在运行的时候,便被操作系统注册为系统中的一个:进程
- 并会为每一个进程都分配一个独有的:进程ID(进程号)
- 为管理运行的程序,每一个程序在运行的时候,便被操作系统注册为系统中的一个:进程
1、ps命令
- ps 查看进程状态,即时状态,非连续
- 常用组合命令:
# 查看tomcat进程状态。
ps -aux|grep tomcat 参数说明:-a 表示所有进程、-u 表示进程状态、-x 表示进程详细信息。# 语法:ps -ef,查看全部进程信息,可以搭配grep做过滤:
ps -ef | grep xxx-- xxx是进程的名称
-e 显示所有进程
-f 显示所有字段(UID,PPIP,C,STIME字段)
一般来说,固定用法就是: ps -ef 列出全部进程的全部信息
查看指定进程
- 可以使用管道符配合grep来进行过滤,如:
ps -ef | grep tail,即可准确的找到tail命令的信息
- 过滤不仅仅过滤名称,进程号,用户ID等等,都可以被grep过滤。
- 如:ps -ef | grep 25,过滤带有25关键字的进程信息,即把带有25关键字的进程信息输出到界面(一般指代过滤25进程号)
2、kill命令
- kill:关闭进程。
# 语法:
kill [进程号pid]# 无法关闭,则可以使用kill -9 [pid]强制关闭进程。
-9 表示强制关闭进程。(不使用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制。)
4、主机状态
1、top命令
- top命令查看CPU、内存使用情况,类似Windows的任务管理器
- 默认每5秒刷新一次;
- 语法:直接输入top即可,
按q或ctrl + c退出
top命令内容详解
- top命令内容前五行详解:
第一行:top - 09:11:19 up 3 min, 1 user, load average: 0.09, 0.33, 0.17- top是命令的名称
- 09:11:19表示当前系统的时间
- up 3 min表示系统启动了3分钟
- 1 user 表示1个用户登录
- load average: 0.09, 0.33, 0.17 表示1分钟的平均负载是0.09,5分钟的平均负载是0.33,15分钟的平均负载为0.17
第二行:Tasks: 185 total, 1 running, 184 sleeping, 0 stopped, 0 zombie- 第二行主要描述的是进程的信息
- Tasks:进程
- 185 total 表示总共185个进程
- 1 running 表示1个进程正在运行
- 184 sleeping 表示184个进程在睡眠状态
- 0 stopped 表示0个进程在停止
- 0 zombie 表示当前的僵尸进程为0个
第三行:%Cpu(s): 0.1 us, 0.2 sy, 0.0 ni, 99.2 id, 0.6 wa, 0.0 hi, 0.0 si, 0.0 st- 第三行主要描述的是cpu的使用情况
- %Cpu(s):表示cpu使用率
- 0.1 us 表示用户cpu使用率为0.1%
- 0.2 sy 表示系统cpu使用率为0.2%
- 0.0 ni 表示高优先级进程占用cpu时间百分比为0%
- 99.2 id 表示的空闲cpu率为99.2%
- 0.6 wa 表示IO等待CPU占用率为0.6%
- 0.0 hi 表示cpu硬件中断率为0%
- 0.0 si 表示cpu软件中断率为0%
- 0.0 st 表示强制等待占用cup率为0%
第四行:KiB Mem : 7992344 total, 7150060 free, 451236 used, 391048 buff/cache- 第四行描述的主要是物理内存的使用情况
- KiB Mem 表示物理内存
- 7992344 total 表示物理内存的总量为7992344
- 7150060 free 表示物理内存空闲的量为7150060
- 451236 used 表示物理内存在使用的量为451236
- 391048 buff/cache 表示buff和cache占用的物理内存的量为391048
第五行:KiB Swap: 8258556 total, 8258556 free, 0 used. 7231740 avail Mem- 第五行描述的主要是虚拟内存的使用情况
- kiB Swap 表示虚拟内存(交换空间)
- 8258556 total 表示虚拟内存的总量为8258556
- 8258556 free 表示虚拟内存空闲的量为8258556
- 0 used 表示虚拟内存在使用的量为0
- 7231740 avail Mem 表示avail和Mem占用的虚拟内存的量为7231740
- PID:进程id
- USER:进程所属用户
- PR:进程优先级,越小越高
- NI:负值表示高优先级,正表示低优先级
- VIRT:进程使用虚拟内存,单位KB
- RES:进程使用物理内存,单位KB
- SHR:进程使用共享内存,单位KB
- S:进程状态(S休眠,R运行,Z僵死状态,N负数优先级,I空闲状态)
- %CPU:进程占用CPU率
- %MEM:进程占用内存率
- TIME+:进程使用CPU时间总计,单位10毫秒
- COMMAND:进程的命令或名称或程序文件路径
top命令选项
toc命令也支持选项
top交互式选项
- 当top以交互式运行(非-b选项启动),可以用以下交互式命令进行控制
2、硬盘信息监控(df)命令
- 使用df命令,可以查看硬盘的使用情况
- 语法:df [-h]
- 选项:-h,以更加人性化的单位显示
- 选项:-h,以更加人性化的单位显示
3、硬盘信息监控(iostat)命令
- 可以使用iostat查看CPU、磁盘的相关信息
- 语法:iostat [-x] [num1] [num2]
- 选项:-x,(可选)显示更多信息
- num1:数字,刷新间隔,num2:数字,刷新几次
-
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。
- “一次传输"意思是"一次I/O请求”。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
-
使用iostat的-x选项,可以显示更多信息
rrqm/s: 每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge, 提高IO利用率, 避免重复调用);
wrqm/s: 每秒这个设备相关的写入请求有多少被Merge了。
rsec/s: 每秒读取的扇区数;sectors
wsec/: 每秒写入的扇区数。
rKB/s: 每秒发送到设备的读取请求数
wKB/s: 每秒发送到设备的写入请求数
avgrq-sz 平均请求扇区的大小
avgqu-sz 平均请求队列的长度。毫无疑问,队列长度越短越好。
await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。
svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)
%util: 磁盘利用率
4、网络状态监控(sar)命令
- 可以使用sar命令查看网络的相关统计(sar命令非常复杂,这里仅简单用于统计网络)
- 语法:sar -n DEV num1 num2
- 选项:-n,查看网络,DEV表示查看网络接口
- num1:刷新间隔(不填就查看一次结束),num2:查看次数(不填无限次数)
- 信息解读:
IFACE 本地网卡接口的名称
rxpck/s 每秒钟接受的数据包
txpck/s 每秒钟发送的数据包
rxKB/S 每秒钟接受的数据包大小,单位为KB
txKB/S 每秒钟发送的数据包大小,单位为KB
rxcmp/s 每秒钟接受的压缩数据包
txcmp/s 每秒钟发送的压缩包
rxmcst/s 每秒钟接收的多播数据包
5、环境变量
- 使用的一系列命令其实本质上就是一个个的可执行程序。
- 比如,cd命令的本体就是:/usr/bin/cd 这个程序文件。
- 疑问:为何无论当前工作目录在哪里,都能执行:/usr/bin/cd这个程序呢?
- 这就是环境变量的作用。
1、查看环境变量的命令(env)
- 环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。
- 在Linux系统中执行:env命令即可查看当前系统中记录的环境变量
- 环境变量是一种KeyValue型结构,即名称和值,如下图:
如上图:
USER:root,当前的操作用户
PWD:当前工作路径
......
等等一系列信息,用于辅助系统在运行的时候
从环境变量中获取关键信息
2、环境变量:PATH
- 在前面提出的问题中,我们说无论当前工作目录是什么,都能执行/usr/bin/cd这个程序,这个就是借助环境变量中:PATH这个项目的值来做到的。
- PATH记录了系统执行任何命令的搜索路径,如上图记录了(路径之间以:隔开):
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin
- 当执行任何命令,都会按照顺序,从上述路径中搜索要执行的程序的本体比如执行cd命令,就从第3个目录/usr/bin中搜索到了cd命令,并执行。
3、$符号
- 在Linux系统中,$符号被用于取”变量”的值。环境变量记录的信息,除了给操作系统自己使用外,如果我们想要取用,也可以使用。
- 取得环境变量的值就可以通过语法:$环境变量名 来取得
- 比如: echo $PATH。就可以取得PATH这个环境变量的值,并通过echo语句输出出来。
- 或者是:echo ${PATH}CCC
- 当和其它内容混合在一起的时候,可以通过{}来标注取的变量是谁
- 比如: echo $PATH。就可以取得PATH这个环境变量的值,并通过echo语句输出出来。
- 取得环境变量的值就可以通过语法:$环境变量名 来取得
4、自行设置环境变量
- Linux环境变量可以用户自行设置,其中分为:
- 临时设置,语法:export 变量名=变量值
- 永久生效
- 针对当前用户生效,配置在当前用户的: ~/.bashrc文件中
- 针对所有用户生效,配置在系统的: /etc/profile文件中
- 并通过语法:source 配置文件(source 文件路径),进行立刻生效,或重新登录FinalShell生效
5、自定义环境变量PATH
-
环境变量PATH这个变量里面记录了系统执行命令的搜索路径。
- 自己写了一个程序,把自己程序所在的文件目录加入到搜索目录去,那么无论在任何地方都可以去执行我们自己所编写的程序。
- 这些自己编写的程序的目录都可以自行添加到PATH中去
- 自己写了一个程序,把自己程序所在的文件目录加入到搜索目录去,那么无论在任何地方都可以去执行我们自己所编写的程序。
-
测试:
- 在当前HOME目录内创建文件夹,myenv,在文件夹内创建文件mkhaha
- 通过vim编辑器,在mkhaha文件内填入:echo 哈哈哈哈哈
- 完成上述操作后,随意切换工作目录,执行mkhaha命令尝试一下,会发现无法执行
- 解决:修改PATH的值
- 临时修改PATH:export PATH=$PATH:/home/dadao/myenv,再次执行mkhaha,无论在哪里都能执行了
- 或将export PATH=$PATH:/home/itheima/myenv,填入用户环境变量文件或系统环境变量文件中去
- 解决:修改PATH的值
6、上传、下载
- 为了方便,我们一般会使用finalShell、MobaXterm等客户端工具和虚拟机进行数据交互。
- 比如把要上传到虚拟机的文件直接拉取到linux系统里面的某个目录下。
1、rz、sz命令
- 除了通过FinalShell的下方窗体(或者其他客户端软件进行远程连接虚拟机)进行文件的传输以外,也可以通过rz、sz命令进行文件传输。
- rz、sz命令需要
安装
,可以通过:yum -y install lrzsz,即可安装。- rz命令,进行上传,语法:直接输入rz即可
- sz命令进行下载,语法:sz 要下载的文件(sz test.txt)
- 文件会自动下载到windows桌面的fsdownload文件夹中
注意,rz、sz命令需要终端软件支持才可正常运行
FinalShell、SecureCRT、XShell等常用终端软件均支持此操作
- 这是因为rz、sz命令需要终端的支持(即rz命令是在客户端里面执行的),比如终端就是你用来连接远程服务器的客户端,像是 XShell、rxvt、putty、SecureCRT。
- MobaXterm不支持rz、sz命令。
7、压缩、解压
压缩格式
- 市面上有非常多的压缩格式
- zip格式:Linux、Windows、MacOS,常用
- 7zip:Windows系统常用
- rar:Windows系统常用
- tar:Linux、MacOS常用
- gzip:Linux、MacOS常用
- 在Windows系统中常用的软件如:winrar、bandizip等软件,都支持各类常见的压缩格式。
- 如何在Linux系统中操作:tar、gzip、zip这三种压缩格式,完成文件的压缩、解压操作。
7.1、tar命令
-
Linux和Mac系统常用有2种压缩格式,后缀名分别是:
- .tar,称之为tarball,归档文件,即简单的将文件组装到一个.tar的文件内,并没有太多文件体积的减少,仅仅是简单的封装
- .gz,也常见为.tar.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积
针对这两种格式,使用tar命令均可以进行压缩和解压缩的操作
-
语法:
tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数N-c,创建压缩文件,用于压缩模式
-v,显示压缩、解压过程,用于查看进度
-x,解压模式
-z,gzip模式,不使用-z就是普通的tarball格式
-C,选择解压的目的地,用于解压模式
-f,要创建的文件,或要解压的文件,-f选项必须在所有选项中位置处于最后一个
参数1~N,指定要压缩哪个文件,可以指定多个文件,用空格隔开
tar压缩
- tar的常用压缩组合为:
# 将1.txt 2.txt 3.txt 压缩到test.tar文件内
tar -cvf test.tar 1.txt 2.txt 3.txt# 将1.txt 2.txt 3.txt 压缩到test.tar.gz文件内,使用gzip模式
tar -zcvf test.tar.gz 1.txt 2.txt 3.txt
- 注意:
- -z选项如果使用的话,一般处于选项位第一个
- -f选项,
必须在选项位最后一个
tar解压
- 常用的tar解压组合有
# 解压test.tar,将文件解压至当前目录(不指定目录)
tar -xvf test.tar# 解压test.tar,将文件解压至指定目录(/home/dadao)
tar -xvf test.tar -C /home/dadao# 以Gzip模式解压test.tar.gz,将文件解压至指定目录(/home/dadao)
tar -zxvf test.tar.gz -C /home/dadao
- 注意:
- -f选项,
必须在选项组合体的最后一位
- -z选项,建议在开头位置
- -C选项单独使用,和解压所需的其它参数分开
- -f选项,
zip命令压缩文件
- 可以使用zip命令,压缩文件为zip压缩包
- 语法:
zip [-r] 参数1 参数2 ... 参数N-r,被压缩的包含文件夹的时候,需要使用-r选项,和rm、cp等命令的-r效果一致
- 示例:
# 将a.txt b.txt c.txt 压缩到test.zip文件内
zip test.zip a.txt b.txt c.txt# 将test、knife两个文件夹和a.txt文件,压缩到test.zip文件内
zip -r test.zip test knife a.txt
unzip命令解压文件
- 使用unzip命令,可以方便的解压zip压缩包
- 语法:
unzip [-d] 参数-d,指定要解压去的位置,同tar的-C选项参数,被解压的zip压缩包文件
示例:
# 将test.zip解压到当前目录
unzip test.zip# 将test.zip解压到指定文件夹内(/home/dadao)
unzip test.zip -d /home/dadao
相关文章:
Linux实用操作及命令
一、各类小技巧(快捷键) 1、强制停止(ctrlc) Linux某些程序的运行,如果想要强制停止它,可以使用快捷键ctrl c 命令输入错误,也可以通过快捷键ctrl c,退出当前输入,重…...
洛谷 P10516 数据结构 Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an) 和 b ( b 1 , b 2 , ⋯ , b n ) b(b_1,b_2,\cdots,b_n) b(b1,b2,⋯,bn),有 m m m 个操作分三种: add ( l , r , k , t ) \operatorname{ad…...
在IDEA中使用TortoiseSVN
一、前言 原版SVN由于下载路径中没有svn.exe文件,导致IDEA中无法使用命令行提交项目代码,因此,现在卸载旧版本TortoiseSVN,下载附有svn.exe的新版TortoiseSVN,下载使用过程记录如下 二、下载过程 卸载就在 控制面板…...
基于 ffmpeg 实现合并视频
ffmpeg是一个强大的多媒体处理工具,支持视频文件的合并。 列出目录下所有MP4文件 import os import glob# 当前目录 directory os.getcwd() directory "/directory/to/mp4/*"# 列出目录下所有MP4文件 files glob.glob(directory)# 排序 files.sort(…...
如何在 HTML 中嵌入外部字体,有哪些注意事项?
大白话如何在 HTML 中嵌入外部字体,有哪些注意事项? 在 HTML 里嵌入外部字体,能让网页文字更有个性,瞬间提升页面的吸引力。下面就来详细说说怎么嵌入外部字体,以及其中的注意事项。 嵌入外部字体的方法 1. 使用 fo…...
三极管原理及应用
一、结构 基极(Base,符号:B) 基极是三极管的控制端,用于输入控制信号。通过基极电流的大小,可以控制集电极与发射极之间的电流导通程度,实现电流放大或开关功能。 发射极(Emitter&…...
三个串口同时打开并指定数据包控制指令思想
可以对嵌入式串口数据包指令设置做一次总结: 首先确定你的数据包大小,传统的接收串口数据到数组存储会出现需要循环遍历数组去读取数据的弊端,所以我设计了一个机制,只有当你想要读取外界指令时,才开始读取外界发过来…...
“征服HTML引号恶魔:“完全解析手册”!!!(quot;表示双引号)
🚨📢 "征服HTML引号恶魔:“完全解析手册” 📢🚨 🎯 博客引言:当引号变成"恶魔" 😱 是否遇到过这种情况: 写HTML时满心欢喜输入<div title"他…...
MQL5教程 04 脚本开发实战、指标开发基础
文章目录 一、脚本开发实战1、给脚本设置快捷键2、运行时显示输入参数界面3、开市价单4、一键平仓5、修改止盈止损6、一键删除当前图表所有挂单 二、指标开发基础 一、脚本开发实战 1、给脚本设置快捷键 在MT5导航栏中,选定脚本,鼠标右击 → 设置热键 …...
【Qt】Ubuntu22.04使用命令安装Qt5和Qt6
1、安装Qt5 注意:Ubuntu22.04已经没有 qt5-default ,因此不能一键安装啦 1)安装核心组件 sudo apt install qtbase5-dev qtchooser qt5-qmake qtcreator2)安装QtCreator sudo apt install qtcreator3)安装工具包、Qt Quick 开发的核心库(qtdeclarative5-dev) sudo a…...
海康设备http监听接收报警事件数据
http监听接收报警事件数据 海康获取设备报警事件数据两种方式: 1、sdk 布防监听报警事件数据(前面文章有示例) 2、http监听接收报警事件数据 http监听接收报警事件数据,服务端可以使用netty通过端口来监听获取事件数据。 WEB 端…...
【MVCC快照如何实现】
MVCC(多版本并发控制)快照的实现原理 MVCC(Multi-Version Concurrency Control)是现代数据库实现事务隔离级别的核心技术,它通过数据多版本和快照机制来实现高效的并发控制。下面我将详细解析MVCC快照的实现机制。 一、MVCC核心组件 1. 版本链结构 MVCC通过以下…...
STM32中不同FLASH的芯片启动文件选择规则
F103ZET6的FLASH大小是512K,所以选择startup_stm32f10x_hd.s F103C8T6的FLASH大小是64K,所以选择startup_stm32f10x_md.s 移植需要注意的事项: 从ZET6到C8T6,需要更改 1)启动文件 2)C/C选项卡...
树莓集团商业模式解析:树莓集团是国企吗?
树莓集团作为中国市场的重要企业实体,其所有制性质一直受到业界关注。从公开资料显示,树莓集团并非传统意义上的国有企业,而是一家具有混合所有制特征的现代化企业集团。其股权结构中既包含国有资本成分,也吸纳了社会资本和民营投…...
mock.js模拟数据
MOCK模拟后端数据 1.按照mock.js npm install mockjs2.在src目录下建立mock目录,在该目录下建立index.js文件,该文件中写上你所需要的数据,示例如下: import Mock from mockjs let data Mock.mock("/data/person",&…...
如何自动规整化(格式化)HTML
如果你想要自动规整化(格式化)HTML,可以使用以下方法: 方法 1:使用 VS Code 进行 HTML 格式化(推荐) 步骤 安装 Visual Studio Code打开你的 HTML 文件按下 Shift Alt F(Windows…...
MySQL数据库入门
目录 前言 一、安装软件 二、普通指令使用 三、MySQL接口API相关函数 1、API函数使用步骤 2、mysql_init-MYSQL对象初始化 3、mysql_real_connect()——数据库引擎建立连接 4、mysql_close()——关闭数据库连接 5、mysql_query()——查询数据库某表内容 6、mysql_stor…...
SpringBoot集成Couchbase开发与实践
1 前言 1.1 什么是Couchbase Couchbase 是一个高性能的 NoSQL 数据库,支持文档存储、内存缓存和分布式计算。它结合了内存数据库的速度和灵活性与传统数据库的持久性和查询能力。 1.2 Couchbase的特点与优势 高性能:利用内存缓存加速数据访问。可扩展性:支持水平扩展,能…...
一周掌握Flutter开发--8. 调试与性能优化(上)
文章目录 8. 调试与性能优化核心技能8.1 使用 Flutter DevTools 分析性能8.2 检查 Widget 重绘(debugPaintSizeEnabled)8.3 解决 ListView 卡顿(ListView.builder itemExtent) 其他性能优化技巧8.4 减少 build 方法的调用8.5 使用…...
动态路由机制MoE专家库架构在多医疗AI专家协同会诊中的应用探析
随着医疗人工智能技术的飞速进步,AI在医学领域的应用日益增多,尤其是在复杂疾病的诊断和治疗中,AI技术的应用带来了巨大的潜力。特别是动态路由机制混合专家(Mixture of Experts,MoE)架构,因其灵活、高效的特点,正逐渐成为实现多AI专家协同会诊的关键技术。通过将多个不…...
Linux上位机开发实践(开源框架和开源算法)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 做嵌入式软件开发,如果软件本身比较简单,只是图形界面显示,那么相关的开发工作并不难。最主要的内容也就是数据…...
算法时间复杂度分析
1. 基本概念 大 O 符号 O(f(n)) 表示算法的最坏情况复杂度,即算法在最不利情况下所需的基本操作数不会超过 O(f(n))的级别。例如,表示当输入规模 n 增大时,算法运行时间上界是某个常数乘以 。 Ω 符号 Ω(f(n)) 表示算法的下界,即…...
数据库基础知识点(系列五)
创建表,设置约束,修改表,删除表,表中数据的操作(insert,修改,删除) 1.在第5章习题创建的 “仓库库存”数据库中完成下列操作。 (1)创建“商品”表,表结构如表6-4: 表6-4 “goods”…...
C++中使用ShellExecute函数调用其他窗口程序时,参数设置为隐藏,后续能通过发消息给这个被调用程序显示,能显示出来窗口吗
文章目录 一、可行性分析二、实现步骤1. 启动程序并隐藏窗口2. 获取目标窗口句柄3. 发送消息显示窗口方法1:发送WM_SHOWWINDOW方法2:发送WM_SYSCOMMAND恢复窗口方法3:直接调用ShowWindow(推荐) 三、代码示例四、关键注…...
使用 AI 生成 页面
当前使用的是 火山引擎 提供的 deepseek-v3-241226 思考 如何让AI可以按自己的想法一步步生成页面? 我们要把要生成的内容分段的给到它,让它按步聚完成。 如生成一个列表页 依据所定义的接口。生成API依赖定义接口 生成 状态管理模块依赖上状态管理…...
【人工智能】机器学习中的评价指标
机器学习中的评价指标 在机器学习中,评估指标(Evaluation Metrics)是衡量模型性能的工具。选择合适的评估指标能够帮助我们更好地理解模型的效果以及它在实际应用中的表现。 一般来说,评估指标主要分为三大类:分类、…...
shell脚本运行方式 bash 和./区别
在 Linux 或 macOS 这类基于 Unix 的系统里,使用 ./ 运行脚本和使用 bash 运行脚本存在一些差异,下面为你详细说明: 1. 语法与使用方式 使用 ./ 运行脚本: 若要使用 ./ 来运行脚本,需要确保脚本文件具备可执行权限&a…...
ShardingSphere+达梦数据库分表操作
背景 随着数字经济时代的全面到来,数据量呈现爆炸式增长,传统单机数据库在性能、扩展性和可用性方面面临严峻挑战。分布式数据库技术应运而生,成为解决海量数据存储与处理的关键方案。在这一背景下,Apache ShardingSphere作为一款…...
WordPress上传图片时显示“未提供数据”错误
在WordPress中上传图片时显示“未提供数据”的错误,通常是由多种原因引起的,以下是一些常见的问题及其解决方法: 1. 文件权限问题 WordPress需要正确的文件和目录权限才能正常上传图片。如果权限设置不正确,可能会导致无法上传图…...
AP CSA FRQ Q2 Past Paper 五年真题汇总 2023-2019
Author(wechat): bigshuang2020 ap csa tutor, providing 1-on-1 tutoring. 国际教育计算机老师, 擅长答疑讲解,带学生实践学习。 热爱创作,作品:ap csa原创双语教案,真题梳理汇总, AP CSA FRQ专题冲刺, AP CSA MCQ小题…...
海量数据场景题--查找两个大文件的URL
查找两个大文件共同的URL 给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,找出 a、b 两个文件共同的 URL。内存限制是 4G。 操作逻辑: 使用哈希函数 hash(URL) % 1000 将每个URL映射到0-999的编号 文件A切割为a0, a1…...
Spring AI Alibaba 工具(Function Calling)使用
一、工具(Function Calling)简介 Spring AI Alibaba工具(Function Calling):https://java2ai.com/docs/1.0.0-M6.1/tutorials/function-calling/ 1、工具(Function Calling) “工具(Tool)”或“功能调用(Function Calling…...
汽车方向盘开关功能测试的技术解析
随着汽车智能化与电动化的发展,方向盘开关的功能日益复杂化,从传统的灯光、雨刷控制到智能语音、自动驾驶辅助等功能的集成,对开关的可靠性、耐久性及安全性提出了更高要求。本文结合北京沃华慧通测控技术有限公司(以下简称“慧通…...
9-100V输入替代CYT5030/LM5030高压双路电流模式PWM控制器
产品描述: PC3530高压 PWM 控制器包含实现推挽和桥式拓扑所需的所有功能,采用电流模式控制,提供两个交替栅极驱动器输出。PC3530内置高压启动稳压器,可在 9V~100V 的宽输入电压范围内工作。芯片内部还集成有误差放大器、精密基准、两级过流保…...
详细讲解c++中线程类thread的实现,stl源码讲解之thread
Thread 本节我们来详细介绍一下c中的线程类thread,在讲解的过程中会用到大量模板的知识,可以去看c详解模板泛型编程,详解类模板的实现为什么不能放在cpp文件_泛型函数 cpo-CSDN博客 源码: template <class _Fn, class... _Args, enable_…...
PostgreSQL详解
第一章:环境部署与基础操作 1.1 多平台安装详解 Windows环境 图形化安装 下载EnterpriseDB安装包(含pgAdmin) 关键配置项说明: # postgresql.conf优化项 max_connections 200 shared_buffers 4GB work_mem 32MB 服务管理命…...
系统思考—第五项修炼
感谢【汇丰】邀请,为其高阶管理者交付系统思考系列项目。这不仅是一次知识的传递,更是一次认知的升级。 系统思考,作为《第五项修炼》的核心能力,正在帮助越来越多的管理者突破碎片化决策的困局,建立看见全貌的智慧与…...
如何使用QuickAPI生成带参数的数据API(基于原生SQL)
目录 一、示例表结构 二、准备工作 三、创建带参数的数据API 步骤 1:登录 QuickAPI 平台 步骤 2:连接数据库 步骤 3:配置基础信息 步骤 4:编写 SQL 并添加参数 步骤 5:测试并发布API 步骤 6:验证A…...
RHINO 转 STL,解锁 3D 打印与工业应用新通道
一、RHINO 格式介绍 RHINO 是一款功能强大的三维建模软件,其对应的文件格式(.3dm)能够精确地存储复杂的三维模型数据。它支持多种几何类型,包括 NURBS(非均匀有理 B 样条曲线)、多边形网格等。这种格式的优…...
PySide6属性选择器设置样式避坑
总所周知,Qt中qss语法支持属性选择器,通过setProperty设置key和value,支持在多种样式之前切换。今天使用了一下PySide6的属性选择器,发现了一个问题。完整代码见最后。 首先,先写一段qss样式,用来设置按键样…...
BKA-CNN-BiLSTM、CNN-BiLSTM、BiLSTM、CNN四模型多变量时序光伏功率预测,附模型报告
BKA-CNN-BiLSTM、CNN-BiLSTM、BiLSTM、CNN四模型多变量时序光伏功率预测,附模型报告 目录 BKA-CNN-BiLSTM、CNN-BiLSTM、BiLSTM、CNN四模型多变量时序光伏功率预测,附模型报告预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-BiLSTM、CNN-…...
ADS 学习和培训资源 - Keysight ADS
在 Signal Edge Solutions,我们是 Keysight ADS 的忠实用户,因此我们明白,使用和学习这款强大的仿真工具有时可能非常困难。 因此,我们编制了一份清单,列出了一些我们最喜欢的 ADS 学习和培训资源,以帮助您…...
【leetcode刷题记录】(java)数组 链表 哈希表
文章目录 四、题目之:代码随想录(1) 代码随想录:数组[704. 二分查找](https://leetcode.cn/problems/binary-search/)[27. 移除元素](https://leetcode.cn/problems/remove-element/)暴力解:双指针: [977. 有序数组的平方](https://leetcode.…...
ngx_http_core_root
定义在 src\http\ngx_http_core_module.c static char * ngx_http_core_root(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {ngx_http_core_loc_conf_t *clcf conf;ngx_str_t *value;ngx_int_t alias;ngx_uint_t …...
大模型在支气管肺癌预测及临床决策中的应用研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 二、大模型预测支气管肺癌的原理与技术基础 2.1 大模型简介 2.2 数据收集与预处理 2.3 模型训练与优化 三、术前预测 3.1 病情评估 3.1.1 肿瘤大小、位置及分期预测 3.1.2 转移风险预测 3.2 手术风险预测 3.2.1 患…...
机器人原点丢失后找回原点的解决方案与步骤
机器人原点丢失后找回原点的解决方案与步骤 在机器人运行过程中,原点丢失可能导致定位错误、运动失控等问题,常见于机械臂、AGV(自动导引车)、3D打印机等设备。以下是针对原点丢失问题的系统性解决方案及详细步骤,涵盖…...
CSS SEO、网页布局、媒体查询
目录 一、SEO 头部三大标签 1. Title 标签(标题) 核心作用 优化规范 示例 2. Meta Description(描述) 核心作用 优化规范 示例 3. Viewport 标签(视口) 核心作用 优化规范 4. 完整 SEO 头部模…...
SolidJS 深度解析:高性能响应式前端框架
SolidJS 是一个新兴的响应式前端框架,以其极致的性能、简洁的语法和接近原生 JavaScript 的开发体验而闻名。它结合了 React 的声明式 UI 和 Svelte 的编译时优化,同时采用细粒度响应式更新,避免了虚拟 DOM(Virtual DOM࿰…...
基于Spring Boot + Vue的银行管理系统设计与实现
基于Spring Boot Vue的银行管理系统设计与实现 一、引言 随着金融数字化进程加速,传统银行业务向线上化转型成为必然趋势。本文设计并实现了一套基于Spring Boot Vue的银行管理系统,通过模块化架构满足用户、银行职员、管理员三类角色的核心业务需求…...
解决 Ubuntu/Debian 中 `apt-get` 报错 “无法获得锁 /var/lib/dpkg/lock“
问题描述 在 Ubuntu/Debian 系统中运行 sudo apt-get install 或 sudo apt update 时,遇到以下错误: E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它&#…...