avatar


4.Ubuntu

  • 《Linux操作系统使用入门》的前三章,都是基于CentOS,其实还有一个应用广泛的发行版:Ubuntu。
  • 《Linux操作系统使用入门》上再新增一篇文章《4.Ubuntu》
    • 主要记录操作上的差异。
    • 不存在差异的部分,本文都不会提及。
  • 其实总结下来,就三个区别:
    • 部分CentOS上预装的命令,在Ubuntu没有,需要额外安装。
    • 安装软件的方式不一样。
    • 主要区别就上述两个,第三个区别是部分命令(useradd)的使用方式不同。

官网

Ubuntu的官网:https://ubuntu.com

如果我们通过百度搜索"乌班图"(Ubuntu的中文名),排在第一的网站可能是这个https://www.ubuntu.org.cn。需要注意,这个网站不是Ubuntu的官网,通过这个网站下载的至少不是最新的。

Ubuntu的官网

我通过https://www.whois.com查询了假Ubuntu网站ubuntu.org.cn的whois信息,发现是在个人名下的:

假Ubuntu

SSH

安装

Ubuntu默认没有SSH服务,所以也不支持SSH连接。
需要额外安装,安装命令如下:

1
apt install openssh-server

安装完成之后,会自动启动,我们可以通过ps -ef命令检查一下,如果没有启动,我们可以手动启动,示例代码:

1
systemctl start sshd

root

我们无法用root通过SSH登录,并且su root的时候,有如下的提示:

1
su: Authentication failure

原因:root用户默认是被禁止通过SSH登录,解决方法为修改/etc/ssh/sshd_config,找到

1
2
3
4
5
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

PermitRootLogin prohibit-password下面新增一行PermitRootLogin yes,值改为yes

最后,重启SSH服务。

1
systemctl  restart sshd

VIM

Ubuntu默认没有vim,示例代码:

1
vim

运行结果:

1
2
3
4
5
6
7
Command 'vim' not found, but can be installed with:
sudo apt install vim # version 2:8.2.3995-1ubuntu2.3, or
sudo apt install vim-tiny # version 2:8.2.3995-1ubuntu2.3
sudo apt install vim-athena # version 2:8.2.3995-1ubuntu2.3
sudo apt install vim-gtk3 # version 2:8.2.3995-1ubuntu2.3
sudo apt install vim-nox # version 2:8.2.3995-1ubuntu2.3
sudo apt install neovim # version 0.6.1-3

我们可以按照提示,执行sudo apt install vim,安装vim

文件目录:ll

在CentOS和Ubuntu,ll都是一个别名。

  • 在CentOS,type ll,内容是ll is aliased to `ls -l --color=auto'
  • 在Ubuntu,type ll,内容是ll is aliased to `ls -alF'
    • -F:在列出的文件名称后加一符号;例如可执行档则加*, 目录则加/

没加-F,示例代码:

1
ls

运行结果:

1
Desktop  Documents  Downloads  Music  Pictures  Public  snap  Templates  Videos

加了-F,示例代码:

1
ls -F

运行结果:

1
Desktop/  Documents/  Downloads/  Music/  Pictures/  Public/  snap/  Templates/  Videos/

时间日期:cal

Ubuntu默认没有cal,示例代码:

1
cal

运行结果:

1
2
Command 'cal' not found, but can be installed with:
sudo apt install ncal

我们可以按照提示,执行sudo apt install ncal,安装cal

用户管理

root密码

Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码。

我们可以输入命令sudo passwd,然后输入当前用户的密码。此时会提示输入新的密码并确认,这个新密码就是root密码,即修改成功,以后root用户都会是这个密码。

root密码

创建用户

指定参数

在CentOS,我们可以通过useradd 【用户名】的形式创建用户,默认会在home目录下创建一个和用户名相同的目录。

在Ubunbu中,创建用户的方式为

1
useradd -m -s  /bin/bash 【用户名】

解释说明:

  • -m:创建用户登录目录
  • -s:指定用户登入后所使用的shell

没有指定参数

如果没有上述参数,那么不会使用/bin/bash,不会创建用户目录,更不会在用户目录下创建.bashrc等文件。
我们需要手动添加。

不会自动创建用户目录

在CentOS中,创建用户会自动创建用户目录,示例代码:

1
2
useradd uu2023
ll /home/

运行结果:

1
2
3
4
total 28
drwx------. 18 kaka kaka 4096 Feb 5 01:22 kaka
drwx------. 2 root root 16384 Jul 25 2022 lost+found
drwx------. 2 uu2023 uu2023 4096 Feb 5 11:07 uu2023

但是在Ubuntu,不会。
示例代码:

1
2
useradd u1
ll /home/

运行结果:

1
2
3
4
total 12
drwxr-xr-x 3 root root 4096 2月 5 02:29 ./
drwxr-xr-x 20 root root 4096 2月 5 02:28 ../
drwxr-x--- 17 kaka kaka 4096 2月 5 10:56 kaka/

如果这时候,我们登录u1用户,会有如下的提示:

1
Could not chdir to home directory /home/u1: No such file or directory

修改为/bin/bash

我们登录新建的用户u1,会发现只有一个美元符号:

bash

虽然我们输入bash后,就是常见的形式。

输入后

但是每次输入bash太麻烦。

解决办法是修改/etc/passwd,找到该用户(u1)
u1:x:1001:1001::/home/u1:/bin/sh结尾的/bin/sh改成/bin/bash

.bashrc等文件

这时候,我们输入ll,会发现居然有如下的提示:

1
ll: command not found

原因是在新用户u1的home目录下,缺少.bashrc等文件。

我们可以把.bashrc.profile这两个文件,从其他用户的home目录下拷贝过去,并通过chown命令修改所有者。

建议

建议!指定参数!

定时任务:编辑器

我们运行crontab -e,会有如下的提示:

1
2
3
4
5
6
7
8
9
no crontab for kaka - using an empty one

Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed

Choose 1-4 [1]:

因为我们没有指定编辑,这里推荐选择2. /usr/bin/vim.basic作为编辑器,这个编辑器我们更熟悉。

如果之后想换编辑器,只需要在任意目录下执行select-editor,即可重新选择编辑器。

或者,我们可以修改/etc/profile文件,添加export EDITOR=vim,也可以指定编辑器。通过这种方式指定的编辑器,会覆盖通过select-editor指定的。

网络

和网络相关的命令,我们讨论了:ifconfigpingtelnet以及curl。其中ifconfigcurl,需要额外安装。

ifconfig

示例代码:

1
ifconfig

运行结果:

1
2
Command 'ifconfig' not found, but can be installed with:
sudo apt install net-tools

如运行结果所示,执行命令sudo apt install net-tools,进行安装。

curl

示例代码:

1
curl kakawanyifan.com

运行结果:

1
2
3
4
Command 'curl' not found, but can be installed with:
sudo snap install curl # version 7.87.0, or
sudo apt install curl # version 7.81.0-1ubuntu1.7
See 'snap info curl' for additional versions.

如运行结果所示,执行命令sudo apt install curl,进行安装。

服务管理

在CentOS中,服务管理有两个命令,一个是systemctl,还有一个是在CentOS-6中service,两个命令返回内容也略有不同。
在Ubuntu中,这两个命令都可以用,而且返回的内容是一样的。

示例代码:

1
systemctl status sshd

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2023-02-05 10:08:42 CST; 2h 12min ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 8379 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 8380 (sshd)
Tasks: 1 (limit: 2279)
Memory: 29.4M
CPU: 1.021s
CGroup: /system.slice/ssh.service
└─8380 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

2月 05 11:35:49 kaka-Parallels-Virtual-Platform sshd[84325]: Accepted password for u2 from 10.211.55.2 port 59499 ssh2
2月 05 11:35:49 kaka-Parallels-Virtual-Platform sshd[84325]: pam_unix(sshd:session): session opened for user u2(uid=999) by (uid=0)
2月 05 11:41:08 kaka-Parallels-Virtual-Platform sshd[99575]: Accepted password for u3 from 10.211.55.2 port 59900 ssh2
2月 05 11:41:08 kaka-Parallels-Virtual-Platform sshd[99575]: pam_unix(sshd:session): session opened for user u3(uid=1002) by (uid=0)
2月 05 11:45:57 kaka-Parallels-Virtual-Platform sshd[120408]: Accepted password for u33 from 10.211.55.2 port 60182 ssh2
2月 05 11:45:57 kaka-Parallels-Virtual-Platform sshd[120408]: pam_unix(sshd:session): session opened for user u33(uid=1003) by (uid=0)
2月 05 12:06:11 kaka-Parallels-Virtual-Platform sshd[181223]: Accepted password for root from 10.211.55.2 port 61588 ssh2
2月 05 12:06:11 kaka-Parallels-Virtual-Platform sshd[181223]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
2月 05 12:07:35 kaka-Parallels-Virtual-Platform sshd[185358]: Accepted password for kaka from 10.211.55.2 port 61673 ssh2
2月 05 12:07:35 kaka-Parallels-Virtual-Platform sshd[185358]: pam_unix(sshd:session): session opened for user kaka(uid=1000) by (uid=0)

示例代码:

1
service sshd status

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2023-02-05 10:08:42 CST; 2h 12min ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 8379 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 8380 (sshd)
Tasks: 1 (limit: 2279)
Memory: 29.4M
CPU: 1.021s
CGroup: /system.slice/ssh.service
└─8380 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

2月 05 11:35:49 kaka-Parallels-Virtual-Platform sshd[84325]: Accepted password for u2 from 10.211.55.2 port 59499 ssh2
2月 05 11:35:49 kaka-Parallels-Virtual-Platform sshd[84325]: pam_unix(sshd:session): session opened for user u2(uid=999) by (uid=0)
2月 05 11:41:08 kaka-Parallels-Virtual-Platform sshd[99575]: Accepted password for u3 from 10.211.55.2 port 59900 ssh2
2月 05 11:41:08 kaka-Parallels-Virtual-Platform sshd[99575]: pam_unix(sshd:session): session opened for user u3(uid=1002) by (uid=0)
2月 05 11:45:57 kaka-Parallels-Virtual-Platform sshd[120408]: Accepted password for u33 from 10.211.55.2 port 60182 ssh2
2月 05 11:45:57 kaka-Parallels-Virtual-Platform sshd[120408]: pam_unix(sshd:session): session opened for user u33(uid=1003) by (uid=0)
2月 05 12:06:11 kaka-Parallels-Virtual-Platform sshd[181223]: Accepted password for root from 10.211.55.2 port 61588 ssh2
2月 05 12:06:11 kaka-Parallels-Virtual-Platform sshd[181223]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
2月 05 12:07:35 kaka-Parallels-Virtual-Platform sshd[185358]: Accepted password for kaka from 10.211.55.2 port 61673 ssh2
2月 05 12:07:35 kaka-Parallels-Virtual-Platform sshd[185358]: pam_unix(sshd:session): session opened for user kaka(uid=1000) by (uid=0)

软件包:apt

最后一个话题,也是Ubuntu和CentOS在操作上最主要的差异,软件包。
在CentOS,我们说有:RPM,RedHat Package Manager,红帽软件包管理;YUM,Yellow dog Updater,Modified,软件包管理器,基于RPM。
同时,在《1.简介、目录和VIM》,我们就讨论过,CentOS和Ubuntu隶属于不同的分支,CentOS隶属于RedHat分支,Ubuntu隶属于debian分支。所以,.rpm的包,在Ubuntu上是无法使用的。

在Ubuntu上,安装软件依赖的是:

  • deb(类似rpm)
  • apt(类似yum)

镜像源

apt的镜像源的配置文件位于:/etc/apt/sources.list

示例代码:

1
cat /etc/apt/sources.list

运行结果:

1
2
3
4
5
6
7
8
#deb cdrom:[Ubuntu 22.04.1 LTS _Jammy Jellyfish_ - Release amd64 (20220809.1)]/ jammy main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://cn.archive.ubuntu.com/ubuntu/ jammy main restricted
# deb-src http://cn.archive.ubuntu.com/ubuntu/ jammy main restricted

【部分运行结果略】
  • 第一个字段,debdeb-src,分别指软件包(deb)和源代码包(deb-src)
  • 第二个字段,指向的是软件库的地址,在上例中是http://cn.archive.ubuntu.com/ubuntu/
  • 第三个字段,代表的是版本,在上例中是jammy

我们可以如果如下的命令查看版本。示例代码:

1
cat /etc/os-release

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

有些资料会建议修改这个配置文件,将镜像源从改成国内的,实际上,在最新版的Ubuntu中,镜像源已经是国内的了。
其他的镜像源有:

命令

语法格式

语法格式:

1
apt [options] [command] [package ...]

解释说明:

  • options:可选选项。
  • command:要进行的操作。
  • package:安装的包名。

选项:

  • options:可选选项,例如:
    • -h:显示帮助信息。
    • -y:将安装过程中所有提示选择设为yes
    • -q:不显示安装的过程等等。
  • command:要进行的操作,例如:
    • update:更新软件包索引信息。
    • upgrade:升级当前已安装的软件包(如果可更新)。
    • full-upgrade:升级当前已安装的软件包(升级前会先删除需要更新软件包)。
    • install:安装软件包。
    • reinstall:重新安装软件包。
    • remove:卸载软件包(保留软件的配置文件)。
    • purge:卸载软件包(不保留软件的配置文件)。
    • autoremove:清理不再使用的依赖和库文件。
    • search:查找软件包。
    • show:显示软件包具体信息,例如版本号、安装大小、依赖关系等信息。
    • list:列出可更新的软件包及版本信息。
    • edit-sources:编辑sources.list配置文件。

常用命令

  • 更新软件包索引信息(可通过该方式查看近期可更新的软件包):
    1
    apt update
  • 更新软件包索引信息后升级软件包:
    1
    apt update && sudo apt upgrade -y
  • 安装软件包:
    1
    apt install 【包名】
  • 安装软件包,如果软件包已经存在,则不要升级它:
    1
    apt install 【包名】 --no-upgrade
  • 只升级软件包,如果不存在就不要安装它
    1
    apt install 【包名】 --only-upgrade
  • 安装指定软件包版本
    1
    apt install 【package_name】=【version_number】
    • package_name:包名
    • version_number:版本号
  • 卸载软件包:
    1
    apt remove vim
  • 搜索软件包
    1
    apt search 【包名】
  • 查看软件包的相关信息
    1
    apt show 【包名】
  • 列出所有已安装的软件包的版本信息
    1
    apt list --all-versions
  • 列出所有已安装的软件包
    1
    apt list --installed
  • 列出可更新的软件包及版本信息
    1
    apt list --upgradeable

例子

我们列举了很多的软件的安装方法,有些软件是直接tar解压,有些软件是基于rpmyum进行安装。对于tar解压的,没有区别。我们主要讨论基于rpmyum进行安装,在Ubuntu应该怎么安装。

JDK

搜索

示例代码:

1
apt search openjdk

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Sorting... Done
Full Text Search... Done

【部分运行结果略】

openjdk-11-dbg/jammy-updates,jammy-security 11.0.17+8-1ubuntu2~22.04 amd64
Java runtime based on OpenJDK (debugging symbols)

openjdk-11-demo/jammy-updates,jammy-security 11.0.17+8-1ubuntu2~22.04 amd64
Java runtime based on OpenJDK (demos and examples)

openjdk-11-doc/jammy-updates,jammy-updates,jammy-security,jammy-security 11.0.17+8-1ubuntu2~22.04 all
OpenJDK Development Kit (JDK) documentation

openjdk-11-jdk/jammy-updates,jammy-security 11.0.17+8-1ubuntu2~22.04 amd64
OpenJDK Development Kit (JDK)

openjdk-11-jdk-headless/jammy-updates,jammy-security 11.0.17+8-1ubuntu2~22.04 amd64
OpenJDK Development Kit (JDK) (headless)


【部分运行结果略】

openjdk-8-dbg/jammy-updates,jammy-security 8u352-ga-1~22.04 amd64
Java runtime based on OpenJDK (debugging symbols)

openjdk-8-demo/jammy-updates,jammy-security 8u352-ga-1~22.04 amd64
Java runtime based on OpenJDK (demos and examples)

openjdk-8-doc/jammy-updates,jammy-updates,jammy-security,jammy-security 8u352-ga-1~22.04 all
OpenJDK Development Kit (JDK) documentation

openjdk-8-jdk/jammy-updates,jammy-security 8u352-ga-1~22.04 amd64
OpenJDK Development Kit (JDK)

openjdk-8-jdk-headless/jammy-updates,jammy-security 8u352-ga-1~22.04 amd64
OpenJDK Development Kit (JDK) (headless)

openjdk-8-jre/jammy-updates,jammy-security 8u352-ga-1~22.04 amd64
OpenJDK Java runtime, using Hotspot JIT

openjdk-8-jre-headless/jammy-updates,jammy-security 8u352-ga-1~22.04 amd64
OpenJDK Java runtime, using Hotspot JIT (headless)

openjdk-8-jre-zero/jammy-updates,jammy-security 8u352-ga-1~22.04 amd64
Alternative JVM for OpenJDK, using Zero/Shark

openjdk-8-source/jammy-updates,jammy-updates,jammy-security,jammy-security 8u352-ga-1~22.04 all
OpenJDK Development Kit (JDK) source files

【部分运行结果略】

安装

在这里,我们选择openjdk-8-jdk。示例代码:

1
apt install openjdk-8-jdk

设置默认版本

如果我们安装了两个版本的JDK,可以通过update-alternatives --config java,设置默认版本。

示例代码:

1
update-alternatives --config java

运行结果:

1
2
3
4
5
6
7
8
9
There are 2 choices for the alternative java (providing /usr/bin/java).

Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
* 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode

Press <enter> to keep the current choice[*], or type selection number:

JAVA_HOME环境变量

在有些情况下,我们需要设置JAVA_HOME环境变量,修改/etc/environment

/etc/environment的内容如下:

1
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"

在我们上文的"设置默认版本"中,已经看到路径了,路径是/usr/lib/jvm/java-8-openjdk-amd64/jre/bin

卸载

例如,我们想卸载openjdk-11-jdk

示例代码:

1
apt remove openjdk-11-jdk

OpenJDK和OracleJDK

示例代码:

1
java -version

运行结果:

1
2
3
openjdk version "1.8.0_352"
OpenJDK Runtime Environment (build 1.8.0_352-8u352-ga-1~22.04-b08)
OpenJDK 64-Bit Server VM (build 25.352-b08, mixed mode)

这个返回和我们之前的返回不太一样,之前的返回的是:

1
2
3
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

解释一下,之前的是OracleJDK,这里我们安装的是OpenJDK。两者并没有本质上的区别,存在一些细微的区别:

  1. 更新周期
    OpenJDK的更新比OracleJDK更频繁,所以一般认为OracleJDK更稳定。
  2. 授权协议
    OpenJDK使用GNU通用公共许可证(GNU GPL)第2版,OracleJDK依据Oracle二进制代码许可协议许可证。
  3. 整体性能
    OracleJDK在响应能力和JVM性能方面优于OpenJDK。

除此之外,在具体技术输出上,没有区别。

Oracle没有提供OracleJDK的.deb的安装包,但是我们可以通过下载.tar包解压的方式进行安装。具体可以参考《ElasticSearch实战入门(6.X):1.工具、概念、集群和倒排索引》的讨论。

JDK8

Python

1
apt install python3

上述命令安装的Python可能没有pip功能,pip功能需要额外安装:

1
apt install python3-pip

MySQL

搜索

示例代码:

1
apt search mysql

运行结果:

1
2
3
4
5
6
7
8
9
Sorting...
Full Text Search...

【部分运行结果略】

mysql-server/jammy-updates,jammy-updates,jammy-security,jammy-security 8.0.32-0ubuntu0.22.04.2 all
MySQL database server (metapackage depending on the latest version)

【部分运行结果略】

安装

示例代码:

1
apt install mysql-server

密码管理

我们敲入命令mysql,即可登录,默认不需要输入密码。
因为在MySQL 8.0上,默认情况下,root用户通过插件进行身份验证。

我们可以通过如下的SQL来修改密码:

1
2
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MySQL@2023';
FLUSH PRIVILEGES;

修改之后,再次登录就需要密码了。

修改bind-address

在Ubuntu下,还有一个要注意,我们需要修改/etc/mysql/mysql.conf.d/mysqld.cnfbind-address,将其从bind-address = 127.0.0.1改为bind-address = 0.0.0.0。否者依旧不允许远程访问。

服务管理

《MySQL从入门到实践:1.概述和工具准备》,我们通过YUM或者RPM的方式安装MySQL,默认服务名称是mysqld
在这里,默认的服务名称是mysql

Kibana

1
apt install kibana

Redis

1
apt install redis-server

nginx

1
apt install nginx

PyCharm

在有些情况下,我们也会在Ubuntu上安装PyCharm。

在JetBrains的官网下载PyCharm:https://www.jetbrains.com/pycharm/download/

是一个.tar.gz的压缩包。

如图所示,解压后进行安装。

PyCharm

下次运行PyCharm,也是运行这个文件,已经安装过了,就不会再要求安装。

问题

在有些情况下,会有如下的现象,我们安装一个软件,返回如下:

1
2
3
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1306058 (unattended-upgr)      
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1306058 (unattended-upgr)
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1306058 (unattended-upgr)

网上有些方法会建议我们杀掉相关进程,或者删掉相关文件。
其实这个导致这个现象的原因是Ubuntu系统在进行更新。最好的方法是,耐心等待系统更新完成。

rpm

Ubuntu中已经有了绝大多数的软件,但是如果有一些冷门的软件,确实只有rpm的包,我们可以将其转成deb的包,然后进行安装。

alien

我们需要用到一个工具alien,在安装alien之前,请确保在您的系统启用Universe软件源,启用命令:add-apt-repository universe

启用Universe软件源后,执行命令apt install alien安装alien

安装rpm

  • 转成deb的包:alien package_name.rpm
  • 安装deb的包:apt ./package_name.deb
  • 我们还可以使用alien命令的-i选项直接安装RPM软件包,而不是转换然后安装软件包。
    1
    alien -i package_name.rpm

仅作为了解

如果能直接通过debapt安装,就不要用这种方法,这种方法不一定能成功,也可能有潜在的问题。

例如,我们安装了一个JDK19,在打印Setting up jdk-19 (19.0.2-8) ...之后就退出了,示例代码:

1
alien -i jdk-19_linux-x64_bin.rpm

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Warning: Skipping conversion of scripts in package jdk-19: postinst postrm prerm
Warning: Use the --scripts parameter to include the scripts.
warning: jdk-19_linux-x64_bin.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
dpkg --no-force-overwrite -i jdk-19_19.0.2-8_amd64.deb
(Reading database ... 210781 files and directories currently installed.)
Preparing to unpack jdk-19_19.0.2-8_amd64.deb ...
Unpacking jdk-19 (19.0.2-8) over (19.0.2-8) ...
Setting up jdk-19 (19.0.2-8) ...

然后,我们通过update-alternatives --config java看不到JDK19,示例代码:

1
update-alternatives --config java

运行结果:

1
2
3
4
5
6
7
8
9
There are 2 choices for the alternative java (providing /usr/bin/java).

Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
* 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode

Press <enter> to keep the current choice[*], or type selection number:

但是我们在JDK19的安装目录下,能成功运行java -version
示例代码:

1
2
cd /usr/lib/jvm/jdk-19-oracle-x64/bin
./java -version

运行结果:

1
2
3
java version "19.0.2" 2023-01-17
Java(TM) SE Runtime Environment (build 19.0.2+7-44)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.2+7-44, mixed mode, sharing)

这个方法仅作为了解,知道有这么一个方法,并知道这个方法的不可靠

文章作者: Kaka Wan Yifan
文章链接: https://kakawanyifan.com/11004
版权声明: 本博客所有文章版权为文章作者所有,未经书面许可,任何机构和个人不得以任何形式转载、摘编或复制。

评论区