This commit is contained in:
delong1998 2022-07-21 11:30:00 +08:00
parent 877e38ddc1
commit ca6096ef3b
74 changed files with 1691 additions and 3197 deletions

124
README.md Normal file → Executable file
View File

@ -1,63 +1,63 @@
# 优麒麟documentation sig
优麒麟documentation致力于完善UKylin社区文档帮助用户更好更方便的使用优麒麟系统,主要工作内容是书写各类说明文档,包括但是不限于教程、答疑等内容
# 基本信息
## 仓库地址
[sig-documentation](https://gitee.com/ukylin-os/sig-documentation.git)
手机用户因为码云的自适应问题默认看到的是README文件仓库具体内容访问此链接[手机端仓库目录](https://gitee.com/ukylin-os/sig-documentation/tree/master)
## 小组成员
- 陌生人
- chipo
## 通信方式
- 邮件列表:<documentation@lists.openkylin.top>[邮件列表订阅页面](https://mailweb.ubuntukylin.com/postorius/lists/documentation.lists.openkylin.top/)
# 工作内容
- 收集各种与优麒麟有关的问题,并根据自己的理解写出对应的解决方法
- 书写各类教程,要求都可以在优麒麟上使用,包括但是不限于教程、答疑等内容
# 贡献指南
## 内容要求
- 内容方向没有特殊要求,只要可以在优麒麟上使用即可
- 内容需要照顾到新手用户,所有的流程都要尽可能详细
- 内容需要有标题、作者和创建时间,其它要求暂无
- 禁止带有侮辱性词汇,禁止政治敏感词汇
- 禁止发布广告
- 禁止发布违反法律法规的信息
- 文件名及分类文件夹尽可能言简意赅
- 结尾统一用.md的后缀编码为统一的无BOM头的UTF-8
- 图片等资源统一放置在资源目录并分类
- 图片高度建议在640px左右、宽度不超过820px、图片一般为.png格式大小不超过150K
- 为避免产权侵犯,引起纠纷,文档配图请使用原创图片或无版权图片
- 图片建议根据内容命名,只用数字序列不利于后续图片的继承
- 禁止任何分支强制推送
- 禁止推送到主分支主分支不接受除dev分支以外的任何pr请求同时也不接受任何推送
## 参与方法
- 参与这项工作没有更多的要求,只要愿意尝试且按照指南开展工作,遇到疑问或无法决定的问题时同其他人讨论,就一定可以做出高质量的成果
- sig组成员在仓库上建立对应的分支格式为dev-名字例如dev-moshengrendev-chipo在自己的分支上书写对应的内容
- 非sig成员可以在gitee上fork一下仓库在自己仓库的dev分支进行修改然后按照[内容要求](#内容要求)添加、补充或修改内容完成后通过提pr的方式来提交到主仓库,通过审核后即可合并
- 非sig成员可以通过上述邮件列表<documentation@lists.openkylin.top>或单独发送邮件给邮件列表所有者<documentation-owner@lists.openkylin.top>沟通来申请加入sig建议先订阅非订阅人员的邮件会被暂时拦截邮件列表订阅连接[documentation订阅页面](https://mailweb.ubuntukylin.com/postorius/lists/documentation.lists.openkylin.top/)
- [sig申请加入流程](https://www.ubuntukylin.com/sig/application-cn.html)
- 参与贡献前可以先在仓库提一个Issue只限于添加说明想要书写的内容方便查看是否有人正在写自己想写的内容如果想要修改某些内容可以修改以后提pr
- 如果不太会写markdown格式的文档可以在搜索引擎搜索markdown文档语法或者通过邮件列表沟通让sig成员帮忙转换
## 关于许可证
仓库默认使用CC BY-SA 4.0许可证如果有其他需要可以在自己的文档下标明具体的CC许可证版本
以下内容插入文档末尾在文档平台生成页面的时候会自动变成对应的许可证
```
版权声明:本文为<xxx>原创,<xxx>修改,依据 [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) 许可证进行授权,转载请附上出处链接及本声明。
# openKylin社区-documentation sig
openKylin社区-documentation致力于完善openKylin社区文档帮助用户更好更方便的使用openKylin系统,主要工作内容是书写各类说明文档,包括但是不限于教程、答疑等内容
# 基本信息
## 仓库地址
[sig-documentation](https://gitee.com/openkylin/sig-documentation.git)
手机用户因为码云的自适应问题默认看到的是README文件仓库具体内容访问此链接[手机端仓库目录](https://gitee.com/openkylin/sig-documentation/tree/master)
## 小组成员
- 陌生人
- chipo
## 通信方式
- 邮件列表:<documentation@lists.openkylin.top>[邮件列表订阅页面](https://mailweb.openkylin.top/postorius/lists/documentation.lists.openkylin.top/)
# 工作内容
- 收集各种与openKylin有关的问题,并根据自己的理解写出对应的解决方法
- 书写各类教程,要求都可以在openKylin上使用,包括但是不限于教程、答疑等内容
# 贡献指南
## 内容要求
- 内容方向没有特殊要求,只要可以在openKylin上使用即可
- 内容需要照顾到新手用户,所有的流程都要尽可能详细
- 内容需要有标题、作者和创建时间,其它要求暂无
- 禁止带有侮辱性词汇,禁止政治敏感词汇
- 禁止发布广告
- 禁止发布违反法律法规的信息
- 文件名及分类文件夹尽可能言简意赅
- 结尾统一用.md的后缀编码为统一的无BOM头的UTF-8
- 图片等资源统一放置在资源目录并分类
- 图片高度建议在640px左右、宽度不超过820px、图片一般为.png格式大小不超过150K
- 为避免产权侵犯,引起纠纷,文档配图请使用原创图片或无版权图片
- 图片建议根据内容命名,只用数字序列不利于后续图片的继承
- 禁止任何分支强制推送
- 禁止推送到主分支主分支不接受除dev分支以外的任何pr请求同时也不接受任何推送
## 参与方法
- 参与这项工作没有更多的要求,只要愿意尝试且按照指南开展工作,遇到疑问或无法决定的问题时同其他人讨论,就一定可以做出高质量的成果
- sig组成员在仓库上建立对应的分支格式为dev-名字例如dev-moshengrendev-chipo在自己的分支上书写对应的内容
- 非sig成员可以在gitee上fork一下仓库在自己仓库的dev分支进行修改然后按照[内容要求](#内容要求)添加、补充或修改内容完成后通过提pr的方式来提交到主仓库,通过审核后即可合并
- 非sig成员可以通过上述邮件列表<documentation@lists.openkylin.top>或单独发送邮件给邮件列表所有者<documentation-owner@lists.openkylin.top>沟通来申请加入sig建议先订阅非订阅人员的邮件会被暂时拦截邮件列表订阅连接[documentation订阅页面](https://mailweb.openkylin.top/postorius/lists/documentation.lists.openkylin.top/)
- [sig申请加入流程](https://www.ubuntukylin.com/sig/application-cn.html)
- 参与贡献前可以先在仓库提一个Issue只限于添加说明想要书写的内容方便查看是否有人正在写自己想写的内容如果想要修改某些内容可以修改以后提pr
- 如果不太会写markdown格式的文档可以在搜索引擎搜索markdown文档语法或者通过邮件列表沟通让sig成员帮忙转换
## 关于许可证
仓库默认使用CC BY-SA 4.0许可证如果有其他需要可以在自己的文档下标明具体的CC许可证版本
以下内容插入文档末尾在文档平台生成页面的时候会自动变成对应的许可证
```
版权声明:本文为<xxx>原创,<xxx>修改,依据 [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) 许可证进行授权,转载请附上出处链接及本声明。
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 KiB

0
assets/Fcitx5/Fcitx5主题选择.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 280 KiB

0
assets/KVM/addnet.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

0
assets/KVM/addstep1.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 69 KiB

0
assets/KVM/addstep2.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

0
assets/KVM/addstep3.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

0
assets/KVM/addstep4.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

0
assets/KVM/addstep5.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

0
assets/KVM/net.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

0
assets/KVM/ossetup.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

0
assets/KVM/virtmanager.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

0
assets/安装NVIDIA显卡驱动/图片1.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

0
assets/安装NVIDIA显卡驱动/图片2.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

0
assets/安装NVIDIA显卡驱动/图片3.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 139 KiB

0
assets/安装NVIDIA显卡驱动/图片4.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 123 KiB

0
assets/安装NVIDIA显卡驱动/图片5.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 153 KiB

74
其他/ssh基础用法.md Normal file → Executable file
View File

@ -1,37 +1,37 @@
# <center>ssh基础用法</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
1. SSH 为 Secure Shell 的缩写,由 IETF 的网络小组Network Working Group所制定SSH 为建立在应用层基础上的安全协议一般来说用的最频繁的还是用来登录远程主机他内置了一个sftp的模块使用加密的方式传输用的端口也是22比起 不加密的ftp安全性要好很多。最简单的指令格式如下
ssh 用户名@主机地址
当然这是基于端口是默认的情况如果sshserver的端口不是默认的就会变成下边这样:
ssh 用户名@主机地址 -p 端口号
然后会提示输入密码,这个密码就是你要登录的用户名的密码,这个用户必须是存在的,而且是允许登录的才行,一般情况下大家在安装系统时候建立的用户是没问题的,而且密码默认不回显.
他还可以代理x11协议把界面传输到本地但是实际上是在远程主机运行但是需要远程主机安装xauth并且本地和远端都启动x11代理才可以实际测试的时候有的应用可能是不支持的此外如果本地系统是win的话可能不好用如果是优麒麟那么只要网速足够还是挺好的缺点是有可能无法使用中文输入法只能复制粘贴虽然可以通过配置的方式让输入法启动但是我没成功过。另外就是有一个端口映射的作用一般来说称之为ssh隧道可以把远端的端口映射到本地也可以把本地的端口映射到远程也可以改成双向的这样可以用作内网穿透或者是把本地服务暴露在远端也可以把远端的端口变成本地访问而且是用ssh加密过的不用担心被窃听等一般情况下开发会用的比较多把数据库的端口映射到本地的某个端口直接访问不用把公网的对应端口打开提高安全性再比如说vnc把vnc的端口映射到本地虽然vncview提示不加密但是中间传输的数据是经过ssh加密的不用担心被窃听而且可以关闭对应端口的防火墙不用担心被别人扫描到。ssh可以禁用密码登录只使用密钥登录也可以两者并存只要有一个公钥和私钥然后把公钥放到特定的文件里就可以直接使用私钥免密登录。
2. SSh的一个小技巧ssh如果在一段时间不响应的话可以修改心跳时间每隔一定时间发送一个空包保持响应一般来说我不建议设置的时间超过30如果是网络环境差点30都可能断一般设置成15极端情况设置成5这里以秒为单位。
还有就是如果退出了ssh那么正在运行的程序就会被杀死可以使用screen命令让程序运行在后台然后Ctrl+a+d来返回这样就可以安心的退出ssh不用担心程序挂了恢复的命令也有。
3. 如果是第一次登录一个主机会出现一个提示语,大概如下:
这个就是你第一次登录一个新主机的时候给的提示至于为什么给这个提示是因为ssh的通讯过程导致的算是一种验证方法具体大家可以查一下百度需要注意的是在这里只有输入yes才可以继续单纯的一个y或者是回车是不可以的
然后输入密码登录,成功登录之后会显示一些欢迎语,和最后一次的登录地址。
最下边的看起来是和上边的一致的但是实际上是ssh登录的结果因为终端的显示方式就是“用户名@主机名”这种格式
登录成功之后就可以用终端在远程主机执行一些命令操作
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~华丽的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
可能大部分没有尝试过的用户会发现在使用远程登录自己主机的时候会被拒绝这是因为ssh分为两部分一部分是server一部分是clientclient就是我们上边用的ssh命令server部分桌面环境不一定有Ubuntu的server版会在安装的时候让用户选择是否安装server如果没有的话可以直接安装openssh-server需要注意的是我们自己安装的server默认禁止root用户登录所以要想让root用户远程登录需要修改server的配置文件再次就不细说的网上一把教程节省资源。
本文撰写过程中参考了以下文章:
[https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=193097](https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=193097)
[https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=193211](https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=193211)
# <center>ssh基础用法</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
1. SSH 为 Secure Shell 的缩写,由 IETF 的网络小组Network Working Group所制定SSH 为建立在应用层基础上的安全协议一般来说用的最频繁的还是用来登录远程主机他内置了一个sftp的模块使用加密的方式传输用的端口也是22比起 不加密的ftp安全性要好很多。最简单的指令格式如下
ssh 用户名@主机地址
当然这是基于端口是默认的情况如果sshserver的端口不是默认的就会变成下边这样:
ssh 用户名@主机地址 -p 端口号
然后会提示输入密码,这个密码就是你要登录的用户名的密码,这个用户必须是存在的,而且是允许登录的才行,一般情况下大家在安装系统时候建立的用户是没问题的,而且密码默认不回显.
他还可以代理x11协议把界面传输到本地但是实际上是在远程主机运行但是需要远程主机安装xauth并且本地和远端都启动x11代理才可以实际测试的时候有的应用可能是不支持的此外如果本地系统是win的话可能不好用如果是优麒麟那么只要网速足够还是挺好的缺点是有可能无法使用中文输入法只能复制粘贴虽然可以通过配置的方式让输入法启动但是我没成功过。另外就是有一个端口映射的作用一般来说称之为ssh隧道可以把远端的端口映射到本地也可以把本地的端口映射到远程也可以改成双向的这样可以用作内网穿透或者是把本地服务暴露在远端也可以把远端的端口变成本地访问而且是用ssh加密过的不用担心被窃听等一般情况下开发会用的比较多把数据库的端口映射到本地的某个端口直接访问不用把公网的对应端口打开提高安全性再比如说vnc把vnc的端口映射到本地虽然vncview提示不加密但是中间传输的数据是经过ssh加密的不用担心被窃听而且可以关闭对应端口的防火墙不用担心被别人扫描到。ssh可以禁用密码登录只使用密钥登录也可以两者并存只要有一个公钥和私钥然后把公钥放到特定的文件里就可以直接使用私钥免密登录。
2. SSh的一个小技巧ssh如果在一段时间不响应的话可以修改心跳时间每隔一定时间发送一个空包保持响应一般来说我不建议设置的时间超过30如果是网络环境差点30都可能断一般设置成15极端情况设置成5这里以秒为单位。
还有就是如果退出了ssh那么正在运行的程序就会被杀死可以使用screen命令让程序运行在后台然后Ctrl+a+d来返回这样就可以安心的退出ssh不用担心程序挂了恢复的命令也有。
3. 如果是第一次登录一个主机会出现一个提示语,大概如下:
这个就是你第一次登录一个新主机的时候给的提示至于为什么给这个提示是因为ssh的通讯过程导致的算是一种验证方法具体大家可以查一下百度需要注意的是在这里只有输入yes才可以继续单纯的一个y或者是回车是不可以的
然后输入密码登录,成功登录之后会显示一些欢迎语,和最后一次的登录地址。
最下边的看起来是和上边的一致的但是实际上是ssh登录的结果因为终端的显示方式就是“用户名@主机名”这种格式
登录成功之后就可以用终端在远程主机执行一些命令操作
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~华丽的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
可能大部分没有尝试过的用户会发现在使用远程登录自己主机的时候会被拒绝这是因为ssh分为两部分一部分是server一部分是clientclient就是我们上边用的ssh命令server部分桌面环境不一定有Ubuntu的server版会在安装的时候让用户选择是否安装server如果没有的话可以直接安装openssh-server需要注意的是我们自己安装的server默认禁止root用户登录所以要想让root用户远程登录需要修改server的配置文件再次就不细说的网上一把教程节省资源。
本文撰写过程中参考了以下文章:
[https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=193097](https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=193097)
[https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=193211](https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=193211)

328
其他/优麒麟 2204 安装 Fcitx5 输入法.md Normal file → Executable file
View File

@ -1,165 +1,165 @@
# <center>优麒麟 22.04 安装 Fcitx5 输入法</center>
#### <center>作者ymz316</center>
#### <center>2022-06-09</center>
<br>
Fcitx5 是继 Fcitx 之后的新一代输入法框架优麒麟2204 默认安装的是 Fcitx而 Fcitx 和 Fcitx5 是相互冲突的因此安装Fcitx5之前需要先卸载 Fcitx。关于 Fcitx5 的学习文档,推荐 Archlinux 关于 Fcitx5 的 [wiki 文档](https://wiki.archlinux.org/title/Fcitx5_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87))
## 一、卸载 Fcitx 输入法
### **1.首先看看大概装了哪些 Fcitx 输入法组件**
```
$ apt search fcitx | grep 安装
fcitx/jammy,jammy,now 1:4.2.9.8-5 all [已安装]
fcitx-baidupinyin/jammy-partner,now 1.0.1.0 amd64 [已安装]
fcitx-bin/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-config-common/jammy,jammy,now 0.4.10-3 all [已安装]
fcitx-config-gtk/jammy,now 0.4.10-3 amd64 [已安装]
fcitx-data/jammy,jammy,now 1:4.2.9.8-5 all [已安装]
fcitx-frontend-all/jammy,jammy,now 1:4.2.9.8-5 all [已安装]
fcitx-frontend-gtk2/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-frontend-gtk3/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-frontend-qt5/jammy,now 1.2.7-1.2build1 amd64 [已安装]
fcitx-googlepinyin/jammy,now 0.1.6-5 amd64 [已安装]
fcitx-libs/jammy,jammy,now 1:4.2.9.8-5 all [已安装,自动]
fcitx-module-cloudpinyin/jammy,now 0.3.7-1 amd64 [已安装]
fcitx-module-dbus/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-module-kimpanel/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-module-lua/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-module-quickphrase-editor5/jammy,now 1.2.7-1.2build1 amd64 [已安装]
fcitx-module-x11/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-modules/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-pinyin/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-table/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-ui-classic/jammy,now 1:4.2.9.8-5 amd64 [已安装]
libfcitx-config4/jammy,now 1:4.2.9.8-5 amd64 [已安装]
libfcitx-core0/jammy,now 1:4.2.9.8-5 amd64 [已安装]
libfcitx-gclient1/jammy,now 1:4.2.9.8-5 amd64 [已安装]
libfcitx-qt5-1/jammy,now 1.2.7-1.2build1 amd64 [已安装]
libfcitx-qt5-data/jammy,jammy,now 1.2.7-1.2build1 all [已安装]
libfcitx-utils0/jammy,now 1:4.2.9.8-5 amd64 [已安装]
```
### **2.卸载上面所有的包**
```
$ sudo apt remove fcitx-data fcitx-pinyin fcitx-baidupinyin fcitx-googlepinyin fcitx-bin fcitx-libs fcitx-config-common fcitx-frontend-* fcitx-modules libfcitx-*
```
也可以分步删除:
```
$ sudo apt remove fcitx-data # 会删除fcitx fcitx-data fcitx-table sogouimebs
$ sudo apt remove fcitx-pinyin fcitx-baidupinyin fcitx-googlepinyin
$ sudo apt remove fcitx-bin
$ sudo apt remove fcitx-libs
$ sudo apt remove fcitx-config-common # 会删除fcitx-config-common fcitx-config-gtk
$ sudo apt remove fcitx-frontend-* # 会删除fcitx-frontend-all fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-frontend-qt5
$ sudo apt remove fcitx-modules # 会删除: fcitx-module-cloudpinyin fcitx-module-dbus fcitx-module-kimpanel fcitx-module-lua fcitx-module-x11 fcitx-modules fcitx-ui-classic
$ sudo apt remove fcitx-module-quickphrase-editor5
$ sudo apt remove libfcitx-* # 会删除: libfcitx-config4 libfcitx-core0 libfcitx-gclient1 libfcitx-qt5-1 libfcitx-qt5-data libfcitx-utils0
```
## 二、安装 Fcitx5
Fcitx5 输入法框架的软件包主要包括:输入法主体 fcitx5输入法引擎支撑图形界面的组件输入法模块以及输入法配置工具等。
### **1.安装输入法主体**
```
$ sudo apt install fcitx5
```
下面是安装过程中的有关提示信息(发出来的目的是为了更好地理解 Fcitx5 的框架结构):
> 建议安装: fcitx5-chinese-addons fcitx5-frontend-gtk2 kde-config-fcitx5
> 推荐安装: fcitx5-config-qt fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5 fcitx5-module-emoji fcitx5-module-quickphrase fcitx5-module-wayland fcitx5-module-xorg
> 下列【新】软件包将被安装: fcitx5 fcitx5-data fcitx5-modules libfcitx5config6 libfcitx5core7 libfcitx5utils2 libxcb-ewmh2
### **2.安装中文输入法引擎**
`fcitx5-chinese-addons` 是 Fcitx5 的一个中文输入法引擎,它包含了大量中文输入方式:拼音、双拼、五笔拼音、自然码、仓颉、冰蟾全息、二笔等。
```
$ sudo apt install fcitx5-chinese-addons
```
下面是安装过程中的有关提示信息:
> 推荐安装: fcitx5-module-chttrans fcitx5-module-cloudpinyin fcitx5-module-fullwidth fcitx5-module-quickphrase
> 下列【新】软件包将被安装: fcitx5-chinese-addons fcitx5-chinese-addons-bin fcitx5-chinese-addons-data fcitx5-module-pinyinhelper fcitx5-module-punctuation fcitx5-pinyin fcitx5-table libfcitx5-qt-data libfcitx5-qt1 libime-data libime-data-language-model libimecore0 libimepinyin0 libimetable0
### **3.安装输入法对图形界面的支持组件**
```
$ sudo apt install fcitx5-frontend-*
```
下面是安装过程中的有关提示信息:
> 建议安装: libgtk-4-media-gstreamer | libgtk-4-media-ffmpeg
> 推荐安装: libgtk-4-bin
> 下列【新】软件包将被安装: fcitx5-frontend-gtk2 fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5 libcairo-script-interpreter2 libfcitx5gclient2 libgtk-4-1 libgtk-4-common
### **4.安装配置工具**
```
$ sudo apt install fcitx5-config-qt kde-config-fcitx5
```
下面是安装过程中的有关提示信息:
> 推荐安装: libime-bin
> 下列【新】软件包将被安装: fcitx5-config-qt kde-cli-tools kde-cli-tools-data kde-config-fcitx5 libkf5pty-data libkf5pty5 libkf5su-bin libkf5su-data libkf5su5 libkworkspace5-5 qml-module-org-kde-kcm
### **5.安装推荐的输入法模块**
```
$ sudo apt install fcitx5-module-chttrans fcitx5-module-cloudpinyin fcitx5-module-fullwidth fcitx5-module-quickphrase fcitx5-module-emoji fcitx5-module-quickphrase fcitx5-module-wayland fcitx5-module-xorg
```
下面是安装过程中的有关提示信息:
> 将会同时安装下列软件: libmarisa0 libopencc-data libopencc1.1 libxcb-imdkit1 unicode-cldr-core
> 下列【新】软件包将被安装fcitx5-module-chttrans fcitx5-module-cloudpinyin fcitx5-module-emoji fcitx5-module-fullwidth fcitx5-module-quickphrase fcitx5-module-wayland fcitx5-module-xorg libmarisa0 libopencc-data libopencc1.1 libxcb-imdkit1 unicode-cldr-core
如无意外,重启后会自动启动 Fcitx5 输入法了。
## 三、配置Fcitx5 输入法
### **1.安装主题**
安装并选择主题包,可以改善输入法托盘的外观,增加文字输入的舒适感。这里我下载和安装一下 fcitx5-nord 主题主题包来源Archlinux 关于 Fcitx5 的 wiki 文档中的主题介绍),安装命令如下:
```
$ git clone https://github.com/tonyfettes/fcitx5-nord.git # 克隆 fcitx5-nord 主题包到本地
$ cd fcitx5-nord/ # 切换到 fcitx5-nord 主题包目录
$ ls # 查看目录内文件发现有2个主题
LICENSE Nord-Dark Nord-Light README.md
$ cp -r Nord-Dark/ Nord-Light/ ~/.local/share/fcitx5/themes/ # 复制2个主题到 Fcitx5 的主题目录
$ fcitx5-configtool # 配置主题及其他参数
```
配置主题界面如下:
![主题选择](../assets/Fcitx5/Fcitx5主题选择.png)
### **2.安装词库**
安装离线词库后可以快速从词库中进行联想匹配,从而极大地提高输入速度及准确率。
Fcitx5的离线词库一般放在 `~/.local/share/fcitx5/pinyin/dictionaries` 目录,这些离线词库通常命名为 `*.dict`。安装方法也很简单,就是下载离线词库,将其复制到 `~/.local/share/fcitx5/pinyin/dictionaries` 即可(注意:如果找不到 dictionaries 目录则可以自己建立)。
**常用的离线词库:**
- 萌娘百科词库 https://github.com/outloudvi/mw2fcitx
- 维基百科词库 https://github.com/felixonmars/fcitx5-pinyin-zhwiki
从上面2个仓库的 Releases 找到并下载词库,然后复制到词库目录,再查看词库目录应该是类似这样的:
```
$ ls ~/.local/share/fcitx5/pinyin/dictionaries
moegirl.dict zhwiki-20220529.dict
```
# <center>优麒麟 22.04 安装 Fcitx5 输入法</center>
#### <center>作者ymz316</center>
#### <center>2022-06-09</center>
<br>
Fcitx5 是继 Fcitx 之后的新一代输入法框架优麒麟2204 默认安装的是 Fcitx而 Fcitx 和 Fcitx5 是相互冲突的因此安装Fcitx5之前需要先卸载 Fcitx。关于 Fcitx5 的学习文档,推荐 Archlinux 关于 Fcitx5 的 [wiki 文档](https://wiki.archlinux.org/title/Fcitx5_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87))
## 一、卸载 Fcitx 输入法
### **1.首先看看大概装了哪些 Fcitx 输入法组件**
```
$ apt search fcitx | grep 安装
fcitx/jammy,jammy,now 1:4.2.9.8-5 all [已安装]
fcitx-baidupinyin/jammy-partner,now 1.0.1.0 amd64 [已安装]
fcitx-bin/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-config-common/jammy,jammy,now 0.4.10-3 all [已安装]
fcitx-config-gtk/jammy,now 0.4.10-3 amd64 [已安装]
fcitx-data/jammy,jammy,now 1:4.2.9.8-5 all [已安装]
fcitx-frontend-all/jammy,jammy,now 1:4.2.9.8-5 all [已安装]
fcitx-frontend-gtk2/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-frontend-gtk3/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-frontend-qt5/jammy,now 1.2.7-1.2build1 amd64 [已安装]
fcitx-googlepinyin/jammy,now 0.1.6-5 amd64 [已安装]
fcitx-libs/jammy,jammy,now 1:4.2.9.8-5 all [已安装,自动]
fcitx-module-cloudpinyin/jammy,now 0.3.7-1 amd64 [已安装]
fcitx-module-dbus/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-module-kimpanel/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-module-lua/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-module-quickphrase-editor5/jammy,now 1.2.7-1.2build1 amd64 [已安装]
fcitx-module-x11/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-modules/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-pinyin/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-table/jammy,now 1:4.2.9.8-5 amd64 [已安装]
fcitx-ui-classic/jammy,now 1:4.2.9.8-5 amd64 [已安装]
libfcitx-config4/jammy,now 1:4.2.9.8-5 amd64 [已安装]
libfcitx-core0/jammy,now 1:4.2.9.8-5 amd64 [已安装]
libfcitx-gclient1/jammy,now 1:4.2.9.8-5 amd64 [已安装]
libfcitx-qt5-1/jammy,now 1.2.7-1.2build1 amd64 [已安装]
libfcitx-qt5-data/jammy,jammy,now 1.2.7-1.2build1 all [已安装]
libfcitx-utils0/jammy,now 1:4.2.9.8-5 amd64 [已安装]
```
### **2.卸载上面所有的包**
```
$ sudo apt remove fcitx-data fcitx-pinyin fcitx-baidupinyin fcitx-googlepinyin fcitx-bin fcitx-libs fcitx-config-common fcitx-frontend-* fcitx-modules libfcitx-*
```
也可以分步删除:
```
$ sudo apt remove fcitx-data # 会删除fcitx fcitx-data fcitx-table sogouimebs
$ sudo apt remove fcitx-pinyin fcitx-baidupinyin fcitx-googlepinyin
$ sudo apt remove fcitx-bin
$ sudo apt remove fcitx-libs
$ sudo apt remove fcitx-config-common # 会删除fcitx-config-common fcitx-config-gtk
$ sudo apt remove fcitx-frontend-* # 会删除fcitx-frontend-all fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-frontend-qt5
$ sudo apt remove fcitx-modules # 会删除: fcitx-module-cloudpinyin fcitx-module-dbus fcitx-module-kimpanel fcitx-module-lua fcitx-module-x11 fcitx-modules fcitx-ui-classic
$ sudo apt remove fcitx-module-quickphrase-editor5
$ sudo apt remove libfcitx-* # 会删除: libfcitx-config4 libfcitx-core0 libfcitx-gclient1 libfcitx-qt5-1 libfcitx-qt5-data libfcitx-utils0
```
## 二、安装 Fcitx5
Fcitx5 输入法框架的软件包主要包括:输入法主体 fcitx5输入法引擎支撑图形界面的组件输入法模块以及输入法配置工具等。
### **1.安装输入法主体**
```
$ sudo apt install fcitx5
```
下面是安装过程中的有关提示信息(发出来的目的是为了更好地理解 Fcitx5 的框架结构):
> 建议安装: fcitx5-chinese-addons fcitx5-frontend-gtk2 kde-config-fcitx5
> 推荐安装: fcitx5-config-qt fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5 fcitx5-module-emoji fcitx5-module-quickphrase fcitx5-module-wayland fcitx5-module-xorg
> 下列【新】软件包将被安装: fcitx5 fcitx5-data fcitx5-modules libfcitx5config6 libfcitx5core7 libfcitx5utils2 libxcb-ewmh2
### **2.安装中文输入法引擎**
`fcitx5-chinese-addons` 是 Fcitx5 的一个中文输入法引擎,它包含了大量中文输入方式:拼音、双拼、五笔拼音、自然码、仓颉、冰蟾全息、二笔等。
```
$ sudo apt install fcitx5-chinese-addons
```
下面是安装过程中的有关提示信息:
> 推荐安装: fcitx5-module-chttrans fcitx5-module-cloudpinyin fcitx5-module-fullwidth fcitx5-module-quickphrase
> 下列【新】软件包将被安装: fcitx5-chinese-addons fcitx5-chinese-addons-bin fcitx5-chinese-addons-data fcitx5-module-pinyinhelper fcitx5-module-punctuation fcitx5-pinyin fcitx5-table libfcitx5-qt-data libfcitx5-qt1 libime-data libime-data-language-model libimecore0 libimepinyin0 libimetable0
### **3.安装输入法对图形界面的支持组件**
```
$ sudo apt install fcitx5-frontend-*
```
下面是安装过程中的有关提示信息:
> 建议安装: libgtk-4-media-gstreamer | libgtk-4-media-ffmpeg
> 推荐安装: libgtk-4-bin
> 下列【新】软件包将被安装: fcitx5-frontend-gtk2 fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5 libcairo-script-interpreter2 libfcitx5gclient2 libgtk-4-1 libgtk-4-common
### **4.安装配置工具**
```
$ sudo apt install fcitx5-config-qt kde-config-fcitx5
```
下面是安装过程中的有关提示信息:
> 推荐安装: libime-bin
> 下列【新】软件包将被安装: fcitx5-config-qt kde-cli-tools kde-cli-tools-data kde-config-fcitx5 libkf5pty-data libkf5pty5 libkf5su-bin libkf5su-data libkf5su5 libkworkspace5-5 qml-module-org-kde-kcm
### **5.安装推荐的输入法模块**
```
$ sudo apt install fcitx5-module-chttrans fcitx5-module-cloudpinyin fcitx5-module-fullwidth fcitx5-module-quickphrase fcitx5-module-emoji fcitx5-module-quickphrase fcitx5-module-wayland fcitx5-module-xorg
```
下面是安装过程中的有关提示信息:
> 将会同时安装下列软件: libmarisa0 libopencc-data libopencc1.1 libxcb-imdkit1 unicode-cldr-core
> 下列【新】软件包将被安装fcitx5-module-chttrans fcitx5-module-cloudpinyin fcitx5-module-emoji fcitx5-module-fullwidth fcitx5-module-quickphrase fcitx5-module-wayland fcitx5-module-xorg libmarisa0 libopencc-data libopencc1.1 libxcb-imdkit1 unicode-cldr-core
如无意外,重启后会自动启动 Fcitx5 输入法了。
## 三、配置Fcitx5 输入法
### **1.安装主题**
安装并选择主题包,可以改善输入法托盘的外观,增加文字输入的舒适感。这里我下载和安装一下 fcitx5-nord 主题主题包来源Archlinux 关于 Fcitx5 的 wiki 文档中的主题介绍),安装命令如下:
```
$ git clone https://github.com/tonyfettes/fcitx5-nord.git # 克隆 fcitx5-nord 主题包到本地
$ cd fcitx5-nord/ # 切换到 fcitx5-nord 主题包目录
$ ls # 查看目录内文件发现有2个主题
LICENSE Nord-Dark Nord-Light README.md
$ cp -r Nord-Dark/ Nord-Light/ ~/.local/share/fcitx5/themes/ # 复制2个主题到 Fcitx5 的主题目录
$ fcitx5-configtool # 配置主题及其他参数
```
配置主题界面如下:
![主题选择](../assets/Fcitx5/Fcitx5主题选择.png)
### **2.安装词库**
安装离线词库后可以快速从词库中进行联想匹配,从而极大地提高输入速度及准确率。
Fcitx5的离线词库一般放在 `~/.local/share/fcitx5/pinyin/dictionaries` 目录,这些离线词库通常命名为 `*.dict`。安装方法也很简单,就是下载离线词库,将其复制到 `~/.local/share/fcitx5/pinyin/dictionaries` 即可(注意:如果找不到 dictionaries 目录则可以自己建立)。
**常用的离线词库:**
- 萌娘百科词库 https://github.com/outloudvi/mw2fcitx
- 维基百科词库 https://github.com/felixonmars/fcitx5-pinyin-zhwiki
从上面2个仓库的 Releases 找到并下载词库,然后复制到词库目录,再查看词库目录应该是类似这样的:
```
$ ls ~/.local/share/fcitx5/pinyin/dictionaries
moegirl.dict zhwiki-20220529.dict
```
重启或重启输入法生效,这时就能体验快速输入某些生僻词汇了。

492
其他/使用KVM虚拟机.md Normal file → Executable file
View File

@ -1,246 +1,246 @@
# <center>使用KVM虚拟机</center>
#### <center>作者ymz316</center>
#### <center>2022-05-12 17:50:00</center>
<br>
KVMKernel-based Virtual Machine是基于内核(内核内建)的虚拟机。它一般由QEMU来配合完成虚拟机的创建虚拟机镜像的后缀名大多为qcow2。
KVM虚拟机安装前须知
>1. KVM本身未模拟任何硬件设备它使用的是硬件提供的虚拟化能力比如(Intel VT-x, AMD-V, ARM virtualization extensions等)因此KVM **需要芯片支持并开启虚拟化技术**(英特尔的 VT 扩展或者 AMD 的 AMD-V 扩展)。
>2. KVM需要由QEMU来配合完成主板、内存及I/O等硬件设备模拟而且还**需要安装一些管理软件包**来达到快速化创建虚拟机的目的。
>3. 虚拟机安装需要使用网络,因此需要先**配置网络信息**,为虚拟机安装提供网络设备支持。
>4. 以上内容准备好之后,就可以**创建虚拟机**了。
### 一、安装KVM的先决条件
**1) 确认是否支持硬件虚拟化(英特尔的 VT 扩展或者 AMD 的 AMD-V 扩展)**
```
$ LC_ALL=C lscpu | grep Virtualization
Virtualization: VT-x
```
或者:
```
$ grep -Eoc '(vmx|svm)' /proc/cpuinfo #或者 egrep -c '(vmx|svm)' /proc/cpuinfo
16
```
如果输出一个大于零的数字(即CPU核心数)表示CPU支持硬件虚拟化输出0表示CPU不支持硬件虚拟化,尝试重启进入BIOS设置中启用VT技术。
注:此处的$是终端提示符,不需要复制
**2)确定服务器是否能够运行硬件加速的KVM虚拟机**
```
$ kvm-ok #如果提示无此命令通过sudo apt install cpu-checker 来安装
INFO: /dev/kvm exists
KVM acceleration can be used
```
注:此处的$是终端提示符,不需要复制
### 二、安装KVM虚拟化管理软件包
**KVM 有关的虚拟化管理软件包**
>**qemu-kvm** 为KVM管理程序提供硬件仿真的软件。20.04需要安装此包22.04好像集成了,不需要安装,待查。
**libvirt**:管理虚拟机和其他虚拟化功能(比如存储管理,网络管理)的软件集合。它包括一个API库一个守护程序libvirtd和一个命令行工具virsh。它为受支持的虚拟机监控程序实现的常用功能提供通用的API。libvirt的主要目标是为各种虚拟化工具提供一套统一可靠的API让上层可以用一种单一的方式来管理多种不同的虚拟化技术,它可以操作包括 KVMvmwareXENHyper-v, LXC 等 Hypervisor。需要通过安装**libvirt-daemon-system**包来将libvirt守护程序作为系统服务运行的配置文件。
**libvirt-clients** :用于管理虚拟化平台的软件,一般情况下在安装libvirt-daemon-system时会自动安装此包。
**virt-manager** :基于 libvirt 的 GUI 工具 (图形用户界面)。
**virtinst** 一组用于创建虚拟机的命令行工具一般情况下在安装virt-manager时会自动安装此包。
**bridge-utils** :用于配置以太网桥的命令行工具。
**ovmf**:虚拟机的UEFI 固件安装后方可是虚拟机系统从uefi启动。
安装命令为:
```
sudo apt install qemu qemu-kvm libvirt-daemon-system virt-manager bridge-utils ovmf
```
### 三、客户机网络配置
客户机安装完成后需要为其设置网络接口以便和主机网络客户机之间的网络通信。而linux系统安装时就需要使用网络通信因此得提前设置客户机的网络连接。
KVM 客户机网络连接有两种方式:
- **用户网络User Networking**也就是NAT方式。让虚拟机访问主机、互联网或本地网络上的资源的简单方法但是不能从网络或其他的客户机访问客户机性能上也需要大的调整。
- **虚拟网桥Virtual Bridge**也就是Bridge(桥接)方式。Bridge方式可以使虚拟机成为网络中具有独立IP的主机因此客户机和子网里面的机器能够互相通信。这种方式要比用户网络复杂一些但是设置好后客户机与互联网客户机与主机之间的通信都很容易。
以NAT为例进行学习
终端输入`sudo virt-manager`或者在开始菜单点击"虚拟系统管理器",打开virt-manager图形界面。
![](../assets/KVM/virtmanager.png)
点击"编辑"-"连接详情"进入网络配置界面并选择虚拟网络这里默认有一个default的NAT网络连接设备名为virbr0网段为192.168.122.0/24。
![](../assets/KVM/net.png)
可以点击下方的加号来创建一个新的网络连接这里我们创建一个名为network的网络连接,forward to 选择"任意物理设备"(将创建一个网卡设备virbr1),网段为192.168.100.0/24设置好DHCP点击完成即可配置成功。下一步在虚拟机安装过程中可以设置为这个网络连接方式。
![](../assets/KVM/addnet.png)
### 四、客户虚拟机安装
虚拟机安装可以通过virt-manager图形化工具安装也可通过qemu-img命令来安装。
**1. virt-manager图形化工具安装**
终端输入`sudo virt-manager`或者在开始菜单点击"虚拟系统管理器",打开virt-manager图形界面。
![](../assets/KVM/virtmanager.png)
1) 点击"文件"-"创建虚拟机" ,或者点击创建虚拟机的图标,然后选择本地安装介质,点击前进。
>注意:如果我们已经在网上或者别处拷贝了一个已经安装好系统的虚拟机磁盘镜像,则可以选择"导入现有磁盘映像"。
![](../assets/KVM/addstep1.png)
2) 选择安装源(ISO)和虚拟机系统格式(如red hat Linux 8之类的),点击前进
![](../assets/KVM/addstep2.png)
3) 输入虚拟机内存cpu核心数(不能大于主机核心数),点击前进
![](../assets/KVM/addstep3.png)
4) 选择磁盘镜像(虚拟机安装也要有虚拟的磁盘吧)这里我们创建一个40G的磁盘点击前进
> 注意:这里默认的磁盘镜像路径是/var/lib/libirt/images/*.qcow2, 而如果我们需要使用一个已经创建好的磁盘镜像或者需要自定义磁盘镜像的存储位置,则可以选择“选择或创建自定义存储”
![](../assets/KVM/addstep4.png)
5) 输入虚拟机实例名称,选择网络,点击前进。
> 如果不懂如何选择网络,可能要补习一下虚拟机网络的几种模式(NAT,网桥only_host)的知识了。
![](../assets/KVM/addstep5.png)
6) 此时,就进入了虚拟机系统的安装环节了
![](../assets/KVM/ossetup.png)
若提示“连接到图形控制台出错:Error opening Spice console, SpiceClientGtk missing”的错误可试着通过如下命令解决
```
hollowman@hollowman-F117:~$ apt search SpiceClientGtk
正在排序... 完成
全文搜索... 完成
gir1.2-spiceclientgtk-3.0/focal 0.37-2fakesync1 amd64
GTK3 widget for SPICE clients (GObject-Introspection)
hollowman@hollowman-F117:~$ sudo apt install gir1.2-spiceclientgtk-3.0
```
**2. 命令安装**
**1) 创建虚拟机磁盘镜像**
```
$ qemu-img create -f qcow2 diskname.qcow2 40G
$ ll -h diskname.qcow2 #查看镜像在主机系统上的大小虽然有40G磁盘但因为没有数据实际只占用196K
-rwxrwxrwx 1 hollowman hollowman 196K 11月 24 13:30 diskname.qcow2*
```
**2) 安装虚拟机(virt-install命令)**
a. 从ISO镜像中创建虚拟机
```
# virt-install --name 客户机实例名 --memory 内存大小 --vcpus cpu核心数 --disk path=磁盘镜像路径 --cdrom=安装介质路径 --network 网络接口 --cdrom=安装介质路径
#例如
$ virt-install --name rhel8 --memory 2048 --vcpus 2 --disk path=./rhel8.qcow2 --cdrom=/media/hollowman/软件/ISO/rhel-8.0-x86_64-linuxprobe.com.iso --network bridge=virbr1
```
b. 用已有的qcow磁盘镜像创建虚拟机
```
# virt-install --name 客户机实例名 --memory 内存大小 --vcpus cpu核心数 --disk path=磁盘镜像路径 --network 网络接口 --import
# 例如:
$sudo virt-install --name openEuler2109 --memory 2048 --vcpus 2 --disk path=./openEuler-21.09-x86_64.qcow2 --network bridge=virbr1 --import
```
virt-install有关选项说明可通过命令查看
```
$ virt-install help #下面为部分摘抄
通用选项:
-n NAME, --name NAME 客户机实例名称
--memory MEMORY 客户机内存大小. 例如:--memory 1024 (in MiB)
--vcpus VCPUS 客户机cpu核心数(不大于主机核心数). 如:--vcpus 5
安装方法选项:
--cdrom CDROM 光驱安装介质
--import 在已有的磁盘镜像中构建客户机
OS options:
--os-variant OS_VARIANT 指定操作系统类型。例如rhl8.0 ,可通过'osinfo-query'命令来查看所有操作系统类型
设备选项:
--disk DISK 指定存储的各种选项。例如:--disk size=10 (在默认位置创建 10GiB 镜像)
-w NETWORK, --network NETWORK 配置客户机网络接口。例如:--network bridge=mybr0
```
### 五、虚拟机管理过程发现的问题处理
> 1.qcow2镜像占用空间过大
如果通过virt-manager图形化界面来创建一个40G的磁盘镜像时发现在主机上的存储空间却是40G这么大的占用空间是不是有强迫症我们可以通过命令压缩来进行处理。
如下我们查看virt-manager创建的磁盘镜像信息
```
$ qemu-img info rhel8.qcow2 #查看磁盘镜像信息
image: rhel8.qcow2
file format: qcow2
virtual size: 40 GiB (42949672960 bytes) #虚拟磁盘大小
disk size: 196 KiB #此为镜像实际占用空间
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
$ ll -h rhel8.qcow2 #查看镜像在主机系统上的存储空间(这是通过virt-manager创建的磁盘)
-rwxrwxrwx 1 hollowman hollowman 40G 11月 24 13:48 rhel8.qcow2*
```
输入压缩命令:
```
$ qemu-img convert -O qcow2 rhel8.qcow2 rhel8_new.qcow2
$ ll -h rhel8_new.qcow2
-rwxrwxrwx 1 hollowman hollowman 196K 11月 24 13:52 rhel8_new.qcow2*
```
可以发现存储空间变回196K了。
> 2.主机系统挂载qcow2磁盘镜像
qcow2本质上是一个虚拟的磁盘镜像因此可在主机系统中通过挂载磁盘镜像分区的方式来读取该磁盘镜像分区的内容(如果是虚拟机磁盘,则需要在关闭虚拟机的情况下操作)。
> 3. 创建虚拟机时,出现'libvirt-qemu' 用户没有搜索目相关录权限的提示,创建不成功。
查看并修改配置文件`/etc/libvirt/qemu.conf`,找到 `# user = "root"`这一行并将注释去掉重启libvirtd服务
```
$ sudo pluma /etc/libvirt/qemu.conf #修改下面这一行
user = "root"
$ systemctl restart libvirtd
```
> 4.打开虚拟机时出现“连接到图形控制台出错Error opening SPICE console: Namespace SpiceClientGtk not available”
```
sudo apt install spice-client-gtk gir1.2-spiceclientgtk-3.0
```
# <center>使用KVM虚拟机</center>
#### <center>作者ymz316</center>
#### <center>2022-05-12 17:50:00</center>
<br>
KVMKernel-based Virtual Machine是基于内核(内核内建)的虚拟机。它一般由QEMU来配合完成虚拟机的创建虚拟机镜像的后缀名大多为qcow2。
KVM虚拟机安装前须知
>1. KVM本身未模拟任何硬件设备它使用的是硬件提供的虚拟化能力比如(Intel VT-x, AMD-V, ARM virtualization extensions等)因此KVM **需要芯片支持并开启虚拟化技术**(英特尔的 VT 扩展或者 AMD 的 AMD-V 扩展)。
>2. KVM需要由QEMU来配合完成主板、内存及I/O等硬件设备模拟而且还**需要安装一些管理软件包**来达到快速化创建虚拟机的目的。
>3. 虚拟机安装需要使用网络,因此需要先**配置网络信息**,为虚拟机安装提供网络设备支持。
>4. 以上内容准备好之后,就可以**创建虚拟机**了。
### 一、安装KVM的先决条件
**1) 确认是否支持硬件虚拟化(英特尔的 VT 扩展或者 AMD 的 AMD-V 扩展)**
```
$ LC_ALL=C lscpu | grep Virtualization
Virtualization: VT-x
```
或者:
```
$ grep -Eoc '(vmx|svm)' /proc/cpuinfo #或者 egrep -c '(vmx|svm)' /proc/cpuinfo
16
```
如果输出一个大于零的数字(即CPU核心数)表示CPU支持硬件虚拟化输出0表示CPU不支持硬件虚拟化,尝试重启进入BIOS设置中启用VT技术。
注:此处的$是终端提示符,不需要复制
**2)确定服务器是否能够运行硬件加速的KVM虚拟机**
```
$ kvm-ok #如果提示无此命令通过sudo apt install cpu-checker 来安装
INFO: /dev/kvm exists
KVM acceleration can be used
```
注:此处的$是终端提示符,不需要复制
### 二、安装KVM虚拟化管理软件包
**KVM 有关的虚拟化管理软件包**
>**qemu-kvm** 为KVM管理程序提供硬件仿真的软件。20.04需要安装此包22.04好像集成了,不需要安装,待查。
**libvirt**:管理虚拟机和其他虚拟化功能(比如存储管理,网络管理)的软件集合。它包括一个API库一个守护程序libvirtd和一个命令行工具virsh。它为受支持的虚拟机监控程序实现的常用功能提供通用的API。libvirt的主要目标是为各种虚拟化工具提供一套统一可靠的API让上层可以用一种单一的方式来管理多种不同的虚拟化技术,它可以操作包括 KVMvmwareXENHyper-v, LXC 等 Hypervisor。需要通过安装**libvirt-daemon-system**包来将libvirt守护程序作为系统服务运行的配置文件。
**libvirt-clients** :用于管理虚拟化平台的软件,一般情况下在安装libvirt-daemon-system时会自动安装此包。
**virt-manager** :基于 libvirt 的 GUI 工具 (图形用户界面)。
**virtinst** 一组用于创建虚拟机的命令行工具一般情况下在安装virt-manager时会自动安装此包。
**bridge-utils** :用于配置以太网桥的命令行工具。
**ovmf**:虚拟机的UEFI 固件安装后方可是虚拟机系统从uefi启动。
安装命令为:
```
sudo apt install qemu qemu-kvm libvirt-daemon-system virt-manager bridge-utils ovmf
```
### 三、客户机网络配置
客户机安装完成后需要为其设置网络接口以便和主机网络客户机之间的网络通信。而linux系统安装时就需要使用网络通信因此得提前设置客户机的网络连接。
KVM 客户机网络连接有两种方式:
- **用户网络User Networking**也就是NAT方式。让虚拟机访问主机、互联网或本地网络上的资源的简单方法但是不能从网络或其他的客户机访问客户机性能上也需要大的调整。
- **虚拟网桥Virtual Bridge**也就是Bridge(桥接)方式。Bridge方式可以使虚拟机成为网络中具有独立IP的主机因此客户机和子网里面的机器能够互相通信。这种方式要比用户网络复杂一些但是设置好后客户机与互联网客户机与主机之间的通信都很容易。
以NAT为例进行学习
终端输入`sudo virt-manager`或者在开始菜单点击"虚拟系统管理器",打开virt-manager图形界面。
![](../assets/KVM/virtmanager.png)
点击"编辑"-"连接详情"进入网络配置界面并选择虚拟网络这里默认有一个default的NAT网络连接设备名为virbr0网段为192.168.122.0/24。
![](../assets/KVM/net.png)
可以点击下方的加号来创建一个新的网络连接这里我们创建一个名为network的网络连接,forward to 选择"任意物理设备"(将创建一个网卡设备virbr1),网段为192.168.100.0/24设置好DHCP点击完成即可配置成功。下一步在虚拟机安装过程中可以设置为这个网络连接方式。
![](../assets/KVM/addnet.png)
### 四、客户虚拟机安装
虚拟机安装可以通过virt-manager图形化工具安装也可通过qemu-img命令来安装。
**1. virt-manager图形化工具安装**
终端输入`sudo virt-manager`或者在开始菜单点击"虚拟系统管理器",打开virt-manager图形界面。
![](../assets/KVM/virtmanager.png)
1) 点击"文件"-"创建虚拟机" ,或者点击创建虚拟机的图标,然后选择本地安装介质,点击前进。
>注意:如果我们已经在网上或者别处拷贝了一个已经安装好系统的虚拟机磁盘镜像,则可以选择"导入现有磁盘映像"。
![](../assets/KVM/addstep1.png)
2) 选择安装源(ISO)和虚拟机系统格式(如red hat Linux 8之类的),点击前进
![](../assets/KVM/addstep2.png)
3) 输入虚拟机内存cpu核心数(不能大于主机核心数),点击前进
![](../assets/KVM/addstep3.png)
4) 选择磁盘镜像(虚拟机安装也要有虚拟的磁盘吧)这里我们创建一个40G的磁盘点击前进
> 注意:这里默认的磁盘镜像路径是/var/lib/libirt/images/*.qcow2, 而如果我们需要使用一个已经创建好的磁盘镜像或者需要自定义磁盘镜像的存储位置,则可以选择“选择或创建自定义存储”
![](../assets/KVM/addstep4.png)
5) 输入虚拟机实例名称,选择网络,点击前进。
> 如果不懂如何选择网络,可能要补习一下虚拟机网络的几种模式(NAT,网桥only_host)的知识了。
![](../assets/KVM/addstep5.png)
6) 此时,就进入了虚拟机系统的安装环节了
![](../assets/KVM/ossetup.png)
若提示“连接到图形控制台出错:Error opening Spice console, SpiceClientGtk missing”的错误可试着通过如下命令解决
```
hollowman@hollowman-F117:~$ apt search SpiceClientGtk
正在排序... 完成
全文搜索... 完成
gir1.2-spiceclientgtk-3.0/focal 0.37-2fakesync1 amd64
GTK3 widget for SPICE clients (GObject-Introspection)
hollowman@hollowman-F117:~$ sudo apt install gir1.2-spiceclientgtk-3.0
```
**2. 命令安装**
**1) 创建虚拟机磁盘镜像**
```
$ qemu-img create -f qcow2 diskname.qcow2 40G
$ ll -h diskname.qcow2 #查看镜像在主机系统上的大小虽然有40G磁盘但因为没有数据实际只占用196K
-rwxrwxrwx 1 hollowman hollowman 196K 11月 24 13:30 diskname.qcow2*
```
**2) 安装虚拟机(virt-install命令)**
a. 从ISO镜像中创建虚拟机
```
# virt-install --name 客户机实例名 --memory 内存大小 --vcpus cpu核心数 --disk path=磁盘镜像路径 --cdrom=安装介质路径 --network 网络接口 --cdrom=安装介质路径
#例如
$ virt-install --name rhel8 --memory 2048 --vcpus 2 --disk path=./rhel8.qcow2 --cdrom=/media/hollowman/软件/ISO/rhel-8.0-x86_64-linuxprobe.com.iso --network bridge=virbr1
```
b. 用已有的qcow磁盘镜像创建虚拟机
```
# virt-install --name 客户机实例名 --memory 内存大小 --vcpus cpu核心数 --disk path=磁盘镜像路径 --network 网络接口 --import
# 例如:
$sudo virt-install --name openEuler2109 --memory 2048 --vcpus 2 --disk path=./openEuler-21.09-x86_64.qcow2 --network bridge=virbr1 --import
```
virt-install有关选项说明可通过命令查看
```
$ virt-install help #下面为部分摘抄
通用选项:
-n NAME, --name NAME 客户机实例名称
--memory MEMORY 客户机内存大小. 例如:--memory 1024 (in MiB)
--vcpus VCPUS 客户机cpu核心数(不大于主机核心数). 如:--vcpus 5
安装方法选项:
--cdrom CDROM 光驱安装介质
--import 在已有的磁盘镜像中构建客户机
OS options:
--os-variant OS_VARIANT 指定操作系统类型。例如rhl8.0 ,可通过'osinfo-query'命令来查看所有操作系统类型
设备选项:
--disk DISK 指定存储的各种选项。例如:--disk size=10 (在默认位置创建 10GiB 镜像)
-w NETWORK, --network NETWORK 配置客户机网络接口。例如:--network bridge=mybr0
```
### 五、虚拟机管理过程发现的问题处理
> 1.qcow2镜像占用空间过大
如果通过virt-manager图形化界面来创建一个40G的磁盘镜像时发现在主机上的存储空间却是40G这么大的占用空间是不是有强迫症我们可以通过命令压缩来进行处理。
如下我们查看virt-manager创建的磁盘镜像信息
```
$ qemu-img info rhel8.qcow2 #查看磁盘镜像信息
image: rhel8.qcow2
file format: qcow2
virtual size: 40 GiB (42949672960 bytes) #虚拟磁盘大小
disk size: 196 KiB #此为镜像实际占用空间
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
$ ll -h rhel8.qcow2 #查看镜像在主机系统上的存储空间(这是通过virt-manager创建的磁盘)
-rwxrwxrwx 1 hollowman hollowman 40G 11月 24 13:48 rhel8.qcow2*
```
输入压缩命令:
```
$ qemu-img convert -O qcow2 rhel8.qcow2 rhel8_new.qcow2
$ ll -h rhel8_new.qcow2
-rwxrwxrwx 1 hollowman hollowman 196K 11月 24 13:52 rhel8_new.qcow2*
```
可以发现存储空间变回196K了。
> 2.主机系统挂载qcow2磁盘镜像
qcow2本质上是一个虚拟的磁盘镜像因此可在主机系统中通过挂载磁盘镜像分区的方式来读取该磁盘镜像分区的内容(如果是虚拟机磁盘,则需要在关闭虚拟机的情况下操作)。
> 3. 创建虚拟机时,出现'libvirt-qemu' 用户没有搜索目相关录权限的提示,创建不成功。
查看并修改配置文件`/etc/libvirt/qemu.conf`,找到 `# user = "root"`这一行并将注释去掉重启libvirtd服务
```
$ sudo pluma /etc/libvirt/qemu.conf #修改下面这一行
user = "root"
$ systemctl restart libvirtd
```
> 4.打开虚拟机时出现“连接到图形控制台出错Error opening SPICE console: Namespace SpiceClientGtk not available”
```
sudo apt install spice-client-gtk gir1.2-spiceclientgtk-3.0
```

View File

@ -1,91 +1,91 @@
# <center>在双系统Windows 8 、Ubuntu Kylin中如何从Windows 8卸载Ubuntu Kylin</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
![](https://www.ubuntukylin.com/upload/images/q1.jpg)
曾几次介绍如何在Windows 8存在的情况下安装Ubuntu Kylin。但是我们如何从Windows 8中卸载Ubuntu Kylin呢这篇教程适用于任何Linux操作系统如Ubuntu Kylin、Linux Mint、Elementary或任何其他Linux的发行版。
如果您认为卸载Ubuntu Kylin是一个艰巨的任务那完全是错误的因为从Windows中删除Ubuntu Kylin是很容易的。如果你有一个Windows安装盘从Windows中卸载Linux简直就是小菜一碟。
本教程教你当启动了Windows 8/8.1安装盘时如何从Windows 8或Windows 8.1中彻底删除Linux。
从双系统中安全卸载Ubuntu Kylin
如果您有Windows 8安装盘并且已经安装了Windows 8.1操作系统,它的运行过程都是一样的,虽不与Windows 7相同。如果有Windows安装盘就来一起学习下面这个在Windows中删除Ubuntu Kylin Linux操作系统的过程。
从双系统中删除Linux分两部分进行。首先是删除已安装Linux的分区S。由于只删除Linux分区会导致Grub错误所以第二部分是修复Windows启动加载器。
第一部分在Windows中删除Linux分区
第1步登录Windows。按Windows+ R运行diskmgmt.msc命令打开Windows的磁盘管理工具。
![](https://www.ubuntukylin.com/upload/images/q2.jpg)
第2步既然已经安装了Linux就很容易让您通过它的容量大小识别Linux分区。另一个提示可以通过看分区是否无文件系统和驱动器号来识别Linux分区。 Windows分区都标有一个驱动器号如通常在NTFS或FAT文件系统CDE等。
正如您所看到的这有三个Linux分区。
![](https://www.ubuntukylin.com/upload/images/q3.jpg)
第3步选择Linux分区S右击选择“删除卷”选项。
![](https://www.ubuntukylin.com/upload/images/q4.jpg)
它会弹出一个警告,在这里选择“是”。
![](https://www.ubuntukylin.com/upload/images/q5.jpg)
第4步被删除的分区将作为一大块空闲空间。您可以扩展现有分区或创建一个新的Windows分区出来。如果想双启动Linux与Windows建议创建一个新的驱动器或卷或分区随便您怎么称呼它
![](https://www.ubuntukylin.com/upload/images/q6.jpg)
第二部分修复Windows启动加载器
一旦删除Linux分区就需要花时间来修复Windows启动加载器。这里的图片可能有点不清晰因为Ubuntu Kylin登录界面的截屏比Windows简单。
第1步放入Windows 8安装盘重启计算机。在开机时按F10或F12键进入BIOS/ UEFI从硬盘启动。
![](https://www.ubuntukylin.com/upload/images/q7.jpg)
第2步选择“修复计算机”。
![](https://www.ubuntukylin.com/upload/images/q8.jpg)
第3步进入“故障处理”选项。
![](https://www.ubuntukylin.com/upload/images/q9.jpg)
第4步在“故障处理”页面中选择“高级选项”。
![](https://www.ubuntukylin.com/upload/images/q10.jpg)
第5步找到”命令提示符”。
![](https://www.ubuntukylin.com/upload/images/q11.jpg)
第6步在命令行中输入以下命令来修复Windows启动加载器。
bootrec.exe /fixmbr
通常情况下,它运行的时间很短。您甚至不必等它。
![](https://www.ubuntukylin.com/upload/images/q11.jpg)
第7步一旦完成重启计算机这时候从硬盘正常启动进入Windows。如果您仍看到Grub错误请尝试以下步骤。
第8步如果第6步失效尝试在”高级故障排除”选项中的”自动修复”选项。
![](https://www.ubuntukylin.com/upload/images/q13.jpg)
这将需要一点时间来找问题,然后修复它。
![](https://www.ubuntukylin.com/upload/images/q14.jpg)
现在如果您重启应该在Windows中正常就不会看到任何的grub救援错误。
希望这篇技巧文章能帮您从Windows8双系统启动中完全删除Ubuntu Kylin Linux系统。欢迎给UK团队提出任何问题或建议。
# <center>在双系统Windows 8 、Ubuntu Kylin中如何从Windows 8卸载Ubuntu Kylin</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
![](https://www.ubuntukylin.com/upload/images/q1.jpg)
曾几次介绍如何在Windows 8存在的情况下安装Ubuntu Kylin。但是我们如何从Windows 8中卸载Ubuntu Kylin呢这篇教程适用于任何Linux操作系统如Ubuntu Kylin、Linux Mint、Elementary或任何其他Linux的发行版。
如果您认为卸载Ubuntu Kylin是一个艰巨的任务那完全是错误的因为从Windows中删除Ubuntu Kylin是很容易的。如果你有一个Windows安装盘从Windows中卸载Linux简直就是小菜一碟。
本教程教你当启动了Windows 8/8.1安装盘时如何从Windows 8或Windows 8.1中彻底删除Linux。
从双系统中安全卸载Ubuntu Kylin
如果您有Windows 8安装盘并且已经安装了Windows 8.1操作系统,它的运行过程都是一样的,虽不与Windows 7相同。如果有Windows安装盘就来一起学习下面这个在Windows中删除Ubuntu Kylin Linux操作系统的过程。
从双系统中删除Linux分两部分进行。首先是删除已安装Linux的分区S。由于只删除Linux分区会导致Grub错误所以第二部分是修复Windows启动加载器。
第一部分在Windows中删除Linux分区
第1步登录Windows。按Windows+ R运行diskmgmt.msc命令打开Windows的磁盘管理工具。
![](https://www.ubuntukylin.com/upload/images/q2.jpg)
第2步既然已经安装了Linux就很容易让您通过它的容量大小识别Linux分区。另一个提示可以通过看分区是否无文件系统和驱动器号来识别Linux分区。 Windows分区都标有一个驱动器号如通常在NTFS或FAT文件系统CDE等。
正如您所看到的这有三个Linux分区。
![](https://www.ubuntukylin.com/upload/images/q3.jpg)
第3步选择Linux分区S右击选择“删除卷”选项。
![](https://www.ubuntukylin.com/upload/images/q4.jpg)
它会弹出一个警告,在这里选择“是”。
![](https://www.ubuntukylin.com/upload/images/q5.jpg)
第4步被删除的分区将作为一大块空闲空间。您可以扩展现有分区或创建一个新的Windows分区出来。如果想双启动Linux与Windows建议创建一个新的驱动器或卷或分区随便您怎么称呼它
![](https://www.ubuntukylin.com/upload/images/q6.jpg)
第二部分修复Windows启动加载器
一旦删除Linux分区就需要花时间来修复Windows启动加载器。这里的图片可能有点不清晰因为Ubuntu Kylin登录界面的截屏比Windows简单。
第1步放入Windows 8安装盘重启计算机。在开机时按F10或F12键进入BIOS/ UEFI从硬盘启动。
![](https://www.ubuntukylin.com/upload/images/q7.jpg)
第2步选择“修复计算机”。
![](https://www.ubuntukylin.com/upload/images/q8.jpg)
第3步进入“故障处理”选项。
![](https://www.ubuntukylin.com/upload/images/q9.jpg)
第4步在“故障处理”页面中选择“高级选项”。
![](https://www.ubuntukylin.com/upload/images/q10.jpg)
第5步找到”命令提示符”。
![](https://www.ubuntukylin.com/upload/images/q11.jpg)
第6步在命令行中输入以下命令来修复Windows启动加载器。
bootrec.exe /fixmbr
通常情况下,它运行的时间很短。您甚至不必等它。
![](https://www.ubuntukylin.com/upload/images/q11.jpg)
第7步一旦完成重启计算机这时候从硬盘正常启动进入Windows。如果您仍看到Grub错误请尝试以下步骤。
第8步如果第6步失效尝试在”高级故障排除”选项中的”自动修复”选项。
![](https://www.ubuntukylin.com/upload/images/q13.jpg)
这将需要一点时间来找问题,然后修复它。
![](https://www.ubuntukylin.com/upload/images/q14.jpg)
现在如果您重启应该在Windows中正常就不会看到任何的grub救援错误。
希望这篇技巧文章能帮您从Windows8双系统启动中完全删除Ubuntu Kylin Linux系统。欢迎给UK团队提出任何问题或建议。

58
其他/如何在grub添加启动参数.md Normal file → Executable file
View File

@ -1,29 +1,29 @@
# <center>如何在grub添加启动参数</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
## 如何在grub添加启动参数
对于grub2ubuntu给了一个官方的配置文件/etc/default/grub。大部分情况下grub2的设置都可以在这个文件中搞定而且这个文件结构也比较简单修改起来也容易。完全没有必要直接改/boot/grub/grub.cfg或者/etc/grub.d/下的文件。
修改/etc/default/grub只需简单一个命令sudo vim /etc/default/grub
下面是系统默认的内容,以及最常用的修改菜单显示时间和默认操作系统的方法:
#If you change this file, run 'update-grub' afterwards to update
#/boot/grub/grub.cfg.
GRUB_DEFAULT=0 #将0改为saved可让grub记住上次启动时选择的系统
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT="5" #显示启动选择菜单的时间
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
修改完成后执行以下命令:
$ sudo apt-get install grub2-common //没有 update-grub命令时,先运行这个安装命令
$ sudo update-grub //生成grub的配置文件
即可。
# <center>如何在grub添加启动参数</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
## 如何在grub添加启动参数
对于grub2ubuntu给了一个官方的配置文件/etc/default/grub。大部分情况下grub2的设置都可以在这个文件中搞定而且这个文件结构也比较简单修改起来也容易。完全没有必要直接改/boot/grub/grub.cfg或者/etc/grub.d/下的文件。
修改/etc/default/grub只需简单一个命令sudo vim /etc/default/grub
下面是系统默认的内容,以及最常用的修改菜单显示时间和默认操作系统的方法:
#If you change this file, run 'update-grub' afterwards to update
#/boot/grub/grub.cfg.
GRUB_DEFAULT=0 #将0改为saved可让grub记住上次启动时选择的系统
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT="5" #显示启动选择菜单的时间
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
修改完成后执行以下命令:
$ sudo apt-get install grub2-common //没有 update-grub命令时,先运行这个安装命令
$ sudo update-grub //生成grub的配置文件
即可。

98
其他/如何扩展根分区.md Normal file → Executable file
View File

@ -1,49 +1,49 @@
# <center>如何扩展根分区</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
## 说明
修改根分区其实不难,只是时间可能比较长,最主要的修改有两个,/etc/fstab和引导引导可以用 sudo update-grub 来更新fstab则需要自己根据情况来修复截图我会用16.04修改17.04的根分区修改16.04的根分区时间太长需要用麒麟的启动盘版本无所谓启动电脑这里是把16.04当做启动盘启动之后的系统来用,需要说明的一点是,有的设备文件是不同的比如,这里是单硬盘双系统,你的可能是双硬盘双系统,不要全按照文中设备文件来写,文章尽量的描述应该找的分区特征,大家根据实际情况修改,文章会尽量啰嗦的写清楚,宁可多说不能漏说,在这里漏了你的电脑可能就开不了机,所以最好把这个读完再操作.
1. 首先查看自己的根分区在哪个分区上打开gparted就可以看到了这是我在17.04下截的图 [图1] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832fjg2dqvxgedddg8d.png),可以看到根分区所在的地方时/dev/sda7那么sda7就是我们要扩大的分区记住分区号码就可以了因为sda可能会更改。 然后双系统的换到另一个Linux或者用麒麟启动盘启动电脑然后打开gparted如果发现打开的磁盘没有自己要修改的分区可以点击右上角切换磁盘但是切换磁盘找到自己的分区号以后下边所有的分区操作都是以你新找到的分区进行操作的你只要把sda7替换成你自己的分区就可以。[图2] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832r3yqn8cq2cwq7ccv.png)
2. 如图17.04装在了/dev/sda7,所以我可以切sda12或者sda8我选择把/dev/sda12的分区切出来5G这里是实验大家可以根据自己的需要修改切前边还是切后边都可以。这是无损的切记要修改的分区不能挂载。
注意:所有要修改的分区都不能挂载,已经挂载的可以在分区上右键选择卸载,不修改分区的是无所谓的,已挂载的分区前会出现一个钥匙,就像我的/dev/sda1那个一样。
首先从/dev/sda7前边或者后边的分区切出来一部分我切的是前边的sda12。[图3] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832sv6vdz4c3ndnkgrt.png)
[图4] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832q0oubktydhmtthdd.png) [图5] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832wx6xv6xc6zvf5w5e.png)。
3. 因为我要在分区之后切出来5GB的空间所以在之后的空余空间输入5120如果希望在分区前边切出来空余的空间就只修改之前的空余空间但是不推荐修改之前的空余空间分区数据少的话还好数据多的话最后修改大小的时候会很耗时间输入完毕后回车之后点击调整按钮会变成下边这样。[图6] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832gf96nc1ktqzne79t.png)。
4. gparted不会直接操作他会等你点击应用后把你的操作按照顺序执行这是如果执行修改的分区分布下边则是执行的步骤顺序然后同样的方式把sda7扩大这是选择调整sda7之后显示的窗口。[图7] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833wjjofhhujzf22hya.png).
5. 我们可以拖动前边的箭头拖动到最前边之后点击修改然后会弹出一个窗口提示可能无法启动这个没事但是Windows我好像没试过点击确定之后是这样的 [图8] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833avyh9wffjd9wwify.png)。
6. 然后点击上边的应用,就会按照你的步骤顺序来执行操作,有的操作是比较浪费时间的,所以有时候是需要等待的,在应用前边的是撤销,做错了可以用这个撤销掉,所以最好在应用前检查下 [图9] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833i5njn1nnn2kqk9ya.png)。
7. 点击应用后会出现个应用操作到设备,点击应用即可,然后会出现具体的操作步骤 [图10] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833x15pvso2ja92c9cf.png).
8. 在分区后边缩小分区比较快,如果在分区前边缩小,会移动整个分区的数据,速度的话,你自己想想,扩大分区倒是不用太长时间,这是我扩大之后的分区 [图11] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833wajhlg5d53uml3o3.png)。
9. 然后打开文件管理进入sda7所在的挂载目录右键在此打开终端表述可能不同意思就是在这个地方打开一个终端这是我的终端 [图12] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833o5cco0xtlcb5ztlc.png)。
10. 终端默认都会显示当前的所在路径比如现在我的终端是在/media/root/17.04打开的,这个路径如果是用绝对路径挂载的话需要用到,具体的路径可以在自己的终端上查看,这里是相对路径是用不到的然后执行三条类似于新建挂载点的命令。
sudo mount --rbind /dev dev
sudo mount --rbind /proc proc
sudo mount --rbind /sys sys
注意这是boot没有单独分区的情况如果单独分区了还需要再挂载boot分区到boot目录
假设boot分区在/dev/sda3
sudo mount /dev/sda3 boot
如果是efi还需要再挂载efi分区假设efi分区在/dev/sda2
sudo mount /dev/sda2 boot/efi
然后执行
sudo chroot .
注意:最后是有一个英文状态下的点的。
此时你的用户会变成root目录会变成根目录也就是/ [图13] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833wmpko7a72mpqyohm.png)
11. 然后在这个终端执行 update-grub [图14] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833i6ufr1bs6pussrs3.png)
12. 这样引导就修复完成了
注意此处针对的是单系统的引导多Linux系统的引导最好再用主引导来修复第三方引导就只能自己修复了之后还有最最重要的一步修改fstab不修改fstab的话虽然能启动内核但是是不能挂载根分区的也就不能顺利启动系统。
进入17.04所在分区的etc目录然后打开终端用管理员权限编辑fstab注意不是你现在使用的系统是之前调整的分区那里的目录
输入 sudo gedit fstab
我们主要修改的是圈住的部分那里是根分区的UUID因为我们修改了分区所以这里可能会被改变我们需要手动修改下如果对比没有变化的话就可以不用修改 [图15] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833p99llub5l542br2b.png)。
13. 打开gparted
在17.04所在的分区右键选择最底下的“信息”弹出来这个我们只要复制圈住的部分就是UUID那里就可以了快捷键Ctrl+C如果右键没有复制的话。 [图16](https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833brgaojpzaj8xgjko.png)。 这里分区的UUID没有被改变我们可以不修改如果发现gparted的UUID和fstab里边的不同那么就把gparted里边的UUID替换到fstab里保存一下然后就可以开机了。
本文撰写过程中参考了以下文章:
[https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=191476](https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=191476)
# <center>如何扩展根分区</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
## 说明
修改根分区其实不难,只是时间可能比较长,最主要的修改有两个,/etc/fstab和引导引导可以用 sudo update-grub 来更新fstab则需要自己根据情况来修复截图我会用16.04修改17.04的根分区修改16.04的根分区时间太长需要用麒麟的启动盘版本无所谓启动电脑这里是把16.04当做启动盘启动之后的系统来用,需要说明的一点是,有的设备文件是不同的比如,这里是单硬盘双系统,你的可能是双硬盘双系统,不要全按照文中设备文件来写,文章尽量的描述应该找的分区特征,大家根据实际情况修改,文章会尽量啰嗦的写清楚,宁可多说不能漏说,在这里漏了你的电脑可能就开不了机,所以最好把这个读完再操作.
1. 首先查看自己的根分区在哪个分区上打开gparted就可以看到了这是我在17.04下截的图 [图1] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832fjg2dqvxgedddg8d.png),可以看到根分区所在的地方时/dev/sda7那么sda7就是我们要扩大的分区记住分区号码就可以了因为sda可能会更改。 然后双系统的换到另一个Linux或者用麒麟启动盘启动电脑然后打开gparted如果发现打开的磁盘没有自己要修改的分区可以点击右上角切换磁盘但是切换磁盘找到自己的分区号以后下边所有的分区操作都是以你新找到的分区进行操作的你只要把sda7替换成你自己的分区就可以。[图2] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832r3yqn8cq2cwq7ccv.png)
2. 如图17.04装在了/dev/sda7,所以我可以切sda12或者sda8我选择把/dev/sda12的分区切出来5G这里是实验大家可以根据自己的需要修改切前边还是切后边都可以。这是无损的切记要修改的分区不能挂载。
注意:所有要修改的分区都不能挂载,已经挂载的可以在分区上右键选择卸载,不修改分区的是无所谓的,已挂载的分区前会出现一个钥匙,就像我的/dev/sda1那个一样。
首先从/dev/sda7前边或者后边的分区切出来一部分我切的是前边的sda12。[图3] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832sv6vdz4c3ndnkgrt.png)
[图4] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832q0oubktydhmtthdd.png) [图5] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832wx6xv6xc6zvf5w5e.png)。
3. 因为我要在分区之后切出来5GB的空间所以在之后的空余空间输入5120如果希望在分区前边切出来空余的空间就只修改之前的空余空间但是不推荐修改之前的空余空间分区数据少的话还好数据多的话最后修改大小的时候会很耗时间输入完毕后回车之后点击调整按钮会变成下边这样。[图6] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114832gf96nc1ktqzne79t.png)。
4. gparted不会直接操作他会等你点击应用后把你的操作按照顺序执行这是如果执行修改的分区分布下边则是执行的步骤顺序然后同样的方式把sda7扩大这是选择调整sda7之后显示的窗口。[图7] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833wjjofhhujzf22hya.png).
5. 我们可以拖动前边的箭头拖动到最前边之后点击修改然后会弹出一个窗口提示可能无法启动这个没事但是Windows我好像没试过点击确定之后是这样的 [图8] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833avyh9wffjd9wwify.png)。
6. 然后点击上边的应用,就会按照你的步骤顺序来执行操作,有的操作是比较浪费时间的,所以有时候是需要等待的,在应用前边的是撤销,做错了可以用这个撤销掉,所以最好在应用前检查下 [图9] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833i5njn1nnn2kqk9ya.png)。
7. 点击应用后会出现个应用操作到设备,点击应用即可,然后会出现具体的操作步骤 [图10] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833x15pvso2ja92c9cf.png).
8. 在分区后边缩小分区比较快,如果在分区前边缩小,会移动整个分区的数据,速度的话,你自己想想,扩大分区倒是不用太长时间,这是我扩大之后的分区 [图11] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833wajhlg5d53uml3o3.png)。
9. 然后打开文件管理进入sda7所在的挂载目录右键在此打开终端表述可能不同意思就是在这个地方打开一个终端这是我的终端 [图12] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833o5cco0xtlcb5ztlc.png)。
10. 终端默认都会显示当前的所在路径比如现在我的终端是在/media/root/17.04打开的,这个路径如果是用绝对路径挂载的话需要用到,具体的路径可以在自己的终端上查看,这里是相对路径是用不到的然后执行三条类似于新建挂载点的命令。
sudo mount --rbind /dev dev
sudo mount --rbind /proc proc
sudo mount --rbind /sys sys
注意这是boot没有单独分区的情况如果单独分区了还需要再挂载boot分区到boot目录
假设boot分区在/dev/sda3
sudo mount /dev/sda3 boot
如果是efi还需要再挂载efi分区假设efi分区在/dev/sda2
sudo mount /dev/sda2 boot/efi
然后执行
sudo chroot .
注意:最后是有一个英文状态下的点的。
此时你的用户会变成root目录会变成根目录也就是/ [图13] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833wmpko7a72mpqyohm.png)
11. 然后在这个终端执行 update-grub [图14] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833i6ufr1bs6pussrs3.png)
12. 这样引导就修复完成了
注意此处针对的是单系统的引导多Linux系统的引导最好再用主引导来修复第三方引导就只能自己修复了之后还有最最重要的一步修改fstab不修改fstab的话虽然能启动内核但是是不能挂载根分区的也就不能顺利启动系统。
进入17.04所在分区的etc目录然后打开终端用管理员权限编辑fstab注意不是你现在使用的系统是之前调整的分区那里的目录
输入 sudo gedit fstab
我们主要修改的是圈住的部分那里是根分区的UUID因为我们修改了分区所以这里可能会被改变我们需要手动修改下如果对比没有变化的话就可以不用修改 [图15] (https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833p99llub5l542br2b.png)。
13. 打开gparted
在17.04所在的分区右键选择最底下的“信息”弹出来这个我们只要复制圈住的部分就是UUID那里就可以了快捷键Ctrl+C如果右键没有复制的话。 [图16](https://www.ubuntukylin.com/ukylin/data/attachment/forum/201912/27/114833brgaojpzaj8xgjko.png)。 这里分区的UUID没有被改变我们可以不修改如果发现gparted的UUID和fstab里边的不同那么就把gparted里边的UUID替换到fstab里保存一下然后就可以开机了。
本文撰写过程中参考了以下文章:
[https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=191476](https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=191476)

340
其他/我就是我,原理不一样的snap.md Normal file → Executable file
View File

@ -1,170 +1,170 @@
# <center>我就是我原理不一样的snap</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
**引言**
snap和flatpak都是新一代跨Linux发行版的软件包管理技术上一篇我们简单介绍了flatpak的原理传送门今天我们接着简要介绍snap的安全机制。
### 简介
snap是Canoncial公司提出的新一代linux包管理工具致力于将所有linux发行版上的包格式统一做到“一次打包到处使用”。目前snap已经可以在包括Ubuntu、Fedora、Mint等多个Linux发行版上使用。首先我们来了解下snap相关的各种名词
#### snap
新一代跨Linux发行版的软件包管理技术支持各大主流Linux发行版通过Linux内核安全机制保证用户数据安全彻底解决包依赖关系相关问题并大大简化应用软件的打包工序。snap同时为安装及管理snap包的命令行工具。
#### snapd
管理snap软件包的后台服务。
#### kernel snap
使用snap格式打包的内核包含内核镜像及内核模块。
#### OS snap
使用snap格式重新打包的rootfs包含了运行和管理snap的基本资源当你第一次安装snap时OS snap 首先被安装。
#### snapcraft
将软件打包成snap格式的打包工具集。
#### snappy
原指完全基于snap构建的系统此名称已弃用现统一称为Ubuntu Core即Ubuntu的全snap操作系统有别于传统基于deb包的classic Ubuntu。
### 安全策略
snap应用以沙箱的方式运行。系统通过一些机制限制应用访问资源的权限来实现其安全特性比如通过对内核安全机制AppArmorSeccomp等的配置实现的沙箱和snap文件系统等。开发者不必过多了解系统安全机制的细节。下面简要说明snap使用的部分安全策略。
#### Sandbox
Linux Sandbox 是根据内核中支持的一些安全机制实现的进程访问控制方式。通常通过为进程分配随机uid将进程置于chroot环境和为进程uid配置Capability等方式将进程置于严格受限的一种状态下。snap应用使用这种方式运行在系统为其分配的沙箱环境中。
#### security policy ID
每一个snap应用程序命令都有唯一的security policy ID系统将此ID与命令绑定由此可以为同一snap包内的不同程序配置不同的安全策略。作为系统识别命令的标示当程序安装和运行时系统会根据其Security Policy ID为其分配资源。在沙箱中运行的snap应用之间的通信控制也通过此ID来进行配置。
snap应用的security policy ID的命名规则为snap.name.command
例如hello程序的security policy ID即为snap.hello.hello
#### snap文件系统
snap文件系统被划分为具有只读和读写两种不同权限的区域每个snap应用有其独有的受限文件目录如下图所示
![](https://www.ubuntukylin.com/upload/201708/1501752729610536.png)
可以通过如下方式查看某应用的文件访问权限:
$ snap install hello
hello 2.10 from 'canonical' installed
$ snap run --shell hello.hello
$ env | grep SNAP
SNAP_USER_COMMON=/home/kylin/snap/hello/common
单用户所有版本应用的可写目录
SNAP_LIBRARY_PATH=/var/lib/snapd/lib/gl:/var/lib/snapd/void
增加到LD_LABRARY_PATH的目录
SNAP_COMMON=/var/snap/hello/common
所有用户所有版本应用的可写目录
SNAP_USER_DATA=/home/kylin/snap/hello/20
单用户指定版本应用的可写目录
SNAP_DATA=/var/snap/hello/20
所有用户指定版本应用的可写目录
由此可见一个snap应用具有写权限的目录是极其有限的并且每个snap应用都有其独立的可写目录。snap文件系统对snap应用相关目录的权限配置说明这种方式实现了应用与应用应用与系统之间的隔离。
同时这种方式对snap应用的升级和回滚提供了很好的支持升级时只需将确定版本的相关目录复制到更高版本的对应目录而回退只需删除更高版本的目录。
#### AppArmor
AppArmor是一个强制访问控制系统在内核层面对进程可访问的资源进行控制。 在snap应用程序安装时系统会为其中的每一个命令生成其特有的AppArmor配置文件。内核对可执行程序的Capability限制也可以通过Aparmor来配置。当执行应用程序中的命令时AppArmor机制可保证此命令不会越权访问。 作为一种内核中的安全机制在ubuntu classic系统中也同时支持AppArmor提供的机制。但与classic系统不同snap系统对程序的访问控制更加严格基本做到“只满足程序执行所需的最小权限”。
#### Seccomp
Seccomp是一个内核接口访问过滤器snap应用程序通过其独有的过滤器访问内核接口。在snap应用程序启动之前会自动配置过滤器。Seccomp在snap系统中的作用类似于AppArmor。都是控制应用程序对系统资源的访问。
Snap接口调用
snap应用被严格限制在上面介绍的安全策略下但snap应用之间也需要进行通信比如硬件驱动作为一个snap应用肯定要为使用这个硬件的应用提供接口和服务。下面就简单说明一下snap应用之间的通信机制。
#### 默认安全策略
在没有特殊配置时snap应用使用默认的安全策略其中包含之前提到的snap文件系统中的默认目录访问控制以及以下部分策略
· snap应用安装目录的只读权限。
· 共享内存的读写权限(ie. /dev/shm/snap.SNAP_NAME.*)
· 相同应用的不同进程之间互相发送signal的权限
#### 安装模式
snap通过不同的安装模式提供不同的资源访问控制。
1) Devmode
devmode即为开发模式。使用以下命令将应用安装在此模式下
$ snap install hello --devmode
$ snap list
Name Version Rev Developer Notes
core 16-2.26.9 2381 canonical -
hello 2.10 20 canonical devmode
pc 16.04-0.8 9 canonical -
pc-kernel 4.4.0-83.106 68 canonical -
此模式为应用程序提供完全的访问权限,但会在日志中记录程序的越权行为。
在devmode下snap应用只能访问/snap/下的文件。
2) Classic
此模式将取消所有访问限制,不会在日志中记录越权行为。
在classic模式下snap应用可以访问/’下的文件。
#### Interfaces
除去默认安全策略为其提供的资源外snap应用没有权限访问系统其它资源。若snap应用需要使用系统资源或其它应用程序提供的资源需通过interfaces机制配置接口。interfaces接口分为两种slot(服务提供者)和plug(服务使用者)。
snap应用访问受限资源的示意如下
![](https://www.ubuntukylin.com/upload/201708/1501752836565131.png)
注意操作系统在snap系统中也作为snap应用的形式存在。
如图所示通过配置snap应用的plug和slot即可实现snap应用的互相访问。
查看系统上已经存在的plug和slot
$ snap interfaces
Slot Plug
:account-control -
:alsa -
:autopilot-introspection -
:bluetooth-control -
:browser-support -
:camera -
:classic-support classic
:core-support core:core-support-plug
.........
下面以一个例子说明plug和slot的使用。
name: blue
...
apps:
blue:
command: bin/blue
slots: 【bluez】
以上文件可作为一个蓝牙设备驱动程序的snap包打包控制文件。当此应用被安装时系统将为其分配security policy ID为snap.blue.blue并包含规则当blue启动时为其创建bluez slot。
要在其它应用中使用这个slot提供的功能则打包控制文件如下所示
name: blue-client
...
apps:
blue-client:
command: bin/blue-client
plugs: 【bluez】
同理当此应用被安装时系统将为其分配security policy ID为snap.blue-client.blue-client并包含规则允许此应用与snap.blue.blue通信。同时提供slot的安全规则也会改写为snap.blue.blue允许snap.blue-client.blue-client与其进行通信。
下图说明了snap应用与应用之间在严格的分隔限制下的互相通信。
![](https://www.ubuntukylin.com/upload/201708/1501752890346136.png)
snap系统由snap应用组成包括系统和内核都以snap包的形式出现在系统中。各个snap包之间通过interfaces互相提供服务来完成协同工作同时各个应用又不失自身的独立性。
### 总结
snap系统提供了强大的安全系统。与传统linux发行版相比snap系统中的应用更加独立、安全同时对snap应用权限的配置也更加简单。在日益增长的嵌入式和物联网需求与日益严峻的系统安全形势下snap系统表现出了比传统linux发行版更突出的优势。
# <center>我就是我原理不一样的snap</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
**引言**
snap和flatpak都是新一代跨Linux发行版的软件包管理技术上一篇我们简单介绍了flatpak的原理传送门今天我们接着简要介绍snap的安全机制。
### 简介
snap是Canoncial公司提出的新一代linux包管理工具致力于将所有linux发行版上的包格式统一做到“一次打包到处使用”。目前snap已经可以在包括Ubuntu、Fedora、Mint等多个Linux发行版上使用。首先我们来了解下snap相关的各种名词
#### snap
新一代跨Linux发行版的软件包管理技术支持各大主流Linux发行版通过Linux内核安全机制保证用户数据安全彻底解决包依赖关系相关问题并大大简化应用软件的打包工序。snap同时为安装及管理snap包的命令行工具。
#### snapd
管理snap软件包的后台服务。
#### kernel snap
使用snap格式打包的内核包含内核镜像及内核模块。
#### OS snap
使用snap格式重新打包的rootfs包含了运行和管理snap的基本资源当你第一次安装snap时OS snap 首先被安装。
#### snapcraft
将软件打包成snap格式的打包工具集。
#### snappy
原指完全基于snap构建的系统此名称已弃用现统一称为Ubuntu Core即Ubuntu的全snap操作系统有别于传统基于deb包的classic Ubuntu。
### 安全策略
snap应用以沙箱的方式运行。系统通过一些机制限制应用访问资源的权限来实现其安全特性比如通过对内核安全机制AppArmorSeccomp等的配置实现的沙箱和snap文件系统等。开发者不必过多了解系统安全机制的细节。下面简要说明snap使用的部分安全策略。
#### Sandbox
Linux Sandbox 是根据内核中支持的一些安全机制实现的进程访问控制方式。通常通过为进程分配随机uid将进程置于chroot环境和为进程uid配置Capability等方式将进程置于严格受限的一种状态下。snap应用使用这种方式运行在系统为其分配的沙箱环境中。
#### security policy ID
每一个snap应用程序命令都有唯一的security policy ID系统将此ID与命令绑定由此可以为同一snap包内的不同程序配置不同的安全策略。作为系统识别命令的标示当程序安装和运行时系统会根据其Security Policy ID为其分配资源。在沙箱中运行的snap应用之间的通信控制也通过此ID来进行配置。
snap应用的security policy ID的命名规则为snap.name.command
例如hello程序的security policy ID即为snap.hello.hello
#### snap文件系统
snap文件系统被划分为具有只读和读写两种不同权限的区域每个snap应用有其独有的受限文件目录如下图所示
![](https://www.ubuntukylin.com/upload/201708/1501752729610536.png)
可以通过如下方式查看某应用的文件访问权限:
$ snap install hello
hello 2.10 from 'canonical' installed
$ snap run --shell hello.hello
$ env | grep SNAP
SNAP_USER_COMMON=/home/kylin/snap/hello/common
单用户所有版本应用的可写目录
SNAP_LIBRARY_PATH=/var/lib/snapd/lib/gl:/var/lib/snapd/void
增加到LD_LABRARY_PATH的目录
SNAP_COMMON=/var/snap/hello/common
所有用户所有版本应用的可写目录
SNAP_USER_DATA=/home/kylin/snap/hello/20
单用户指定版本应用的可写目录
SNAP_DATA=/var/snap/hello/20
所有用户指定版本应用的可写目录
由此可见一个snap应用具有写权限的目录是极其有限的并且每个snap应用都有其独立的可写目录。snap文件系统对snap应用相关目录的权限配置说明这种方式实现了应用与应用应用与系统之间的隔离。
同时这种方式对snap应用的升级和回滚提供了很好的支持升级时只需将确定版本的相关目录复制到更高版本的对应目录而回退只需删除更高版本的目录。
#### AppArmor
AppArmor是一个强制访问控制系统在内核层面对进程可访问的资源进行控制。 在snap应用程序安装时系统会为其中的每一个命令生成其特有的AppArmor配置文件。内核对可执行程序的Capability限制也可以通过Aparmor来配置。当执行应用程序中的命令时AppArmor机制可保证此命令不会越权访问。 作为一种内核中的安全机制在ubuntu classic系统中也同时支持AppArmor提供的机制。但与classic系统不同snap系统对程序的访问控制更加严格基本做到“只满足程序执行所需的最小权限”。
#### Seccomp
Seccomp是一个内核接口访问过滤器snap应用程序通过其独有的过滤器访问内核接口。在snap应用程序启动之前会自动配置过滤器。Seccomp在snap系统中的作用类似于AppArmor。都是控制应用程序对系统资源的访问。
Snap接口调用
snap应用被严格限制在上面介绍的安全策略下但snap应用之间也需要进行通信比如硬件驱动作为一个snap应用肯定要为使用这个硬件的应用提供接口和服务。下面就简单说明一下snap应用之间的通信机制。
#### 默认安全策略
在没有特殊配置时snap应用使用默认的安全策略其中包含之前提到的snap文件系统中的默认目录访问控制以及以下部分策略
· snap应用安装目录的只读权限。
· 共享内存的读写权限(ie. /dev/shm/snap.SNAP_NAME.*)
· 相同应用的不同进程之间互相发送signal的权限
#### 安装模式
snap通过不同的安装模式提供不同的资源访问控制。
1) Devmode
devmode即为开发模式。使用以下命令将应用安装在此模式下
$ snap install hello --devmode
$ snap list
Name Version Rev Developer Notes
core 16-2.26.9 2381 canonical -
hello 2.10 20 canonical devmode
pc 16.04-0.8 9 canonical -
pc-kernel 4.4.0-83.106 68 canonical -
此模式为应用程序提供完全的访问权限,但会在日志中记录程序的越权行为。
在devmode下snap应用只能访问/snap/下的文件。
2) Classic
此模式将取消所有访问限制,不会在日志中记录越权行为。
在classic模式下snap应用可以访问/’下的文件。
#### Interfaces
除去默认安全策略为其提供的资源外snap应用没有权限访问系统其它资源。若snap应用需要使用系统资源或其它应用程序提供的资源需通过interfaces机制配置接口。interfaces接口分为两种slot(服务提供者)和plug(服务使用者)。
snap应用访问受限资源的示意如下
![](https://www.ubuntukylin.com/upload/201708/1501752836565131.png)
注意操作系统在snap系统中也作为snap应用的形式存在。
如图所示通过配置snap应用的plug和slot即可实现snap应用的互相访问。
查看系统上已经存在的plug和slot
$ snap interfaces
Slot Plug
:account-control -
:alsa -
:autopilot-introspection -
:bluetooth-control -
:browser-support -
:camera -
:classic-support classic
:core-support core:core-support-plug
.........
下面以一个例子说明plug和slot的使用。
name: blue
...
apps:
blue:
command: bin/blue
slots: 【bluez】
以上文件可作为一个蓝牙设备驱动程序的snap包打包控制文件。当此应用被安装时系统将为其分配security policy ID为snap.blue.blue并包含规则当blue启动时为其创建bluez slot。
要在其它应用中使用这个slot提供的功能则打包控制文件如下所示
name: blue-client
...
apps:
blue-client:
command: bin/blue-client
plugs: 【bluez】
同理当此应用被安装时系统将为其分配security policy ID为snap.blue-client.blue-client并包含规则允许此应用与snap.blue.blue通信。同时提供slot的安全规则也会改写为snap.blue.blue允许snap.blue-client.blue-client与其进行通信。
下图说明了snap应用与应用之间在严格的分隔限制下的互相通信。
![](https://www.ubuntukylin.com/upload/201708/1501752890346136.png)
snap系统由snap应用组成包括系统和内核都以snap包的形式出现在系统中。各个snap包之间通过interfaces互相提供服务来完成协同工作同时各个应用又不失自身的独立性。
### 总结
snap系统提供了强大的安全系统。与传统linux发行版相比snap系统中的应用更加独立、安全同时对snap应用权限的配置也更加简单。在日益增长的嵌入式和物联网需求与日益严峻的系统安全形势下snap系统表现出了比传统linux发行版更突出的优势。

382
其他/无线网卡支持.md Normal file → Executable file
View File

@ -1,191 +1,191 @@
# <center>无线网卡支持</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
## WifiDocs/WirelessCardsSupported(支持的无线卡)
  如果你要购买一台新电脑最好选择带有无线组件的电脑它是为Linux等免费软件设计的。为免费软件设计的网卡能给你提供更好的支持。兼容免费软件的设备也可以开箱即用。
  1.目前[ThinkPenguin.com](http://thinkpenguin.com/)提供了一款采用AR9170芯片组的802.11N USB卡可以保证免费软件的兼容性。此外还有用于笔记本电脑的MiniPCI wifi卡和连接蓝牙无线设备的USB蓝牙适配器。
  2.[Passys](http://www.passys.nl/wirelessnetwork)销售的PCI卡与Linux兼容虽然不兼容免费软件适用于台式电脑。
  3.[维基百科](http://en.wikipedia.org/wiki/Comparison_of_open_source_wireless_drivers)有更多关于哪些芯片组和驱动程序是免费软件兼容的信息。
  4.其他一些卡也兼容Linux但不兼容自由软件。这些通常可以工作但在某些情况下可能无法工作。
  即使您的无线网卡没有为Ubuntu设计的驱动程序您也可以使用[NDISWrapper](http://ndiswrapper.sourceforge.net/)和微软Windows的驱动程序让它工作。但这是以牺牲功能和可靠性为代价的。如果您使用这种方法您的网络连接很可能会很不稳定。
  其他Ubuntu的无线网络维基页面。
  1.[Wifi信息的中心页面](https://help.ubuntu.com/community/WifiDocs)
  2.[WifiDocs/WirelessTroubleShootingGuide(无线故障排除指南)](https://help.ubuntu.com/community/WifiDocs/WirelessTroubleShootingGuide)
  3.[无线故障排除程序](https://help.ubuntu.com/community/WirelessTroubleshootingProcedure)
### 无线卡
  要确定你的无线网卡/芯片组是什么首先要确定它是否是一个独立的设备插在电脑上。如果是独立的USB设备打开终端输入以下内容。
<li style="background: #DCDCDC">lsusb</li>
  并查找 "无线 "等字样,以找到你的卡类型。  
  对于非USB芯片但包含在计算机中的芯片输入以下内容。
<li style="background: #DCDCDC">lspci -v</li>
  并阅读最后一节。
### 按制造商
  社区已经为以下制造商创建了文章。
| 制造商 | 网卡类型 |
| ---- | -------- |
| 3Com | PCMCIA、PCI、PCI、Low、Profile、USB |
| A-Link | USB |
| Accton | PCI |
| Adaptec | PCMCIA |
| Advent | PCMCIA |
| ADDON | USB |
| Airlink101 | PCMCIA、PCI、USB |
| Aptiva | USB |
| Asus | PCMCIA PCI USB |
| Atlantis Land | PCI
| AVM | USB |
| Belkin | PCMCIA PCI ExpressCard/34 USB |
| Blitzz | Cardbus |
| Broadcom | miniPCI |
| Buffalo | PCMCIA PCI USB |
| Cable & Wireless | Cardbus
| Cisco | PCMCIA Cardbus |
| Cnet | PCMCIA PCI |
| Compaq | USB |
| CompUSA/Realtek | PCI |
| Conceptronic | USB
| Dell | USB |
| Dexlan | PCMCIA |
| Digicom | USB |
| Digitus | PCMCIA PCI Unknown USB |
| D-Link | PCMCIA PCI Unknown USB |
| Edimax | PCMCIA PCI Unknown USB |
| eHome | PCMCIA |
| Encore | PCI USB |
| Gigabyte Technology | miniPCI PCI |
| Hawking | PCMCIA PCI Cardbus USB |
| HP | PCI |
| Intel | miniPCI |
| KCorp | Cardbus |
| Level One | PCMCIA |
| Linksys | PCMCIA PCI USB |
| Longshine | PCMCIA |
| Motorola | PCMCIA
| MSI | miniPCI PCI |
| MyEssentials | USB |
| Netcomm | PCI USB |
| Netcore | USB |
| Netgear | PCMCIA PCI USB |
| Novatech | USB |
| Orient | USB |
| Pheenet | USB |
| Proxim/Orinoco | PCMCIA PCI |
| Qualcomm Atheros | miniPCI |
| RealTek | PCI USB |
| RetailPlus | USB |
| Rosewill | USB |
| Sierra | USB |
| Sitecom | PCMCIA PCI |
| SMC | PCMCIA PCI USB |
| Sonnet | PCMCIA |
| Sweex | PCMCIA PCI USB |
| Topcom | PCMCIA |
| TP-Link | PCMCIA PCI USB |
| Trendnet | PCMCIA PCI USB |
| Trust | Unknown |
| US Robotics | PCMCIA USB |
| Veho | USB |
| Westell | USB |
| Zonet | PCMCIA PCI USB |
| Zyxel | PCMCIA PCI USB |
| Various | miniPCI USB |
### 按版本
请参阅本页面。[WifiDocs/WirelessCardsByVersion(无线卡按版本分类)](https://help.ubuntu.com/community/WifiDocs/WirelessCardsByVersion)
### 按网卡
1.[WifiDocs/Device](https://help.ubuntu.com/community/WifiDocs/Device)
2.[WifiDocs/Device/ADDON_ADD-GWP110](https://help.ubuntu.com/community/WifiDocs/Device/ADDON_ADD-GWP110)
3.[WifiDocs/Device/AR5006EG](https://help.ubuntu.com/community/WifiDocs/Device/AR5006EG)
4.[WifiDocs/Device/AR5007](https://help.ubuntu.com/community/WifiDocs/Device/Actiontec)
5.[WifiDocs/Device/Actiontec](https://help.ubuntu.com/community/WifiDocs/Device/Actiontec)
6.[WifiDocs/Device/Airlink101_AWLL3026](https://help.ubuntu.com/community/WifiDocs/Device/Airlink101_AWLL3026)
7.[WifiDocs/Device/AirportExtreme](https://help.ubuntu.com/community/WifiDocs/Device/AirportExtreme)
8.[WifiDocs/Device/Atheros/AR9285](https://help.ubuntu.com/community/WifiDocs/Device/Atheros/AR9285)
9.[WifiDocs/Device/BCM43224 802.11a/b/g/n (rev 01)](https://help.ubuntu.com/community/WifiDocs/Device/BCM43224%20802.11a/b/g/n%20%28rev%2001%29)
10.[WifiDocs/Device/BT_Voyager_1055](https://help.ubuntu.com/community/WifiDocs/Device/BT_Voyager_1055)
11.[WifiDocs/Device/Belkin 300 N F7D2101](https://help.ubuntu.com/community/WifiDocs/Device/Belkin%20300%20N%20F7D2101)
12.[WifiDocs/Device/Belkin F5D8053](https://help.ubuntu.com/community/WifiDocs/Device/Belkin%20F5D8053)
13.[WifiDocs/Device/Belkin_F5D7050_ver_3000_(Ralink_rt73_driver)](https://help.ubuntu.com/community/WifiDocs/Device/Belkin_F5D7050_ver_3000_%28Ralink_rt73_driver%29)
14.[WifiDocs/Device/Belkin_F5D8010](https://help.ubuntu.com/community/WifiDocs/Device/Belkin_F5D8010)
15.[WifiDocs/Device/BuffaloWLIL11GUSB](https://help.ubuntu.com/community/WifiDocs/Device/BuffaloWLIL11GUSB)
16.[WifiDocs/Device/CiscoCB21AG](https://help.ubuntu.com/community/WifiDocs/Device/CiscoCB21AG)
17.[WifiDocs/Device/CompaqW200](https://help.ubuntu.com/community/WifiDocs/Device/CompaqW200)
18.[WifiDocs/Device/D-Link_WUA-1340](https://help.ubuntu.com/community/WifiDocs/Device/D-Link_WUA-1340)
19.[WifiDocs/Device/D-Link_WUA-2340](https://help.ubuntu.com/community/WifiDocs/Device/D-Link_WUA-2340)
20.[WifiDocs/Device/DWA-111](https://help.ubuntu.com/community/WifiDocs/Device/DWA-111)
21.[WifiDocs/Device/DWA-140](https://help.ubuntu.com/community/WifiDocs/Device/DWA-140)
22.[WifiDocs/Device/DWA-552](https://help.ubuntu.com/community/WifiDocs/Device/DWA-552)
23.[WifiDocs/Device/DWL-122](https://help.ubuntu.com/community/WifiDocs/Device/DWL-122)
24.[WifiDocs/Device/DWL-520vE1](https://help.ubuntu.com/community/WifiDocs/Device/DWL-520vE1)
25.[WifiDocs/Device/DWL-G122_(Rev_B)](https://help.ubuntu.com/community/WifiDocs/Device/DWL-G122_%28Rev_B%29)
26.[WifiDocs/Device/DWL-G122_(Rev_C1)](https://help.ubuntu.com/community/WifiDocs/Device/DWL-G122_%28Rev_C1%29)
27.[WifiDocs/Device/DWL-G650+](https://help.ubuntu.com/community/WifiDocs/Device/DWL-G650%2B)
28.[WifiDocs/Device/EdimaxEW7128G](https://help.ubuntu.com/community/WifiDocs/Device/EdimaxEW7128G)
29.[WifiDocs/Device/EdimaxEW7128UG]()https://help.ubuntu.com/community/WifiDocs/Device/EdimaxEW7128UG
30.[WifiDocs/Device/EnGenius EUB9603](https://help.ubuntu.com/community/WifiDocs/Device/EnGenius%20EUB9603)
31.[WifiDocs/Device/F5D7000](https://help.ubuntu.com/community/WifiDocs/Device/F5D7000)
32.[WifiDocs/Device/F5D7010](https://help.ubuntu.com/community/WifiDocs/Device/F5D7010)
33.[WifiDocs/Device/F7D2102](https://help.ubuntu.com/community/WifiDocs/Device/F7D2102)
34.[WifiDocs/Device/Fritz!WLAN_USB_Stick](https://help.ubuntu.com/community/WifiDocs/Device/Fritz%21WLAN_USB_Stick)
35.[WifiDocs/Device/ICIDU_NI-707529_150N_ PCI-E](https://help.ubuntu.com/community/WifiDocs/Device/ICIDU_NI-707529_150N_%20PCI-E)
36.[WifiDocs/Device/IntersilPrism25Wavelan](https://help.ubuntu.com/community/WifiDocs/Device/IntersilPrism25Wavelan)
37.[WifiDocs/Device/Linksys WMP600N](https://help.ubuntu.com/community/WifiDocs/Device/Linksys%20WMP600N)
38.[WifiDocs/Device/Linksys WUSB600N](https://help.ubuntu.com/community/WifiDocs/Device/Linksys%20WUSB600N)
39.[WifiDocs/Device/LinksysWPC54GS-UK](https://help.ubuntu.com/community/WifiDocs/Device/LinksysWPC54GS-UK)
40.[WifiDocs/Device/LinksysWUSB11](https://help.ubuntu.com/community/WifiDocs/Device/LinksysWUSB11)
41.[WifiDocs/Device/LinksysWUSB54GC](https://help.ubuntu.com/community/WifiDocs/Device/LinksysWUSB54GC)
42.[WifiDocs/Device/LinksysWUSB54GP](https://help.ubuntu.com/community/WifiDocs/Device/LinksysWUSB54GP)
43.[WifiDocs/Device/Linksys_WMP54GX](https://help.ubuntu.com/community/WifiDocs/Device/Linksys_WMP54GX)
44.[WifiDocs/Device/Linksys_WUSB54GS_v1_&_v2](https://help.ubuntu.com/community/WifiDocs/Device/Linksys_WUSB54GS_v1_%26_v2)
45.[WifiDocs/Device/NEXXT NW122NXT12](https://help.ubuntu.com/community/WifiDocs/Device/NEXXT%20NW122NXT12)
46.[WifiDocs/Device/NetgearMA111](https://help.ubuntu.com/community/WifiDocs/Device/NetgearMA111)
47.[WifiDocs/Device/NetgearWG111](https://help.ubuntu.com/community/WifiDocs/Device/NetgearWG111)
48.[WifiDocs/Device/Netgear_WG311_v3](https://help.ubuntu.com/community/WifiDocs/Device/Netgear_WG311_v3)
49.[WifiDocs/Device/PENGUIN80211N](https://help.ubuntu.com/community/WifiDocs/Device/PENGUIN80211N)
50.[WifiDocs/Device/Pentagram_Hornet_USB_Lite](https://help.ubuntu.com/community/WifiDocs/Device/Pentagram_Hornet_USB_Lite)
51.[WifiDocs/Device/Proxim RangeLAN-DS](https://help.ubuntu.com/community/WifiDocs/Device/Proxim%20RangeLAN-DS)
52.[WifiDocs/Device/RT3090](https://help.ubuntu.com/community/WifiDocs/Device/RT3090)
53.[WifiDocs/Device/RTL8180L](https://help.ubuntu.com/community/WifiDocs/Device/RTL8180L)
54.[WifiDocs/Device/Ralink RT5390](https://help.ubuntu.com/community/WifiDocs/Device/Ralink%20RT5390)
55.[WifiDocs/Device/RalinkRT2860](https://help.ubuntu.com/community/WifiDocs/Device/RalinkRT2860)
56.[WifiDocs/Device/Ralink_RT5370](https://help.ubuntu.com/community/WifiDocs/Device/Ralink_RT5370)
57.[WifiDocs/Device/Realtek 8172](https://help.ubuntu.com/community/WifiDocs/Device/Realtek%208172)
58.[WifiDocs/Device/RealtekRTL8187b](https://help.ubuntu.com/community/WifiDocs/Device/RealtekRTL8187b)
59.[WifiDocs/Device/Rosewill RNX-N150UBE](https://help.ubuntu.com/community/WifiDocs/Device/Rosewill%20RNX-N150UBE)
60.[WifiDocs/Device/Rosewill RNX-N2LX](https://help.ubuntu.com/community/WifiDocs/Device/Rosewill%20RNX-N2LX)
61.[WifiDocs/Device/RosewillRNXN150UBE](https://help.ubuntu.com/community/WifiDocs/Device/RosewillRNXN150UBE)
62.[WifiDocs/Device/Sabrent 802.11n Wireless PCI](https://help.ubuntu.com/community/WifiDocs/Device/Sabrent%20802.11n%20Wireless%20PCI)
63.[WifiDocs/Device/Sabrent PCI-G802](https://help.ubuntu.com/community/WifiDocs/Device/Sabrent%20PCI-G802)
64.[WifiDocs/Device/SabrentUSB-G802](https://help.ubuntu.com/community/WifiDocs/Device/SabrentUSB-G802)
65.[WifiDocs/Device/SparkLAN WL-850R](https://help.ubuntu.com/community/WifiDocs/Device/SparkLAN%20WL-850R)
66.[WifiDocs/Device/TL-WN722N](https://help.ubuntu.com/community/WifiDocs/Device/TL-WN722N)
67.[WifiDocs/Device/TP-LINK_TL-WN781ND](https://help.ubuntu.com/community/WifiDocs/Device/TP-LINK_TL-WN781ND)
68.[WifiDocs/Device/TP-Link_TL-WN620G_(ndiswrapper)](https://help.ubuntu.com/community/WifiDocs/Device/TP-Link_TL-WN620G_%28ndiswrapper%29)
69.[WifiDocs/Device/Tenda W522U USB](https://help.ubuntu.com/community/WifiDocs/Device/Tenda%20W522U%20USB)
70.[WifiDocs/Device/Tenda_W311M](https://help.ubuntu.com/community/WifiDocs/Device/Tenda_W311M)
71.[WifiDocs/Device/Topcom_Skyracer_USB_4001g_(WLAN-USB-Stick)](https://help.ubuntu.com/community/WifiDocs/Device/Topcom_Skyracer_USB_4001g_%28WLAN-USB-Stick%29)
72.[WifiDocs/Device/WG111T](https://help.ubuntu.com/community/WifiDocs/Device/WG111T)
73.[WifiDocs/Device/WG121](https://help.ubuntu.com/community/WifiDocs/Device/WG121)
74.[WifiDocs/Device/ipn2220](https://help.ubuntu.com/community/WifiDocs/Device/ipn2220)
75.[WifiDocs/Device/wpn111](https://help.ubuntu.com/community/WifiDocs/Device/wpn111)
76.[WifiDocs/Device/xg-301](https://help.ubuntu.com/community/WifiDocs/Device/xg-301)
# <center>无线网卡支持</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
## WifiDocs/WirelessCardsSupported(支持的无线卡)
  如果你要购买一台新电脑最好选择带有无线组件的电脑它是为Linux等免费软件设计的。为免费软件设计的网卡能给你提供更好的支持。兼容免费软件的设备也可以开箱即用。
  1.目前[ThinkPenguin.com](http://thinkpenguin.com/)提供了一款采用AR9170芯片组的802.11N USB卡可以保证免费软件的兼容性。此外还有用于笔记本电脑的MiniPCI wifi卡和连接蓝牙无线设备的USB蓝牙适配器。
  2.[Passys](http://www.passys.nl/wirelessnetwork)销售的PCI卡与Linux兼容虽然不兼容免费软件适用于台式电脑。
  3.[维基百科](http://en.wikipedia.org/wiki/Comparison_of_open_source_wireless_drivers)有更多关于哪些芯片组和驱动程序是免费软件兼容的信息。
  4.其他一些卡也兼容Linux但不兼容自由软件。这些通常可以工作但在某些情况下可能无法工作。
  即使您的无线网卡没有为Ubuntu设计的驱动程序您也可以使用[NDISWrapper](http://ndiswrapper.sourceforge.net/)和微软Windows的驱动程序让它工作。但这是以牺牲功能和可靠性为代价的。如果您使用这种方法您的网络连接很可能会很不稳定。
  其他Ubuntu的无线网络维基页面。
  1.[Wifi信息的中心页面](https://help.ubuntu.com/community/WifiDocs)
  2.[WifiDocs/WirelessTroubleShootingGuide(无线故障排除指南)](https://help.ubuntu.com/community/WifiDocs/WirelessTroubleShootingGuide)
  3.[无线故障排除程序](https://help.ubuntu.com/community/WirelessTroubleshootingProcedure)
### 无线卡
  要确定你的无线网卡/芯片组是什么首先要确定它是否是一个独立的设备插在电脑上。如果是独立的USB设备打开终端输入以下内容。
<li style="background: #DCDCDC">lsusb</li>
  并查找 "无线 "等字样,以找到你的卡类型。  
  对于非USB芯片但包含在计算机中的芯片输入以下内容。
<li style="background: #DCDCDC">lspci -v</li>
  并阅读最后一节。
### 按制造商
  社区已经为以下制造商创建了文章。
| 制造商 | 网卡类型 |
| ---- | -------- |
| 3Com | PCMCIA、PCI、PCI、Low、Profile、USB |
| A-Link | USB |
| Accton | PCI |
| Adaptec | PCMCIA |
| Advent | PCMCIA |
| ADDON | USB |
| Airlink101 | PCMCIA、PCI、USB |
| Aptiva | USB |
| Asus | PCMCIA PCI USB |
| Atlantis Land | PCI
| AVM | USB |
| Belkin | PCMCIA PCI ExpressCard/34 USB |
| Blitzz | Cardbus |
| Broadcom | miniPCI |
| Buffalo | PCMCIA PCI USB |
| Cable & Wireless | Cardbus
| Cisco | PCMCIA Cardbus |
| Cnet | PCMCIA PCI |
| Compaq | USB |
| CompUSA/Realtek | PCI |
| Conceptronic | USB
| Dell | USB |
| Dexlan | PCMCIA |
| Digicom | USB |
| Digitus | PCMCIA PCI Unknown USB |
| D-Link | PCMCIA PCI Unknown USB |
| Edimax | PCMCIA PCI Unknown USB |
| eHome | PCMCIA |
| Encore | PCI USB |
| Gigabyte Technology | miniPCI PCI |
| Hawking | PCMCIA PCI Cardbus USB |
| HP | PCI |
| Intel | miniPCI |
| KCorp | Cardbus |
| Level One | PCMCIA |
| Linksys | PCMCIA PCI USB |
| Longshine | PCMCIA |
| Motorola | PCMCIA
| MSI | miniPCI PCI |
| MyEssentials | USB |
| Netcomm | PCI USB |
| Netcore | USB |
| Netgear | PCMCIA PCI USB |
| Novatech | USB |
| Orient | USB |
| Pheenet | USB |
| Proxim/Orinoco | PCMCIA PCI |
| Qualcomm Atheros | miniPCI |
| RealTek | PCI USB |
| RetailPlus | USB |
| Rosewill | USB |
| Sierra | USB |
| Sitecom | PCMCIA PCI |
| SMC | PCMCIA PCI USB |
| Sonnet | PCMCIA |
| Sweex | PCMCIA PCI USB |
| Topcom | PCMCIA |
| TP-Link | PCMCIA PCI USB |
| Trendnet | PCMCIA PCI USB |
| Trust | Unknown |
| US Robotics | PCMCIA USB |
| Veho | USB |
| Westell | USB |
| Zonet | PCMCIA PCI USB |
| Zyxel | PCMCIA PCI USB |
| Various | miniPCI USB |
### 按版本
请参阅本页面。[WifiDocs/WirelessCardsByVersion(无线卡按版本分类)](https://help.ubuntu.com/community/WifiDocs/WirelessCardsByVersion)
### 按网卡
1.[WifiDocs/Device](https://help.ubuntu.com/community/WifiDocs/Device)
2.[WifiDocs/Device/ADDON_ADD-GWP110](https://help.ubuntu.com/community/WifiDocs/Device/ADDON_ADD-GWP110)
3.[WifiDocs/Device/AR5006EG](https://help.ubuntu.com/community/WifiDocs/Device/AR5006EG)
4.[WifiDocs/Device/AR5007](https://help.ubuntu.com/community/WifiDocs/Device/Actiontec)
5.[WifiDocs/Device/Actiontec](https://help.ubuntu.com/community/WifiDocs/Device/Actiontec)
6.[WifiDocs/Device/Airlink101_AWLL3026](https://help.ubuntu.com/community/WifiDocs/Device/Airlink101_AWLL3026)
7.[WifiDocs/Device/AirportExtreme](https://help.ubuntu.com/community/WifiDocs/Device/AirportExtreme)
8.[WifiDocs/Device/Atheros/AR9285](https://help.ubuntu.com/community/WifiDocs/Device/Atheros/AR9285)
9.[WifiDocs/Device/BCM43224 802.11a/b/g/n (rev 01)](https://help.ubuntu.com/community/WifiDocs/Device/BCM43224%20802.11a/b/g/n%20%28rev%2001%29)
10.[WifiDocs/Device/BT_Voyager_1055](https://help.ubuntu.com/community/WifiDocs/Device/BT_Voyager_1055)
11.[WifiDocs/Device/Belkin 300 N F7D2101](https://help.ubuntu.com/community/WifiDocs/Device/Belkin%20300%20N%20F7D2101)
12.[WifiDocs/Device/Belkin F5D8053](https://help.ubuntu.com/community/WifiDocs/Device/Belkin%20F5D8053)
13.[WifiDocs/Device/Belkin_F5D7050_ver_3000_(Ralink_rt73_driver)](https://help.ubuntu.com/community/WifiDocs/Device/Belkin_F5D7050_ver_3000_%28Ralink_rt73_driver%29)
14.[WifiDocs/Device/Belkin_F5D8010](https://help.ubuntu.com/community/WifiDocs/Device/Belkin_F5D8010)
15.[WifiDocs/Device/BuffaloWLIL11GUSB](https://help.ubuntu.com/community/WifiDocs/Device/BuffaloWLIL11GUSB)
16.[WifiDocs/Device/CiscoCB21AG](https://help.ubuntu.com/community/WifiDocs/Device/CiscoCB21AG)
17.[WifiDocs/Device/CompaqW200](https://help.ubuntu.com/community/WifiDocs/Device/CompaqW200)
18.[WifiDocs/Device/D-Link_WUA-1340](https://help.ubuntu.com/community/WifiDocs/Device/D-Link_WUA-1340)
19.[WifiDocs/Device/D-Link_WUA-2340](https://help.ubuntu.com/community/WifiDocs/Device/D-Link_WUA-2340)
20.[WifiDocs/Device/DWA-111](https://help.ubuntu.com/community/WifiDocs/Device/DWA-111)
21.[WifiDocs/Device/DWA-140](https://help.ubuntu.com/community/WifiDocs/Device/DWA-140)
22.[WifiDocs/Device/DWA-552](https://help.ubuntu.com/community/WifiDocs/Device/DWA-552)
23.[WifiDocs/Device/DWL-122](https://help.ubuntu.com/community/WifiDocs/Device/DWL-122)
24.[WifiDocs/Device/DWL-520vE1](https://help.ubuntu.com/community/WifiDocs/Device/DWL-520vE1)
25.[WifiDocs/Device/DWL-G122_(Rev_B)](https://help.ubuntu.com/community/WifiDocs/Device/DWL-G122_%28Rev_B%29)
26.[WifiDocs/Device/DWL-G122_(Rev_C1)](https://help.ubuntu.com/community/WifiDocs/Device/DWL-G122_%28Rev_C1%29)
27.[WifiDocs/Device/DWL-G650+](https://help.ubuntu.com/community/WifiDocs/Device/DWL-G650%2B)
28.[WifiDocs/Device/EdimaxEW7128G](https://help.ubuntu.com/community/WifiDocs/Device/EdimaxEW7128G)
29.[WifiDocs/Device/EdimaxEW7128UG]()https://help.ubuntu.com/community/WifiDocs/Device/EdimaxEW7128UG
30.[WifiDocs/Device/EnGenius EUB9603](https://help.ubuntu.com/community/WifiDocs/Device/EnGenius%20EUB9603)
31.[WifiDocs/Device/F5D7000](https://help.ubuntu.com/community/WifiDocs/Device/F5D7000)
32.[WifiDocs/Device/F5D7010](https://help.ubuntu.com/community/WifiDocs/Device/F5D7010)
33.[WifiDocs/Device/F7D2102](https://help.ubuntu.com/community/WifiDocs/Device/F7D2102)
34.[WifiDocs/Device/Fritz!WLAN_USB_Stick](https://help.ubuntu.com/community/WifiDocs/Device/Fritz%21WLAN_USB_Stick)
35.[WifiDocs/Device/ICIDU_NI-707529_150N_ PCI-E](https://help.ubuntu.com/community/WifiDocs/Device/ICIDU_NI-707529_150N_%20PCI-E)
36.[WifiDocs/Device/IntersilPrism25Wavelan](https://help.ubuntu.com/community/WifiDocs/Device/IntersilPrism25Wavelan)
37.[WifiDocs/Device/Linksys WMP600N](https://help.ubuntu.com/community/WifiDocs/Device/Linksys%20WMP600N)
38.[WifiDocs/Device/Linksys WUSB600N](https://help.ubuntu.com/community/WifiDocs/Device/Linksys%20WUSB600N)
39.[WifiDocs/Device/LinksysWPC54GS-UK](https://help.ubuntu.com/community/WifiDocs/Device/LinksysWPC54GS-UK)
40.[WifiDocs/Device/LinksysWUSB11](https://help.ubuntu.com/community/WifiDocs/Device/LinksysWUSB11)
41.[WifiDocs/Device/LinksysWUSB54GC](https://help.ubuntu.com/community/WifiDocs/Device/LinksysWUSB54GC)
42.[WifiDocs/Device/LinksysWUSB54GP](https://help.ubuntu.com/community/WifiDocs/Device/LinksysWUSB54GP)
43.[WifiDocs/Device/Linksys_WMP54GX](https://help.ubuntu.com/community/WifiDocs/Device/Linksys_WMP54GX)
44.[WifiDocs/Device/Linksys_WUSB54GS_v1_&_v2](https://help.ubuntu.com/community/WifiDocs/Device/Linksys_WUSB54GS_v1_%26_v2)
45.[WifiDocs/Device/NEXXT NW122NXT12](https://help.ubuntu.com/community/WifiDocs/Device/NEXXT%20NW122NXT12)
46.[WifiDocs/Device/NetgearMA111](https://help.ubuntu.com/community/WifiDocs/Device/NetgearMA111)
47.[WifiDocs/Device/NetgearWG111](https://help.ubuntu.com/community/WifiDocs/Device/NetgearWG111)
48.[WifiDocs/Device/Netgear_WG311_v3](https://help.ubuntu.com/community/WifiDocs/Device/Netgear_WG311_v3)
49.[WifiDocs/Device/PENGUIN80211N](https://help.ubuntu.com/community/WifiDocs/Device/PENGUIN80211N)
50.[WifiDocs/Device/Pentagram_Hornet_USB_Lite](https://help.ubuntu.com/community/WifiDocs/Device/Pentagram_Hornet_USB_Lite)
51.[WifiDocs/Device/Proxim RangeLAN-DS](https://help.ubuntu.com/community/WifiDocs/Device/Proxim%20RangeLAN-DS)
52.[WifiDocs/Device/RT3090](https://help.ubuntu.com/community/WifiDocs/Device/RT3090)
53.[WifiDocs/Device/RTL8180L](https://help.ubuntu.com/community/WifiDocs/Device/RTL8180L)
54.[WifiDocs/Device/Ralink RT5390](https://help.ubuntu.com/community/WifiDocs/Device/Ralink%20RT5390)
55.[WifiDocs/Device/RalinkRT2860](https://help.ubuntu.com/community/WifiDocs/Device/RalinkRT2860)
56.[WifiDocs/Device/Ralink_RT5370](https://help.ubuntu.com/community/WifiDocs/Device/Ralink_RT5370)
57.[WifiDocs/Device/Realtek 8172](https://help.ubuntu.com/community/WifiDocs/Device/Realtek%208172)
58.[WifiDocs/Device/RealtekRTL8187b](https://help.ubuntu.com/community/WifiDocs/Device/RealtekRTL8187b)
59.[WifiDocs/Device/Rosewill RNX-N150UBE](https://help.ubuntu.com/community/WifiDocs/Device/Rosewill%20RNX-N150UBE)
60.[WifiDocs/Device/Rosewill RNX-N2LX](https://help.ubuntu.com/community/WifiDocs/Device/Rosewill%20RNX-N2LX)
61.[WifiDocs/Device/RosewillRNXN150UBE](https://help.ubuntu.com/community/WifiDocs/Device/RosewillRNXN150UBE)
62.[WifiDocs/Device/Sabrent 802.11n Wireless PCI](https://help.ubuntu.com/community/WifiDocs/Device/Sabrent%20802.11n%20Wireless%20PCI)
63.[WifiDocs/Device/Sabrent PCI-G802](https://help.ubuntu.com/community/WifiDocs/Device/Sabrent%20PCI-G802)
64.[WifiDocs/Device/SabrentUSB-G802](https://help.ubuntu.com/community/WifiDocs/Device/SabrentUSB-G802)
65.[WifiDocs/Device/SparkLAN WL-850R](https://help.ubuntu.com/community/WifiDocs/Device/SparkLAN%20WL-850R)
66.[WifiDocs/Device/TL-WN722N](https://help.ubuntu.com/community/WifiDocs/Device/TL-WN722N)
67.[WifiDocs/Device/TP-LINK_TL-WN781ND](https://help.ubuntu.com/community/WifiDocs/Device/TP-LINK_TL-WN781ND)
68.[WifiDocs/Device/TP-Link_TL-WN620G_(ndiswrapper)](https://help.ubuntu.com/community/WifiDocs/Device/TP-Link_TL-WN620G_%28ndiswrapper%29)
69.[WifiDocs/Device/Tenda W522U USB](https://help.ubuntu.com/community/WifiDocs/Device/Tenda%20W522U%20USB)
70.[WifiDocs/Device/Tenda_W311M](https://help.ubuntu.com/community/WifiDocs/Device/Tenda_W311M)
71.[WifiDocs/Device/Topcom_Skyracer_USB_4001g_(WLAN-USB-Stick)](https://help.ubuntu.com/community/WifiDocs/Device/Topcom_Skyracer_USB_4001g_%28WLAN-USB-Stick%29)
72.[WifiDocs/Device/WG111T](https://help.ubuntu.com/community/WifiDocs/Device/WG111T)
73.[WifiDocs/Device/WG121](https://help.ubuntu.com/community/WifiDocs/Device/WG121)
74.[WifiDocs/Device/ipn2220](https://help.ubuntu.com/community/WifiDocs/Device/ipn2220)
75.[WifiDocs/Device/wpn111](https://help.ubuntu.com/community/WifiDocs/Device/wpn111)
76.[WifiDocs/Device/xg-301](https://help.ubuntu.com/community/WifiDocs/Device/xg-301)

426
其他/震惊!没想到你是这样的flatpak.md Normal file → Executable file
View File

@ -1,213 +1,213 @@
# <center>震惊没想到你是这样的flatpak...</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
![](https://www.ubuntukylin.com/upload/201707/1500013249421469.jpg)
**引言**
之前我们介绍过如何在优麒麟和银河麒麟社区版上构建snap/flatpak包传送门,今天我们来更深入的认识下flatpak
**Flatpak**(前世为xdg-app) 是一种用于构建分发安装和运行应用程序的技术。它主要针对的是Linux桌面通过在沙箱中隔离应用程序来提高Linux桌面的安全性允许应用程序安装在任何Linux发行版上。
### 历史:
2013: 在[GNOME Developer Experience hackfest, Brussels](https://wiki.gnome.org/DeveloperExperience/Hackfest2013)大会后萌生在GNOME中使用应用程序容器技术的念头次年开始开发。
2016年5月: 第一个主版本xdg-app发布。
    6月重命名为flatpak。
    8月endless OS 3.0, 第一个默认支持Flatpak的发行版。
   
    11月ClearLinux声明采用flatpak。
2017年2月 最新的flatpak已经可以在Arch, Debian, Fedora, Gentoo, Mageia, openSUSE, Ubuntu等的最新版本上运行。
### 基本概念:
#### 运行时(runtimes)
“运行时”提供应用程序所需的基本依赖。有各种各样的“运行时”,比如“Freedesktop运行时”“GNOME运行时”。“Freedesktop运行时”包含一系列必要的库和服务包括D-Bus, GLib, PulseAudio, X11和Wayland等。“GNOME运行时”基于“FreeDesktop运行时”增加了一些GNOME平台相关的库比如GStreamer, GTK+, GVFS等。必须针对运行时构建每个应用程序并且必须在主机系统上安装此运行时才能运行应用程序。用户可以同时安装多个不同的运行时包括不同版本的同一个运行时。KDE runtime正在开发中。
每一个运行时可以看做一个’/usr 文件系统,当程序运行时,它的运行时挂载在‘/usr上。
#### 捆绑库(Bundled libraries)
当一个程序需要的依赖不在运行时中,使用捆绑库来绑定这些依赖到程序上。
#### SDK软件开发套件
SDK也是一个“运行时”是用于构建应用程序的特殊类型的运行时它包含了构建和打包工具devel parts如头文件编译器和调试器。通常SDK与“运行时”配对由应用程序使用。
#### 扩展Extensions
一个扩展是对于运行时或程序的可选插件一般用于把translations和debug信息从运行时分离出来比如, org.freedesktop.Platform.Locale 可以追加到org.freedesktop.Platform运行时上用来添加翻译。
#### 沙箱Sandbox
使用Flatpak每个应用程序都是在孤立的环境中构建和运行的。默认情况下应用程序只能“查看”自身及其“运行时”,访问用户文件网络graphics sockets总线和设备上的子系统必须明确授予权限访问其他内容如其他进程是不允许的。可以通过Portals机制在沙箱内访问外面系统比如打印截图等
### 原理:
Flatpak主要使用了如下技术
1. [bubblewrap](https://github.com/projectatomic/bubblewrap):依赖它作为沙箱的底层实现, 限制了应用程序访问操作系统或用户数据的能力,并且提供了非特权用户使用容器的能力。
2. Systemd将各个subsystem和cgroup树关联并挂载好为沙箱创建 cgroups。
3. D-Bus, 为应用程序提供高层APIs。
4. 使用Open Container Initiative的OCI格式作为单文件的传输格式方便传输。
5. 使用OSTree系统用于版本化和分发文件系统树。
6. 使用Appstream 元数据使得Flatpak应用程序在软件中心可以完美呈现出来。
而其中最重要的当属bubblewrap它是整个应用沙箱构建的关键主要利用了如下内核特性
#### Namespaces:
命名空间是对全局系统资源的一个封装隔离使得处于不同namespace的进程拥有独立的全局系统资源改变一个namespace中的系统资源只会影响当前namespace里的进程对其他namespace中的进程没有影响。它控制了进程的可见范围例如网络、挂载点、进程等等。同时使得非特权用户可以创建沙箱。它有以下几类
● Mount namespace (CLONE_NEWNS):
用来隔离文件系统的挂载点, 使得不同的mount namespace拥有自己独立的挂载点信息不同的namespace之间不会相互影响这对于构建用户或者容器自己的文件系统目录非常有用。bubblewrap 总是创建一个新的mount namespace, root挂载在tmpfs上用户可以明确指定文件系统的哪个部分在沙盒中是可见的。
● User namespaces (CLONE_NEWUSER):
用来隔离用户权限相关的Linux资源包括用户ID 和组ID 在不同的user namespace中同样一个用户的user ID 和group ID可以不一样换句话说一个用户可以在父user namespace中是普通用户在子user namespace中是超级用户超级用户只相对于子user namespace所拥有的资源无法访问其他user namespace中需要超级用户才能访问资源
● IPC namespaces (CLONE_NEWIPC):
沙箱会得到所有不同形式的IPCs的一份拷贝比如SysV 共享内存和信号量等。
● PID namespaces (CLONE_NEWPID):
用来隔离进程的ID空间沙箱内的程序看不见任何沙箱外的进程此外, bubblewrap 会运行一个pid为1的程序在容器中,用来处理回收子进程的需求。
● Network namespaces (CLONE_NEWNET):
用来隔绝网络在它自己的network namespace中只有一个回环设备。
● UTS namespace (CLONE_NEWUTS):
允许沙箱拥有自己独立的hostname和domain name.
#### Cgroups:
cgroup和namespace类似也是将进程进行分组但它的目的和namespace不一样namespace是为了隔离进程组之间的资源而cgroup是为了对一组进程进行统一的资源监控和限制。
#### Bind Mount:
将一个目录(或文件)中的内容挂载到另一个目录(或文件)上.
#### Seccomp rules
Linux kernel 所支持的一种简洁的sandboxing机制。它能使一个进程进入到一种“安全”运行模式该模式下的进程只能调用4种系统调用system calls即read(), write(), exit()和sigreturn(),否则进程便会被终止。
同时bubblewrap 使用PR_SET_NO_NEW_PRIVS 关闭 setuid 二进制程序。
当一个进程或其子进程设置了PR_SET_NO_NEW_PRIVS 属性,则其不能访问一些无法share的操作,如setuid, 和chroot。
### 实验:
接下来我们通过如下方式进入到一个flatpak创建的沙箱中
安装程序所需的“运行时”和Sdk
$ flatpak remote-add --from gnome https://sdk.gnome.org/gnome.flatpakrepo
$ flatpak install gnome org.gnome.Platform//3.24 org.gnome.Sdk//3.24
安装gedit:
$ flatpak remote-add --from gnome-apps https://sdk.gnome.org/gnome-apps.flatpakrepo
$ flatpak install gnome-apps org.gnome.gedit
创建一个devel sandbox中的shell:
$ flatpak run --devel --command=bash org.gnome.gedit
可以看到此沙箱中有个进程且flatpak-bwrap pid为1。
$ ps
PID TTY TIME CMD
1 ? 00:00:00 flatpak-bwrap
2 ? 00:00:00 bash
5 ? 00:00:00 ps
查看当前进程所属的namespace括号里的数字标识不同的namespace
$ ls -l /proc/&&/ns
total 0
15:48 cgroup -> cgroup:【4026531835】
15:48 ipc -> ipc:【4026531839】
15:48 mnt -> mnt:【4026532241】
15:48 net -> net:【4026532244】
15:48 pid -> pid:【4026532242】
15:48 user -> user:【4026532371】
15:48 uts -> uts:【4026531838】
然后在主机中打开另一个终端查看主机中当前进程的namespace:
$ ls /proc/&&/ns
total 0
15:56 cgroup -> cgroup:【4026531835】
15:56 ipc -> ipc:【4026531839】
15:56 mnt -> mnt:【4026531840】
15:56 net -> net:【4026531957】
15:56 pid -> pid:【4026531836】
15:56 user -> user:【4026531837】
15:56 uts -> uts:【4026531838】
可以看到沙箱中的进程所属的namespace与主机环境下进程的namespace相比它们的mount ,net, pid, user namespace不同这时我们在主机环境下把ping文件拷贝进主目录gedit声明了对/home的访问权限然后在sandbox shell中执行ping 192.168.0.1,会发现报错:
$ ./ping 192.168.0.1
ping: socket: Operation not permitted
因为gedit没有申请网络权限它和主机在不同的network namespaces中。
怎么样是不是很有趣你还能在这个沙箱中做更多有趣的探索行动起来一起来flatpak吧
# <center>震惊没想到你是这样的flatpak...</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
![](https://www.ubuntukylin.com/upload/201707/1500013249421469.jpg)
**引言**
之前我们介绍过如何在优麒麟和银河麒麟社区版上构建snap/flatpak包传送门,今天我们来更深入的认识下flatpak
**Flatpak**(前世为xdg-app) 是一种用于构建分发安装和运行应用程序的技术。它主要针对的是Linux桌面通过在沙箱中隔离应用程序来提高Linux桌面的安全性允许应用程序安装在任何Linux发行版上。
### 历史:
2013: 在[GNOME Developer Experience hackfest, Brussels](https://wiki.gnome.org/DeveloperExperience/Hackfest2013)大会后萌生在GNOME中使用应用程序容器技术的念头次年开始开发。
2016年5月: 第一个主版本xdg-app发布。
    6月重命名为flatpak。
    8月endless OS 3.0, 第一个默认支持Flatpak的发行版。
   
    11月ClearLinux声明采用flatpak。
2017年2月 最新的flatpak已经可以在Arch, Debian, Fedora, Gentoo, Mageia, openSUSE, Ubuntu等的最新版本上运行。
### 基本概念:
#### 运行时(runtimes)
“运行时”提供应用程序所需的基本依赖。有各种各样的“运行时”,比如“Freedesktop运行时”“GNOME运行时”。“Freedesktop运行时”包含一系列必要的库和服务包括D-Bus, GLib, PulseAudio, X11和Wayland等。“GNOME运行时”基于“FreeDesktop运行时”增加了一些GNOME平台相关的库比如GStreamer, GTK+, GVFS等。必须针对运行时构建每个应用程序并且必须在主机系统上安装此运行时才能运行应用程序。用户可以同时安装多个不同的运行时包括不同版本的同一个运行时。KDE runtime正在开发中。
每一个运行时可以看做一个’/usr 文件系统,当程序运行时,它的运行时挂载在‘/usr上。
#### 捆绑库(Bundled libraries)
当一个程序需要的依赖不在运行时中,使用捆绑库来绑定这些依赖到程序上。
#### SDK软件开发套件
SDK也是一个“运行时”是用于构建应用程序的特殊类型的运行时它包含了构建和打包工具devel parts如头文件编译器和调试器。通常SDK与“运行时”配对由应用程序使用。
#### 扩展Extensions
一个扩展是对于运行时或程序的可选插件一般用于把translations和debug信息从运行时分离出来比如, org.freedesktop.Platform.Locale 可以追加到org.freedesktop.Platform运行时上用来添加翻译。
#### 沙箱Sandbox
使用Flatpak每个应用程序都是在孤立的环境中构建和运行的。默认情况下应用程序只能“查看”自身及其“运行时”,访问用户文件网络graphics sockets总线和设备上的子系统必须明确授予权限访问其他内容如其他进程是不允许的。可以通过Portals机制在沙箱内访问外面系统比如打印截图等
### 原理:
Flatpak主要使用了如下技术
1. [bubblewrap](https://github.com/projectatomic/bubblewrap):依赖它作为沙箱的底层实现, 限制了应用程序访问操作系统或用户数据的能力,并且提供了非特权用户使用容器的能力。
2. Systemd将各个subsystem和cgroup树关联并挂载好为沙箱创建 cgroups。
3. D-Bus, 为应用程序提供高层APIs。
4. 使用Open Container Initiative的OCI格式作为单文件的传输格式方便传输。
5. 使用OSTree系统用于版本化和分发文件系统树。
6. 使用Appstream 元数据使得Flatpak应用程序在软件中心可以完美呈现出来。
而其中最重要的当属bubblewrap它是整个应用沙箱构建的关键主要利用了如下内核特性
#### Namespaces:
命名空间是对全局系统资源的一个封装隔离使得处于不同namespace的进程拥有独立的全局系统资源改变一个namespace中的系统资源只会影响当前namespace里的进程对其他namespace中的进程没有影响。它控制了进程的可见范围例如网络、挂载点、进程等等。同时使得非特权用户可以创建沙箱。它有以下几类
● Mount namespace (CLONE_NEWNS):
用来隔离文件系统的挂载点, 使得不同的mount namespace拥有自己独立的挂载点信息不同的namespace之间不会相互影响这对于构建用户或者容器自己的文件系统目录非常有用。bubblewrap 总是创建一个新的mount namespace, root挂载在tmpfs上用户可以明确指定文件系统的哪个部分在沙盒中是可见的。
● User namespaces (CLONE_NEWUSER):
用来隔离用户权限相关的Linux资源包括用户ID 和组ID 在不同的user namespace中同样一个用户的user ID 和group ID可以不一样换句话说一个用户可以在父user namespace中是普通用户在子user namespace中是超级用户超级用户只相对于子user namespace所拥有的资源无法访问其他user namespace中需要超级用户才能访问资源
● IPC namespaces (CLONE_NEWIPC):
沙箱会得到所有不同形式的IPCs的一份拷贝比如SysV 共享内存和信号量等。
● PID namespaces (CLONE_NEWPID):
用来隔离进程的ID空间沙箱内的程序看不见任何沙箱外的进程此外, bubblewrap 会运行一个pid为1的程序在容器中,用来处理回收子进程的需求。
● Network namespaces (CLONE_NEWNET):
用来隔绝网络在它自己的network namespace中只有一个回环设备。
● UTS namespace (CLONE_NEWUTS):
允许沙箱拥有自己独立的hostname和domain name.
#### Cgroups:
cgroup和namespace类似也是将进程进行分组但它的目的和namespace不一样namespace是为了隔离进程组之间的资源而cgroup是为了对一组进程进行统一的资源监控和限制。
#### Bind Mount:
将一个目录(或文件)中的内容挂载到另一个目录(或文件)上.
#### Seccomp rules
Linux kernel 所支持的一种简洁的sandboxing机制。它能使一个进程进入到一种“安全”运行模式该模式下的进程只能调用4种系统调用system calls即read(), write(), exit()和sigreturn(),否则进程便会被终止。
同时bubblewrap 使用PR_SET_NO_NEW_PRIVS 关闭 setuid 二进制程序。
当一个进程或其子进程设置了PR_SET_NO_NEW_PRIVS 属性,则其不能访问一些无法share的操作,如setuid, 和chroot。
### 实验:
接下来我们通过如下方式进入到一个flatpak创建的沙箱中
安装程序所需的“运行时”和Sdk
$ flatpak remote-add --from gnome https://sdk.gnome.org/gnome.flatpakrepo
$ flatpak install gnome org.gnome.Platform//3.24 org.gnome.Sdk//3.24
安装gedit:
$ flatpak remote-add --from gnome-apps https://sdk.gnome.org/gnome-apps.flatpakrepo
$ flatpak install gnome-apps org.gnome.gedit
创建一个devel sandbox中的shell:
$ flatpak run --devel --command=bash org.gnome.gedit
可以看到此沙箱中有个进程且flatpak-bwrap pid为1。
$ ps
PID TTY TIME CMD
1 ? 00:00:00 flatpak-bwrap
2 ? 00:00:00 bash
5 ? 00:00:00 ps
查看当前进程所属的namespace括号里的数字标识不同的namespace
$ ls -l /proc/&&/ns
total 0
15:48 cgroup -> cgroup:【4026531835】
15:48 ipc -> ipc:【4026531839】
15:48 mnt -> mnt:【4026532241】
15:48 net -> net:【4026532244】
15:48 pid -> pid:【4026532242】
15:48 user -> user:【4026532371】
15:48 uts -> uts:【4026531838】
然后在主机中打开另一个终端查看主机中当前进程的namespace:
$ ls /proc/&&/ns
total 0
15:56 cgroup -> cgroup:【4026531835】
15:56 ipc -> ipc:【4026531839】
15:56 mnt -> mnt:【4026531840】
15:56 net -> net:【4026531957】
15:56 pid -> pid:【4026531836】
15:56 user -> user:【4026531837】
15:56 uts -> uts:【4026531838】
可以看到沙箱中的进程所属的namespace与主机环境下进程的namespace相比它们的mount ,net, pid, user namespace不同这时我们在主机环境下把ping文件拷贝进主目录gedit声明了对/home的访问权限然后在sandbox shell中执行ping 192.168.0.1,会发现报错:
$ ./ping 192.168.0.1
ping: socket: Operation not permitted
因为gedit没有申请网络权限它和主机在不同的network namespaces中。
怎么样是不是很有趣你还能在这个沙箱中做更多有趣的探索行动起来一起来flatpak吧

View File

@ -1,295 +0,0 @@
# <center>优麒麟团队刘正元浅谈“Linux通用块层之IO合并</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
本文作者**刘正元**,来自天津麒麟(优麒麟开发团队之一), linux 内核爱好者,对内核 IO 子系统和内核调试工具这块比较感兴趣,向上游内核贡献过一些 patch目前在公司负责文件 IO 协议栈的调试调优。在系统开发期间,刘正元也曾在宋宝华“ [Linux阅码场](https://mp.weixin.qq.com/s?__biz=MzAwMDUwNDgxOA==&mid=2652664651&idx=1&sn=3b908b92b4209fd49bac561814369e5a&chksm=810f35d6b678bcc0353c80e744244ab61ca81b93ae4adf18dfdff28ab35b6f97c0e7635f5f46&mpshare=1&scene=1&srcid=0605uHWZBejaZQ1PEIru1IjU#rd)”微信公众平台发表多篇文章,本文也是出自该处。
![](https://www.ubuntukylin.com/upload/201806/1528256784870902.jpg)
所谓请求合并就是将进程内或者进程间产生的在物理地址上连续的多个IO请求合并成单个IO请求一并处理从而提升IO请求的处理效率。在前面有关通用块层介绍的系列文章当中我们或多或少地提及了IO请求合并的概念本篇我们从头集中梳理IO请求在block layer的来龙去脉以此来增强对IO请求合并的理解。
首先来看一张图下面的图展示了IO请求数据由用户进程产生到最终持久化存储到物理存储介质其间在内核空间所经历的数据流以及IO请求合并可能的触发点。
![](https://www.ubuntukylin.com/upload/201806/1528254005961032.png)
从内核的角度而言进程产生的IO路径主要有图中①②③所示的三条
 缓存IO,对应图中的路径①系统中绝大部分IO走的这种形式充分利用filesystem层的page cache所带来的优势 应用程序产生的IO经系统调用落入page cache之后便可以直接返回page cache中的缓存数据由内核回写线程在适当时机负责同步到底层的存储介质之上当然应用程序也可以主动发起回写过程如fsync系统调用来确保数据尽快同步到存储介质上从而避免系统崩溃或者掉电带来的数据不一致性。缓存IO可以带来很多好处首先应用程序将IO丢给page cache之后就直接返回了避免了每次IO都将整个IO协议栈走一遍从而减少了IO的延迟。其次page cache中的缓存最后以页或块为单位进行回写并非应用程序向page cache中提交了几次IO,回写的时候就需要往通用块层提交几次IO,这样在提交时间上不连续但在空间上连续的小块IO请求就可以合并到同一个缓存页中一并处理。再次如果应用程序之前产生的IO已经在page cache中后续又产生了相同的IO那么只需要将后到的IO覆盖page cache中的旧IO这样一来如果应用程序频繁的操作文件的同一个位置我们只需要向底层存储设备提交最后一次IO就可以了。最后应用程序写入到page cache中的缓存数据可以为后续的读操作服务读取数据的时候先搜索page cache如果命中了则直接返回如果没命中则从底层读取并保存到page cache中下次再读的时候便可以从page cache中命中。
 非缓存IO带蓄流对应图中的路径②这种IO绕过文件系统层的cache。用户在打开要读写的文件的时候需要加上“O_DIRECT”标志意为直接IO不让文件系统的page cache介入。从用户角度而言应用程序能直接控制的IO形式除了上面提到的“缓存IO”剩下的IO都走的这种形式就算文件打开时加上了”O_SYNC”标志最终产生的IO也会进入蓄流链表图中的Plug List。如果应用程序在用户空间自己做了缓存那么就可以使用这种IO方式常见的如数据库应用。
 非缓存IO不带蓄流对应图中的路径③内核通用块层的蓄流机制只给内核空间提供了接口来控制IO请求是否蓄流用户空间进程没有办法控制提交的IO请求进入通用块层的时候是否蓄流。严格的说用户空间直接产生的IO都会走蓄流路径哪怕是IO的时候附上了“O_DIRECT”和”O_SYNC”标志可以参考《Linux通用块层介绍part1: bio层》中的蓄流章节用户间接产生的IO如文件系统日志数据、元数据有的不会走蓄流路径而是直接进入调度队列尽快得到调度。注意一点通用块层的蓄流只提供机制和接口而不提供策略至于需不需要蓄流、何时蓄流完全由内核中的IO派发者决定。
应用程序不管使用图中哪条IO路径内核都会想方设法对IO进行合并。内核为促进这种合并在IO协议栈上设置了三个最佳狙击点
* Cache页高速缓存
* Plug List蓄流链表
* Elevator Queue调度队列
### cache 合并
IO处在文件系统层的page cache中时只有IO数据还没有IO请求bio或request,只有page cache在读写的时候才会产生IO请求。本文主要介绍IO请求在通用块层的合并因此对于IO在cache层的合并只做现象分析不深入到内部逻辑和代码细节。
如果是缓存IO,用户进程提交的写数据会积聚在page cache中。cache保存IO数据的基本单位为page,大小一般为4K,因此cache又叫“页高速缓存” 用户进程提交的小块数据可以缓存到cache中的同一个page中最后回写线程将一个page中的数据一次性提交给通用块层处理。以dd程序写一个裸设备为例每次写1K数据连续写16次
  dd if=/dev/zero of=/dev/sdb bs=1k count=16
通过blktrace观测的结果为
  blktrace -d /dev/sdb -o - | blkparse -i -
![](https://www.ubuntukylin.com/upload/201806/1528254017439804.png)
bio请求在通用块层的处理情况主要是通过第六列反映出来的如果对blkparse的输出不太了解可以man一下blktrace。对照每一行的输出来看看应用程序产生的写IO经由page cache之后是如何派发到通用块层的
![](https://www.ubuntukylin.com/upload/201806/1528254026772374.png)
现阶段只关注IO是如何从page cache中派发到通用块层的所以后面的泻流、派发过程没有贴出来。回写线程kworker以8个扇区扇区大小为512B, 8个扇区为4K对应一个page大小为单位将dd程序读写的1K数据块派发给通用块层处理。dd程序写了16次回写线程只写了4次对应四次Qpage cache的缓存功能有效的合并了应用程序直接产生的IO数据。
文件系统层的page cache对读IO也有一定的作用带缓存的读IO会触发文件系统层的预读机制所谓预读有专门的预读算法通过判断用户进程IO趋势提前将存储介质上的数据块读入page cache中下次读操作来时可以直接从page cache中命中而不需要每次都发起对块设备的读请求。还是以dd程序读一个裸设备为例每次读1K数据连续读16次
  dd if=/dev/sdb of=/dev/zero bs=1K count=16
通过blktrace观测的结果为
  blktrace -d /dev/sdb -o - | blkparse -i -
![](https://www.ubuntukylin.com/upload/201806/1528254037273702.png)
同样只关注IO是如何从上层派发到通用块层的不关注IO在通用块层的具体情况先不考虑PIUDC等操作那么上面的输出可以简单解析为
![](https://www.ubuntukylin.com/upload/201806/1528254048278725.png)
读操作是同步的所以触发读请求的是dd进程本身。dd进程发起了16次读操作总共读取16K数据但是预读机制只向底层发送了两次读请求分别为0+32(16K), 32+64(32K)总共预读了16 + 32 = 48K数据并保存到cache中多预读的数据可以为后续的读操作服务。
### plug 合并
linuxer公众号中介绍bio和request的系列文章熟悉IO请求在通用块层的处理以及蓄流(plug)机制的原理和接口。特别推荐宋宝华老师写的《文件读写BIO波澜壮阔的一生》通俗易懂地介绍了一个文件io的生命周期。
每个进程都有一个私有的蓄流链表进程在往通用块层派发IO之前如果开启了蓄流功能那么IO请求在被发送给IO调度器之前都保存在蓄流链表中直到泄流(unplug)的时候才批量交给调度器。蓄流的主要目的就是为了增加请求合并的机会bio在进入蓄流链表之前会尝试与蓄流链表中保存的request进行合并,使用的接口为blk_attempt_plug_merge().本文是基于内核4.17分析的源码来源于4.17-rc1。
blk_attempt_plug_merge:
list_for_each_entry_reverse(rq, plug_list, queuelist) {
......
switch (blk_try_merge(rq, bio)) {
case ELEVATOR_BACK_MERGE:
merged = bio_attempt_back_merge(q, rq, bio);
break;
case ELEVATOR_FRONT_MERGE:
merged = bio_attempt_front_merge(q, rq, bio);
break;
case ELEVATOR_DISCARD_MERGE:
merged = bio_attempt_discard_merge(q, rq, bio);
break;
default:
break;
}
}
代码遍历蓄流链表中的request使用blk_try_merge找到一个能与bio合并的request并判断合并类型蓄流链表中的合并类型有三种ELEVATOR_BACK_MERGEELEVATOR_FRONT_MERGEELEVATOR_DISCARD_MERGE。普通文件IO操作只会进行前两种合并第三种是丢弃操作的合并不是普通的IO的合并故不讨论。
### bio后向合并 (ELEVATOR_BACK_MERGE)
为了验证IO请求在通用块层的各种合并形式准备了以下测试程序该测试程序使用内核原生支持的异步IO引擎可异步地向内核一次提交多个IO请求。为了减少page cache和文件系统的干扰使用O_DIRECT的方式直接向裸设备派发IO。
iotc.c
...
/* dispatch 3 4k-size ios using the io_type specified by user */
define NUM_EVENTS 3
define ALIGN_SIZE 4096
define WR_SIZE 4096
enum io_type {
SEQUENCE_IO,/* dispatch 3 ios: 0-4k(0+8), 4-8k(8+8), 8-12k(16+8) */
REVERSE_IO,/* dispatch 3 ios: 8-12k(16+8), 4-8k(8+8),0-4k(0+8) */
INTERLEAVE_IO, /* dispatch 3 ios: 8-12k(16+8), 0-4k(0+8),4-8k(8+8) */ ,
IO_TYPE_END
};
int io_units[IO_TYPE_END][NUM_EVENTS] = {
{0, 1, 2},/* corresponding to SEQUENCE_IO */
{2, 1, 0},/* corresponding to REVERSE_IO */
{2, 0, 1}/* corresponding to INTERLEAVE_IO */
};
char *io_opt = "srid:";/* acceptable options */
int main(int argc, char *argv[])
{
intfd;
io_context_t ctx;
struct timespec tms;
struct io_event events[NUM_EVENTS];
struct iocb iocbs[NUM_EVENTS],
*iocbp[NUM_EVENTS];
int i, io_flag = -1;;
void *buf;
bool hit = false;
char *dev = NULL, opt;
/* io_flag and dev got set according the options passed by user , dont paste the code of parsing here to shrink space */
fd = open(dev, O_RDWR | __O_DIRECT);
/* we can dispatch 32 IOs at 1 systemcall */
ctx = 0;
io_setup(32, &ctx);
posix_memalign(&buf,ALIGN_SIZE,WR_SIZE);
/* prepare IO request according to io_type */
for (i = 0; i < NUM_EVENTS; iocbp[i] = iocbs + i, ++i)
io_prep_pwrite(&iocbs[i], fd, buf, WR_SIZE, io_units[io_flag][i] * WR_SIZE);
/* submit IOs using io_submit systemcall */
io_submit(ctx, NUM_EVENTS, iocbp);
/* get the IO result with a timeout of 1S*/
tms.tv_sec = 1;
tms.tv_nsec = 0;
io_getevents(ctx, 1, NUM_EVENTS, events, &tms);
return 0;
}
测试程序接收两个参数第一个为作用的设备第二个为IO类型定义了三种IO类型SEQUENCE_IO顺序REVERSE_IO逆序INTERLEAVE_IO交替分别用来验证蓄流阶段的bio后向合并、前向合并和泄流阶段的request合并。为了减少篇幅此处贴出的源码删除了选项解析和容错处理只保留主干原版位于[点击此处](https://github.com/liuzhengyuan/iotc)。
为验证bio在蓄流阶段的后向合并用上面的测试程序iotc顺序派发三个写io:
./iotc-d/dev/sdb-s
-d指定作用的设备sdb-s指定IO方式为SEQUENCE_IO顺序表示顺序发起三个写请求bio0(0 + 8), bio1(8 + 8), bio2(16 + 8)。通过blktrace来观察iotc派发的bio请求在通用块层蓄流链表中的合并情况
blktrace -d /dev/sdb -o - | blkparse -i -
![](https://www.ubuntukylin.com/upload/201806/1528254084160608.png)
上面的输出可以简单解析为:
![](https://www.ubuntukylin.com/upload/201806/1528254095647471.png)
第一个bio(bio0)进入通用块层时此时蓄流链表为空于是申请一个request并用bio0初始化再将request添加进蓄流链表同时告诉blktrace蓄流已正式工作。第二个bio(bio1)到来的时候会走blk_attempt_plug_merge的逻辑尝试调用bio_attempt_back_merge与蓄流链表中的request合并发现正好能合并到第一个bio所在的request尾部于是直接返回。第三个bio(bio2)的处理与第二个同理。通过蓄流合并之后三个IO请求最终合并成了一个request(0 + 24)。用一副图来展示整个合并过程:
![](https://www.ubuntukylin.com/upload/201806/1528254105303637.png)
### bio前向合并 (ELEVATOR_FRONT_MERGE)
为验证bio在蓄流阶段的前向合并使用iotc逆序派发三个写io:
./iotc-d/dev/sdb-r
-r指定IO方式为REVERSE_IO逆序表示逆序发起三个写请求bio0(16 + 8),bio1(8 + 8), bio2(0 + 8)。blktrace的观察结果为
blktrace -d /dev/sdb -o - | blkparse -i -
![](https://www.ubuntukylin.com/upload/201806/1528254118631038.png)
上面的输出可以简单解析为:
![](https://www.ubuntukylin.com/upload/201806/1528254143306219.png)
与前面的后向合并相比唯一的区别是合并方式由之前的”M”变成了现在的”F”即在blk_attempt_plug_merge中走的是bio_attempt_front_merge分支。通过下面的图来展示前向合并过程
![](https://www.ubuntukylin.com/upload/201806/1528254164616153.png)
“plug合并”不会做request与request的进阶合并蓄流链表中的request之间的合并会在泄流的时候做即在下面介绍的“elevator合并”中做。
### elevator 合并
上面讲到的蓄流链表合并是为进程内的IO请求服务的每个进程只往自己的蓄流链表中提交IO请求进程间的蓄流链表相互独立互不干涉。但是多个进程可以同时对一个设备发起IO请求那么通用块层还需要提供一个节点让进程间的IO请求有机会进行合并。一个块设备有且仅有一个请求队列调度队列所有对块设备的IO请求都需要经过这个公共节点因此调度队列Elevator Queue是IO请求合并的另一个节点。
先回顾一下通用块层处理IO请求的核心函数blk_queue_bio(),上层派发的bio请求都会流经该函数或将bio蓄流到Plug List或将bio合并到Elevator Queue,或将bio生成request直接插入到Elevator Queue。blk_queue_bio()的主要处理流程为:
![](https://www.ubuntukylin.com/upload/201806/1528254202385663.png)
其中”A”标识的“合并到蓄流链表的request中”就是上一章介绍的“plug合并”。bio如果不能合并到蓄流链表中接下来会尝试合并到“B”标识的”合并到调度队列的request中”。”合并到调度队列的request中”只是“elevator合并”的第一个点。你可能已经发现了blk_queue_bio()将bio合并到蓄流链表或者将request添加进蓄流链表之后就没管了从路径①可以发现蓄流链表中的request最终都是要交给电梯调度队列的这正是”elevator合并”的第二个点关于泄流的时机请参考我之前写的《Linux通用块层介绍part1: bio层》。下面分别介绍这两个合并点
### bio合并到elevator
先看B表示的代码段
blk_queue_bio:
switch (elv_merge(q, &req, bio)) {
case ELEVATOR_BACK_MERGE:
if (!bio_attempt_back_merge(q, req, bio))
break;
elv_bio_merged(q, req, bio);
free = attempt_back_merge(q, req);
if (free)
__blk_put_request(q, free);
else
elv_merged_request(q, req, ELEVATOR_BACK_MERGE);
goto out_unlock;
case ELEVATOR_FRONT_MERGE:
if (!bio_attempt_front_merge(q, req, bio))
break;
elv_bio_merged(q, req, bio);
free = attempt_front_merge(q, req);
if (free)
__blk_put_request(q, free);
else
elv_merged_request(q, req, ELEVATOR_FRONT_MERGE);
goto out_unlock;
default:
break;
}
合并逻辑基本与”plug合并”相似先调用elv_merge接口判断合并类型然后根据是后向合并或是前向合并分别调用bio_attempt_back_merge和bio_attempt_front_merge进行合并操作由于操作对象从蓄流链表变成了电梯调度队列bio合并完了之后还需额外干几件事
1. 调用elv_bio_merged,该函数会调用电梯调度器注册的elevator_bio_merged_fn接口来通知调度器做相应的处理对于deadline调度器而言该接口为NULL。
2.寻找进阶合并参考我之前写的《Linux通用块层介绍part2: request层》中对进阶合并的描述如果bio产生了后向合并则调用attempt_back_merge试图进行后向进阶合并如果bio产生了前向合并则调用attempt_front_merge企图进行前向进阶合并。deadline的进阶合并接口为deadline_merged_requests 被合并的request会从调度队列中删除。通过下面的图示来展示后向进阶合并过程前向进阶合并同理。
![](https://www.ubuntukylin.com/upload/201806/1528254236803650.png)
3. 如果产生了进阶合并则被合并的request可以释放了参考上图可调用blk_put_request进行回收。如果只产生了bio合并合并后的request的长度和扇区地址都会发生变化需要调用elv_merged_request->elevator_merged_fn来更新合并后的请求在调度队列的位置。deadline对应的接口为deadline_merged_request其相应的操作为将合并的request先从调度队列移出再重新插进去。
“bio合并到elevator”的合并形式只会发生在进程间即只有一个进程在IO的时候不会产生这种合并形式原因在于进程在向调度队列派发IO请求或者试图与将bio与调度队列中的请求合并的时候是持有设备的队列锁得其他进程是不能往调度队列派发请求这也是通用块层单队列通道窄需要发展多队列的主要原因之一只有进程在将调度队列中的request逐个派发给驱动层的时候才会将设备队列锁重新打开即只有当一个进程在将调度队列中request派发给驱动的时候其他进程才有机会将bio合并到还未派发完的request中。所以想通过简单的IO测试程序来捕捉这种形式的合并比较困难这对两个IO进程的IO产生时序有非常高的要求故不演示。有兴趣的可以参考上面的github仓库里面有patch对内核特定的请求派发位置加上延时来改变IO请求本来的时序从而让测试程序人为的达到这种碰撞效果。
request在泄流的时候合并到elevator
通用块层的泄流接口为blk_flush_plug_list() 该接口主要的处理逻辑如下图所示
![](https://www.ubuntukylin.com/upload/201806/1528254245597629.png)
其中请求合并发生的点在__elv_add_request()。blk_flush_plug_list会遍历蓄流链表中的每个request然后将每个request通过_elv_add_request接口添加到调度队列中添加的过程中会尝试与调度队列中已有的request进行合并。
__elv_add_request:
case ELEVATOR_INSERT_SORT_MERGE:
/*
* If we succeed in merging this request with one in the
* queue already, we are done - rq has now been freed,
* so no need to do anything further.
*/
if (elv_attempt_insert_merge(q, rq))
break;
/* fall through */
case ELEVATOR_INSERT_SORT:
BUG_ON(blk_rq_is_passthrough(rq));
rq->rq_flags |= RQF_SORTED;
q->nr_sorted++;
if (rq_mergeable(rq)) {
elv_rqhash_add(q, rq);
if (!q->last_merge)
q->last_merge = rq;
}
q->elevator->type->ops.sq.elevator_add_req_fn(q, rq);
break;
泄流时走的是ELEVATOR_INSERT_SORT_MERGE分支正如注释所说的先让蓄流的request调用elv_attempt_insert_merge尝试与调度队列中的request合并如果不能合并则落入到ELEVATOR_INSERT_SORT分支该分支直接调用电梯调度器注册的elevator_add_req_fn接口将新来的request插入到调度队列合适的位置。其中elv_rqhash_add是将新加入到调度队列的request做hash索引这样做的好处是加快从调度队列寻找可合并的request的索引速度。
在泄流的时候调度队列中既有其他进程产生的request也有当前进程从蓄流链表中派发的requestblk_flush_plug_list是先将所有request派发到调度队列再一次性queue_unplugged而不是派发一个request就queue_unplugged。所以“request在泄流的时候合并到elevator”既是进程内的也可以是进程间的。
elv_attempt_insert_merge的实现只做request间的后向合并即只会将一个request合并到调度队列中的request的尾部。这对于单进程IO而言足够了因为blk_flush_plug_list在泄流的时候已经将蓄流链表中的request进行了list_sort按扇区排序。笔者曾经提交过促进进程间request的前向合并的patch见github但没被接收maintainerJens的解析是这种IO场景很难发生如果产生这种IO场景基本是应用程序设计不合理。通过增加时间和空间来优化一个并不常见的场景并不可取。
最后通过一个例子来验证进程内“request在泄流的时候合并到elevator”进程间的合并同样对请求派发时序有很强的要求在此不演示github中有相应的测试patch和测试方法。iotc使用下面的方式派发三个写io:
./iotc-d/dev/sdb-i
-i指定IO方式为INTERLEAVE_IO交替表示按扇区交替的方式发起三个写请求bio0(16 + 8),bio1(8 + 8), bio2(0 + 8)。blktrace的观察结果为
blktrace -d /dev/sdb -o - | blkparse -i -
![](https://www.ubuntukylin.com/upload/201806/1528254255647107.png)
上面的输出可以简单解析为:
![](https://www.ubuntukylin.com/upload/201806/1528254265486421.png)
bio0(16 + 8)先到达plug listbio1(0+8)到达时发现不能与plug list中的request合并于是申请一个request添加到plug list。bio2(8+8)到达时首先与bio1进行后向合并。之后进程触发泄流泄流接口函数会将plug list中的request排序因此request(0+16)先派发到调度队列此时调度队列为空不能进行合并。然后派发request(16+8),派发时调用elv_attempt_insert_merge接口尝试与调度队列中的其他request进行合并发现可以与request(0+16)进行后向合并于是两个request合并成一个最后向设备驱动派发的只有一个request(0+24)。整个过程可以用下面的图来展示:
![](https://www.ubuntukylin.com/upload/201806/1528254276774034.png)
### 小结
通过cache、plug和elevator自上而下的三层狙击应用程序产生的IO能最大限度的进行合并从而提升IO带宽降低IO延迟延长设备寿命。page cache打头阵既做数据缓存又做IO合并主要是针对小块IO进行合并因为使用内存页做缓存所以合并后的最大IO单元为页大小当然对于大块IO,page cache也会将它拆分成以页为单位下发这不影响最终的效果因为后面还有plug和elevator补刀。plug list竭尽全力合并进程内产生的IO,从设备的角度而言进程内产生的IO相关性更强合并的可能性更大plug list设计位于elevator queue之上而且又是每个进程私有的因此plug list既有利于IO合并又减轻了elevator queue的负担。elevator queue更多的是承担进程间IO的合并用来弥补plug list对进程间合并的不足如果是带缓存的IO这种IO合并基本上不会出现。从实际应用角度出发IO合并更多的是发生在page cache和plug list中。

View File

@ -1,47 +0,0 @@
# <center>如何对优麒麟的登录界面截图</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
有时用户需要对登录界面屏幕截图。例如如果用户想写一篇有关如何在优麒麟上安装Cinnamon 的技术文章登陆界面的截图就对初学者有帮助。无论你的原因是什么如果你想知道如何对优麒麟或Linux Mint的登陆界面截图让下面的技巧来告诉你怎么做吧。
对Ubuntu Kylin和Linux Mint的登录界面截图
这里的方法是创建一个可以从命令行界面运行的脚本,不要害怕这个脚本,使用它真的很简单。
第1步获取ImageMagic
打开终端然后使用以下命令安装ImageMagic。
sudo apt-get install imagemagick
第2步准备脚本
创建一个新的文件最好在你的home目录下将它命名为screenshot.sh或任何你喜欢的。在文件中添加以下几行
```
chvt 7;
sleep 5s;
DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0
xwd -root -out ~/screenshot.xwd;
convert ~/screenshot.xwd ~/screenshot.png;
rm ~/screenshot.xwd
```
在上述中chvt 7是虚拟控制台的数量。当你运行这个脚本后需要5秒来截图你可以把它改成任何你想要的数字会发现命名为screenshot.png的截图保存在你的home目录下。
第3步给脚本执行权限
你必须要给脚本执行权限:
sudo chmod +x screenshot.sh
第4步截图
现在当一切准备就绪后退出系统。进入用户登录模式后按Ctrl+Alt+F1输入你的用户认证然后像这样运行截图脚本
sudo ./screenshot.sh
一旦这个脚本运行时它会带你回到登录界面的图形界面chvt 7五秒钟后文件名为screenshot.png的截图将会保存在你的home目录下。
你可以根据自己的需要修改截图脚本。希望这个技巧能帮你对Ubuntu Kylin、Linux Mint或任何其他的Linux发行版的登录界面进行截图。如果你有任何疑问或建议随时欢迎与我们UK团队联系。

View File

@ -1,27 +0,0 @@
# <center>如何快速设置优麒麟系统更新频率[新手提示]</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
新手们也许都喜欢保持自己的系统是最新的无论是安全更新、系统更新或应用程序更新。并且不喜欢等一个星期。是的在默认情况下Ubuntu Kylin的更新管理器会自动的在每周弹出一次除非它是个安全更新。
如果你也想保持自己的系统更新更频繁,你可以更改**更新设置**。在这个初学者技巧中我们将看到怎样使你的Ubuntu Kylin桌面更加频繁地更新。
在Ubuntu Kylin中更改更新频率
在开始菜单中搜索“更新”或“update”点击“软件更新器”
<img src="https://www.ubuntukylin.com/public/wiki-0610/图片1.png"></img>
在“软件更新器”中,点击“设置”:
<img src="https://www.ubuntukylin.com/public/wiki-0610/2.png"></img>
在“软件和更新”中,进入“更新”选项卡。新手可以看到用于更新系统的设置。比如对于你自己来说,默认设置是每天检查更新,但普通的更新每周只显示一次,然而,如果有 一个安全更新,它会立即通知你。
为获得更频繁的有关更新的通知,你可以更改设置来立即通知任何更新,你可以更改以下设置:
<img src="https://www.ubuntukylin.com/public/wiki-0610/3.png"></img>
当然即使不经常更新你也可以改变更新频率来提示这个选项完全取决于你。考虑到你想保持你的系统是最新的你应该遵循这些技巧来加快Ubuntu Kylin系统更新速度。

27
基础操作/快速检查电脑是否配备USB-3-0.md Normal file → Executable file
View File

@ -1,12 +1,15 @@
# <center>快速检查电脑是否配备USB 3.0</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
越来越多的电脑开始配备USB 3.0端口但是如何知道您的电脑是否带有3.0端口以及哪个端口是3.0呢?方法如下:
打开终端,使用以下命令:
$ lsusb
该命令显示系统中的USB相关信息检查结果如果发现显示“3.0 root hub”字样表明系统带有USB 3.0。
<img src="https://www.ubuntukylin.com/upload/images/usb30.png"></img>
接下来如何识别哪个端口为USB 3.0呢?
通常USB 3.0端口带有SS标记Super Speed的缩写。如果硬件厂商没有标记SS或USB 3则检查端口内部的颜色USB 3.0通常为蓝色。
<img src="https://www.ubuntukylin.com/upload/images/usb3_0port.jpg"></img>
# <center>快速检查电脑是否配备USB 3.0</center>
#### <center>作者小K</center>
#### <center>2022-04-22 23:36:00</center>
越来越多的电脑开始配备USB 3.0端口但是如何知道您的电脑是否带有3.0端口以及哪个端口是3.0呢?方法如下:
打开终端,使用以下命令:
$ lsusb
该命令显示系统中的USB相关信息检查结果如果发现显示“3.0 root hub”字样表明系统带有USB 3.0。
<img src="https://www.ubuntukylin.com/upload/images/usb30.png"></img>
接下来如何识别哪个端口为USB 3.0呢?
通常USB 3.0端口带有SS标记Super Speed的缩写。如果硬件厂商没有标记SS或USB 3则检查端口内部的颜色USB 3.0通常为蓝色。
<img src="https://www.ubuntukylin.com/upload/images/usb3_0port.jpg"></img>

View File

@ -1,236 +0,0 @@
# <center>键盘快捷键设置</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
此页面提供了可以让你更有效地使用桌面和应用程序的键盘快捷键的总览。如果不能使用鼠标或其他指点设备,查看 键盘导航 来获取更多关于只使用键盘浏览用户界面的信息。
## 桌面常用快捷键
* Alt+F4
关闭当前窗口。
* Alt+F2
弹出命令行窗口(永远快速运行命令行)
* Alt+F7
调整当前窗口位置
* Alt+F8
调整当前窗口大小
* Alt+F9
最小化当前窗口
* Alt+F10
最大化当前窗口
* Alt+Tab
在窗口之间快速切换。
* Ctrl+Alt+方向键
在工作区之间切换。
* Ctrl+Alt+Shift+方向键
将当前窗口移至其他工作区。
* Ctrl+Alt+Delete
注销。
* Ctrl+Super+D
隐藏所有窗口并显示桌面。再次按下按钮可以恢复窗口。
* Ctrl+Alt+L
锁定屏幕。
* 在Ubuntu中打开终端的快捷键是Ctrl+Alt+T在终端中打开新的选项卡的快捷键是Ctrl+Shift+T。
* win+D
最小化所有窗口
* win+↑
最大化当前窗口
* win+↓
还原或者最小化窗口
* win+←或→
半最大化当前窗口
* Alt+鼠标左键
移动当前窗口
* Alt+鼠标中键拖拽
调整当前窗口大小
* Ctrl+L
资源管理器中显示当前目录路径
* Ctrl+H
资源管理器中显示所有文件和文件夹(隐藏文件夹)
* Alt+Enter
显示被选中文件或文件夹属性
* Alt+Home
将被选中文件或文件夹放置主目录下
* Ctrl+Alt+L
锁屏
* Ctrl+Alt+方向键
切换工作区
* Ctrl+Alt+shift+方向键
移动窗口到另一个工作区
* Alt+Tab
在栏目间切换
* Alt+鼠标左键
移动当前窗口
* Alt+鼠标中键拖拽
调整当前窗口大小
* Ctrl+L
资源管理器中显示当前目录路径
* Ctrl+H
资源管理器中显示所有文件和文件夹(隐藏文件夹)
* Alt+Enter
显示被选中文件或文件夹属性
* Alt+Home
将被选中文件或文件夹放置主目录下
* Ctrl+Alt+L
锁屏
* Ctrl+Alt+方向键
切换工作区
* Ctrl+Alt+shift+方向键
移动窗口到另一个工作区
* Alt+Tab
在栏目间切换
## 常用编辑快捷方式
* Ctrl+A
在列表中选择所有文本或项目。
* Ctrl+X
剪切(移除)选中文本或项目并将其置于剪贴板。
* Ctrl+C
复制选中文本或项目并将其置于剪贴板。
* Ctrl+V
粘贴剪贴板内的内容。
* Ctrl+Z
撤销最近一次操作。
## 从屏幕捕捉
* Print Screen
获取屏幕截图。
* Alt+Print Screen
获取窗口的截图,自动保存至图片文件夹下。
* Shift+Print Screen
获取屏幕上某个区域的截图。光标变为十字。点击并拖动选择区域,自动保存。

View File

@ -1,249 +0,0 @@
# <center>2004安装指南</center>
#### <center>作者:优麒麟官方公众号</center>
#### <center>2022-03-30 23:39:11</center>
<center>为防止超速翻车,建议通读全文后再进行操作。</center>
<center>(此处双系统以 Windows 10+优麒麟 20.04 LTS Pro SP1 为例,其他版本的系统仅供参考)</center>
## <center>01 安装前的准备</center>
### <center>四小步</center>
#### 第一步:查看电脑基础信息
在Windows中按"win+r"快捷键回车确认,输入"msinfo32",回车,出现系统信息界面,可查看 BIOS 模式:
BIOS有多种模式此教程以 **UEFI** 模式为例;
![图1-1-1.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图1-1-1.png)
#### 第二步:下载优麒麟镜像
官网下载:[优麒麟官网](https://www.ubuntukylin.com/downloads/osdownload-cn.html)
![图1-2-1.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图1-2-1.png)
页面下方还有多个开源镜像站下载途径可供选择;
![图1-2-2.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图1-2-2.png)
注:下载完成后,为确认优麒麟系统镜像的完整性,可以使用 MD5 校验工具(网页搜索下载即可)验证 MD5 值与官网的是否一致。
#### 第三步:准备一个 U 盘
打开冰箱门拿出一个新鲜的U盘或移动硬盘此处以 U 盘为例,光盘直接刻录即可)插在电脑上
要求U 盘实际容量大于 4G
#### 第四步:制作启动盘
此处推荐 Ventoy下载链接https://www.lanzoui.com/b01bd54gb
![图1-4-1.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图1-4-1.png)
Ventoy版本更新较快可选择新版不必使用和图里一样的版本
选择结尾为 windows.zip 的最新版本进行下载解压,接着进入解压目录,双击运行 Ventoy2Disk.exe。
![图1-4-2.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图1-4-2.png)
部分系统隐藏了后缀名直接选择Ventoy2Disk文件名即可
运行界面如下图所示:
![图1-4-3.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图1-4-3.png)
① 是插入的 U 盘信息;
② 是此 Ventoy 的版本信息;
③ 是 U 盘内的 Ventoy 版本信息(没有安装 Ventoy 的显示为空);
④ 是安装选项,点击安装,就可以将 Ventoy 安装进对应的 U 盘里;
<font color=#FF0000>注:此处安装会提示是否格式化,也就是清空 U 盘内的所有数据,请提前将 U 盘原有数据备份。</font>
安装完成后,设备内部 Ventoy 的版本信息就会显示出来,若内部版本低于安装包版本我们可以点击下方的“升级”选择进行升级。
![图1-4-4.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图1-4-4.png)
注:升级操作是安全的,不会让 U 盘里已有的镜像文件丢失。
Ventoy 安装成功后,将优麒麟系统的镜像文件复制进到 U 盘,如下图:
![图1-4-5.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图1-4-5.png)
此时 U 盘启动盘已经制作完成。以下为启动界面展示图:
![图1-4-6.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图1-4-6.png)
## <center>02 安装进行时</center>
### <center>三大步</center>
#### 第一步:关闭快速启动
<font color=#76923C>如果不关掉可能会存在无法进入 BIOS 的情况</font>
选择“控制面板--硬件和声音--电源选项--选择电源按钮的功能--更改当前不可用的设置”,在关机设置栏下找到“启动快速启动”,取消勾选,然后点击“保存修改”;
#### 第二步:进行磁盘分区
<font color=#FF0000>磁盘分区是为了给优麒麟操作系统分配空间,默认选择切分选定分区尾部的空间(考虑到机械硬盘的读写特性,尽可能切靠前的分区)</font>
首先需要在 Win10 上创建空白磁盘分区,选择“此电脑”--右键点击“管理”。
![图2-2-1.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-2-1.png)
进入“计算机管理”页,点击“存储>磁盘管理”,选择要分割的磁盘空间,右键点击该磁盘,选择“压缩卷”。
![图2-2-2.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-2-2.png)
此时会弹出压缩窗口,输入压缩空间量的大小,此处展示约分配 135G (空间分配建议最低不少于 30 G如果大小不够可以重新分配一下磁盘空间确保分区空余空间充足原分区的大小也足够使用。确认压缩空间量后点击“压缩”。
1G=1024MB为方便计算可以估算成 1G=1000MB。
![图2-2-3.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-2-3.png)
压缩结束后,会多出一块可用空间,磁盘分区到此结束。
![图2-2-4.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-2-4.png)
#### 第三步:正式安装
<font color=#76923C>插入制作好的 U 盘启动盘重启电脑在开机时按“F2”进入 BIOS 界面</font>
<font color=#FF0000>注:根据不同机型进入 BIOS 系统的快捷键有所不同,请根据自身机型搜索对应的快捷键进行操作。</font>
首先关闭安全启动通过左右方向键进入“Security”界面按上下方向键移动到“Secure Boot”选项回车进入修改状态按上下键选择“Disabled”回车确认。
![图2-3-1.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-1.png)
接着通过左右方向键进入“Boot”界面按上下方向键选择“Boot Option #1”选项卡,回车。选择启动方式为从 USB 启动,即选中自己的 U 盘,回车。
![图2-3-2.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-2.png)
之后通过左右方向键进入“Save & Exit”界面选择“Save Changes and Exit”回车。在弹出的选择框里选择“Yes”回车。
![图2-3-3.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-3.png)
现在电脑开始重新启动,然后你会看到优麒麟开源操作系统安装的准备界面:
![图2-3-4.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-4.png)
稍作等待,进入优麒麟新版安装界面,双击“安装 Kylin”。如下图
![图2-3-5.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-5.png)
接下来进入安装配置页面--选择语言、时区以及设置用户信息,大家根据自身情况进行设置哦。
![图2-3-6.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-6.png)
![图2-3-7.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-7.png)
直到出现选择安装方式界面,选择“自定义安装”。
<font color=#FF0000>注:记住我们是安装双系统,不要点击快速安装,否则有丢失数据的风险!</font>
![图2-3-8.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-8.png)
之后进到分区页面,如下图:
![图2-3-8.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-8.png)
可以看到,系统已经存在 Windows 系统,“空闲”对应的就是我们刚刚压缩出来的空闲分区。 因为我们是安装双系统,所以接下来我们要做的就是将优麒麟系统安装在这个空闲分区内。
选中“空闲”分区--点击最右侧的“添加”按钮,进入新建分区页面。
首先添加**根分区**,奇奇在此处分配的大小是 80G大家可以根据自身需求进行分配但一定要确保之后有充足的空间可供使用如下图
![图2-3-9.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-9.png)
由于 Windows 系统已经存在 EFI 引导分区了,所以我们再次不用添加 EFI 引导分区。
之后,添加 data 和 backup 分区,作为数据分区和备份还原分区,此处分别分配 20G。
![图2-3-10.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-10.png)
![图2-3-11.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-11.png)
全部分配完成后点击“下一步”,开始安装优麒麟开源操作系统。
![图2-3-12.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-12.png)
等待安装完成,点击“现在重启”。
重启后便会出现选择系统界面,如下图:
![图2-3-13.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图2-3-13.png)
通过上下键选择我们想要进入的系统,回车。到此,双系统已经安装好啦。
**<center>怎么样,你安装成功了吗?</center>**
## <center>03 常见问题解决方案</center>
### <center>希望你用不到</center>
**Q如果双系统安装完成后没有启动项选择界面该怎么解决**
A可能是启动项出现问题可以下载安装用 EasyBCD 软件修复启动项。
**Q配置完分区后提示没有根分区、EFI分区、数据备份或还原分区该怎么办**
A根分区对应的是“/”EFI 分区需要在分区时将“用于”类型改为 EFI数据备份分区对应的是“/data”还原分区对应的是“/backup”请根据提示查找对应的分区是否创建。
**Q配置完分区提示“只能存在一个 EFI 分区”,该怎么办?**
A应该是已有的 Windows 系统也存在 EFI 分区,我们需要把自己添加的 EFI 分区进行删除。
**Q笔记本安装完双系统之后进入 Windows 系统出现花屏,该怎么办?**
A笔记本只有集显在系统启动时会先加载优麒麟的显卡驱动以用来加载选择系统的界面致使在选择进入Windows时出现花屏情况
解决办法:首先,进入优麒麟系统中,打开 /etc/default/grub:
将如下语句取消注释即可(删掉 #)。
```
# Uncomment to disable graphical terminal (grub-pc only)
# GRUB_TERMINAL=console
```
Q使用 USB 启动盘安装时,出现"try ubuntu kylin without installation"或“install ubuntu kylin”Enter 选择“安装”后,显示器黑屏无任何显示,该怎么办?
A
方法一:显示黑屏,可能是显卡显示的支持有问题,尝试手动修复。
移动光标到"install ubuntu kylin" , 按"e"进入编辑模式,进入命令行模式,
![图3-1-1.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图3-1-1.png)
找到“quite splash”然后去掉“---”后添加“nomodeset”按 F10 安装。
![图3-1-2.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图3-1-2.png)
依照不同显卡进行不同显卡驱动选项的添加此处使用的是Nvidia显卡添加 nomodeset。
方法二移动光标到“Try Ubuntu Kylin without installing(safe graphics)”进入安全试用界面尝试使用。
**Q系统安装完成之后提示未检测到无线网卡该怎么办**
A:重启,然后在 grub 界面选择高级选项,选择低版本内核,回车,查看网络是否正常:
![图3-1-3.png](../assets/2004%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/图3-1-3.png)
## <center>04 结语</center>
如果有什么看不懂的地方或者在安装过程中出现了文章中未提及的问题欢迎小伙伴们前往优麒麟论坛https://www.ubuntukylin.com/ukylin/portal.php 进行反馈,我们将在第一时间为你解答!
以上内容转载自优麒麟公众号,部分内容根据现有情况有轻微改动
参考连接:
[【建议收藏】保姆级教程 | 图解Windows10+优麒麟双系统安装](https://mp.weixin.qq.com/s?src=11&timestamp=1648658432&ver=3708&signature=krwwCSKnEOcCs3358xSUJRnfwCOySXn2Zr1A3quF8NvWVU5YIGkYno2*shdVN0b5EEJmOmWpLGjixc5BqIBItB384y9oxdYfTU1LeygnqhZ94BBfKCTLHhZtdwVRaoA1&new=1)

View File

View File

@ -1,67 +0,0 @@
# <center>2004升级到2204可能会遇到的问题</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:49:17</center>
在2204发布初期此文档和腾讯文档的[2004升级2204可能出现的问题](https://docs.qq.com/doc/https://docs.qq.com/doc/DWEFMQU1HVkRaa2NX)进行双向同步,部分内容为方便展示会临时放在腾讯文档并尽可能快的同步至此
此处升级特指使用公众号文章里的命令升级,重装请无视,并不是所有问题都会出现,每个人的情况不同
建议:关闭锁屏,关闭休眠,千万不要自己中断升级过程或者强制关机,建议在自己空闲的时候升级
1. 升级过程中卡到了火狐浏览器?
- 答:并不是卡住不动了,是在下载火狐,稍微等等看
2. 搜狗输入法不能使用了或者按键反应很慢?
- 答先切换到终端输入fcitx -r然后切换到搜狗如果提示有libidn.so这个库就手动安装libidn11这个库先切换到别的输入法然后
```
sudo apt install libidn11
```
也可能缺少liblber-2.4.so.2也需要手动安装libldap-2.4-2
```
sudo apt install libldap-2.4-2
```
之后重新输入fcitx -r关闭所有终端即可
3. 腾讯文档原生版本打不开了?
- 答:需要修改启动的快捷方式,主要原因是腾讯没有适配新版本
终端输入
```
sudo pluma /usr/share/applications/com.qq.docs.tdappdesktop.desktop
```
然后找到exec那行在最后加上--no-sandbox参数变成类似这样的
```
/opt/apps/com.qq.docs.tdappdesktop/files/bin/tdappdesktop %U --no-snadbox
```
刚刚测试发现,加上参数了只是能显示登录界面,我这里没办法成功登录
4. 软件商店有问题无法打开?
- 答:首先看一下商店是否是用了旧版的商店可以使用下方的命令查看
```
dpkg -l|grep ubuntu-kylin-software-center
```
如果是类似下方的内容出现则是因为商店的版本错误
```
ii ubuntu-kylin-software-center
```
通过执行下方命令重新安装新版商店即可
```
sudo apt install kylin-software-center
```
5. 火狐浏览器打开下载文件夹,提示无法获取系统图标
- 答:通过执行以下命令,然后重启:
```
sudo sed -i '$a QT_QPA_PLATFORMTHEME=ukui' /etc/environment
```

159
常见问题/QA.md Normal file → Executable file
View File

@ -1,159 +0,0 @@
# <center>Q&A</center>
#### <center>作者:陌生人</center>
#### <center>2022-03-28 21:28:05</center>
此文档和腾讯文档的[Q&A](https://docs.qq.com/doc/DWFRHUVVCS01zeUFj)进行双向同步,部分内容为方便展示会临时放在腾讯文档并尽可能快的同步至此
1. 我在系统更新的时候可以强制打断吗?
- 答绝对不可以在下载更新的时候可以打断但是一旦进入安装更新无论如何也不要打断否则会出现不可预知的后果轻则桌面异常重则无法进入系统需要使用live修复
2. 我该怎么更新系统呢?
- 答:开始菜单里有一个软件更新器,打开以后会自动更新软件信息并提示有哪些可以更新,可以手动选择需要更新的组件,也可以默认安装全部更新
3. 优麒麟后续对树莓派还提供镜像吗比如树莓派4B8G版本博通的四核BCM 2711Cortex A72架构
- 答短期没有提供树莓派版本的计划需求人数比较多的话会考虑再上架。引用自官方Q&A
4. 有没有类似win下的任务管理器
- 答有的在任务栏右键看看有没有一个系统监视器没有的话就是没有安装有两个选择一个是ukui-system-monitor,在开始菜单里找一个系统监视器绿色图标的另一个是mate-system-monitor,在开始菜单里找mate系统监视器如果都没有可以在商店里安装
5. 刷新有没有用,为什么我的系统没有刷新(不是特指优麒麟,优麒麟有)
- 答:本质上,刷新是没有用的,估计优麒麟是为了兼容用户习惯做的刷新,可能也考虑到桌面文件排布的问题
6. 怎么安装字体?
- 答:在商店里搜索字体安装器,安装以后双击打开字体就可以
7. 银河麒麟和优麒麟有什么区别
- 答两者都是由麒麟软件公司主导的项目优麒麟是社区开源版本基于ubuntu做的本土化处理银河是商业版闭源和以前的核高基项目里的同名但是不是一个东西且银河购买以后有专门的售后支持优麒麟有不懂的只能在社区论坛等求助目前个人用户不推荐使用银河有个售后的问题
8. 可以使用老毛桃大白菜启动ISO镜像吗
- 答不可以这类pe适合启动Windows镜像对Linux不适合
9. 系统使用的时候反应卡顿怎么办?
- 答在硬件足够的情况下卡顿一般是因为显卡驱动通常出现在英伟达的独显机器上可以安装闭源驱动解决如果是intel的集显卡顿可以试着更新一个新一点的内核
10. 优麒麟可以共享打印机给win吗
- 答可以而且很方便只要优麒麟可以驱动打印机正常打印就可以正常分享出来然后在win里直接使用但是有的高级特性可能不支持不过最基本的打印是可以的
- 首先确保优麒麟可以驱动打印机正常打印,然后具体操作可参考:
优麒麟设置:
建议 通过ip共享也就是http共享
- 系统设置---打印机--- 添加 ---安装好打印机驱动
- 系统设置---打印机--服务器 --- 设置 ----所有钩钩都打上,允许从互联网访问。
- 从网络连接找到自己的本地ip点击就可以看到然后记下来
- 通过浏览器访问
```
http://localhost:631/printers
```
- 就可以看到 你共享出来的打印机名称,如果需要输入密码输入自己的登录密码即可
win设置
- 打开windows浏览器输入打印机所在网址加端口
- http://上边记下来的ip:631/printers
- 进入cups界面点击列出的需要共享的打印机把浏览器地址栏中的内容复制下来此内容包括打印机地址及名称。
- 通过windows控制面板添加打印机选择“我需要的打印机未列出”选择“按照名称共享打印机”把复制的内容放入url确保windows能找到linux的打印机。点击下一步驱动选择“generic”-》“MS Publisher Color Printer”或“MS Publisher Imagesetter”都可以
11. 优麒麟可以使用扫描仪吗?
- 答:可以,只要有对应的驱动就可以通过麒麟扫描去连接扫描仪,先看一下自己的扫描仪的品牌,一般都是扫描仪和打印机一体的机器,大部分都是惠普,三星,爱普生的打印机,去对应官网搜打印机的型号,找到对应的驱动,然后安装,一般情况下也会安装上扫描仪的驱动
12. 有没有免驱的USB网卡
- 答可以找芯片型号是瑞昱RTL8818CU的usb网卡直接插上就可以用本人亲测也可以开热点可能品牌不太一样只要用的芯片是这个型号的就可以除此之外瑞昱RTL8818ETV也可以应该是芯片型号只要是RTL8818的就可以不用在意品牌
13. 可以更换文件或者文件夹图标吗?
- 答:不好更换,相对来说更换可执行程序的启动图标比较容易,其他的不管是更换对应类型的图标或者是文件夹的图标都是需要修改底层的一些东西,虽说不会破坏系统但是也不推荐一般用户修改
14. 有防火墙吗?我该如何配置?
- 答有一个纯命令行的ufw需要从商店安装还有一个基于ufw的gufw使用图形化配置默认是允许本地端口出禁止远程端口入这样别人不可以链接到你的电脑但是也不会妨碍自己的正常上网建议大家安装并开启默认一般不会有问题另外不太建议关闭整个防火墙除非感觉自己被入侵的几率很小银河建议无论何时不要全部关闭
15. 目录下文件夹很多我应该怎么找到自己常用的文件夹?
- 答使用peony的标记功能在找到自己需要的东西时可以右键选择添加标记然后就可以在左下角的所有标记里筛选自己在这里标记过的文件或者文件夹
16. 我可以使用root登录吗
- 答极不推荐使用root登录用root登录会导致某些软件的异常并且权限太高容易导致系统崩溃
17. 删除不了系统目录里的文件夹,提示无权限
- 答:根目录的文件夹是系统目录,如果随意删除会导致系统直接崩溃,除非你能知道你做的事情是什么,但是如果你知道正在做的事情那么你应该是知道如何处理
18. 我可以使用开机自动挂载吗我看网上有修改fstab做到开机挂载的
- 答:可以但是不推荐,权限问题需要特别注意,很容易导致挂载上但是自己无权限修改挂载分区里的文件,而且网上的教程参差不齐,不小心就会导致系统崩溃
19. 我看有人教我用sudo rm -rf /* 清理垃圾可以吗?
- 答:危险!!!此命令是删除所有磁盘的所有数据
20. 我在终端输入密码没反应怎么办?
- 答:这个是因为安全问题,密码没有回显,并不是没有输入,输入完成后直接回车即可
21. 我要怎么备份和恢复系统?
- 答我的控制面板好像有问题没有显示可以在终端执行deja-dup来唤起备份恢复的命令需要注意的是恢复时会直接覆盖需要做好恢复前的备份以防再次丢失文件
22. 优麒麟自带gnome和mate吗
- 答gnome和mate是两套桌面环境优麒麟2004的桌面环境是ukui3.0使用qt自己写的1804是基于mate修改的ukui2.0mate是从gnome分离开的一套环境虽然没有自带这两套完整的桌面环境但是其中的组件是可以在优麒麟上正常使用的
23. 优麒麟可以用微信嘛
- 答:可以,去软件商店选择相应版本的微信下载,即可使用,注意:不是网页版,是客户端
24. 优麒麟可以下载ed2k链接嘛
- 答可以去软件商店下载迅雷将链接复制到粘贴板打开迅雷即可开始ed2k生活
25. 优麒麟如何进行远程操作、远程办公
- 答:可以去软件商店下载“向日葵”这款免费软件(功能升级需要收费,免费版已经适合大部分场景需要),即可享受远程控制、办公的乐趣
26. 优麒麟可以自定义壁纸嘛
- 答:可以,去控制面板->背景设置自定义背景即可方便的话还可以去申请一个麒麟ID登录其子应用--云账户同步自己的个性化工作环境;或者是打开图片然后右键设置为壁纸,需要注意的是图片一旦设置成壁纸了就不要移动位置,否则的话壁纸会消失不见
27. 安装或者启动的时候弹窗提示The System is running in low graphics mode
- 答一般是显卡驱动不正确导致的可以在启动的grub菜单加上nomodeset临时解决进入桌面后再正确安装驱动
28. 设置了自定义壁纸但是不见了,变黑了等
- 答:一般来源于自定义壁纸移动了位置,可以把位置还原,或者是重新设置,测试建议壁纸在家目录,不要在需要挂载的地方
29. 怎么调整搜狗的字号大小?
- 答:搜狗输入法右键设置,或者是点击输入法最后的那个小齿轮的图标,调出搜狗的设置,在外观选项卡,里边有一个字体大小,修改即可更改候选框的字体大小
30. 怎么修改磁盘的卷标?
- 答找到磁盘软件gnome-disks找到想要编辑的分区然后选择分区的小齿轮也就是设置选择编辑文件系统就可以了
31. 新安装的优麒麟不识别无线怎么办?
- 答可以使用控制面板的关于页面看看自己是不是5.10的OEM内核如果是那么可能来源于软件包的不完整可以回退到5.4内核,具体详情请在优麒麟微信群问
32. 安卓程序是白屏或者黑屏怎么办?
- 答可以看下右上角的三个杠杠然后找到设置切换一下渲染模式如果显卡或者CPU性能过低也有可能出现不排除是底层转译库的问题
33. 安卓环境卡住怎么办?
- 答可能是CPU太老不支持docker或者是docker权限问题先看一下CPU一般近五年的CPU都可以
34. 怎么查看硬盘寿命?
- 答:磁盘工具,不同类型的硬盘需要看的参数不同,机械主要看通电时间,物理坏道,逻辑坏道可以通过格式化解决,固态是擦写次数和剩余擦写次数
35. 我升级了系统但是内核没有更新
- 答:系统升级的时候一般不会升级内核的大版本,需要自己手动安装
36. 更新以后系统组件工作不正常比如peony闪退
- 答:可能是长期未更新或者是跨版本更新导致的,可以把所有可以更新的软件都更新一下,不要只更新一个组件
37. 优麒麟有哪些版本?
- 答从架构来说有两个X86和树莓派但是树莓派版本支持好像不是太好的X86就是64位版本又叫x86_64、AMD64从支持的时间来说有LTS长期支持版和STS短期支持版从2004开始优麒麟只维护ubuntu的LTS版应该是没有精力维护STS版本了LTS是提供5年的安全支持STS是只有9个月官网下载的也都是LTS版本的优麒麟的版本命名规则是"发布年份.发布月份"一般直接去掉中间的点去简写比如2004是指在2020年的4月份发布的2104是在2021年的4月发布的每个双数年的4月份是LTS其他时间发布的STS比如201021042110这些都是STS这个看的是大版本好后边可能会有一个发布的小版本号都是在大版本上基础上打上了安全补丁初始版本慢慢升级也会变成同样的比如2004.1这种
38. 我用ssh登录自己电脑提示port 22 connection failed怎么办
- 答防火墙禁止22端口了一般不会除非是特意关闭了更换了ssh端口ssh的服务端没有安装或者启动可以安装openssh-server或者是使用sudo service ssh restart来重启
39. 更新内核的时候提示空间不足如何解决?
- 答如果有boot单独分区那么是boot分区分配的空间不足如果boot没有单独分区是根目录空间不足可以清理以前不用的内核来释放空间或者对根分区扩容或者清理不需要的软件。
40. KMRE自定义安装的程序卸载不了
- 方法一:在开始菜单里找到想卸载的程序,右键卸载;
- 方法二在终端输入sudo apt install kylin-installer后重试方法一
41. 安装完微信登录提示error Message
- 答大概率是因为登录的网页版微信因为腾讯做了白名单的机制可以使用kmre版本或者是wine版本
42. QQ微信的字体都是方块
- 答:大部分是因为没有字体,一般安装宋体,仿宋,黑体基本可以解决
43. 如何去掉桌面的通知中心和文件管理器的透明效果?
- 答:控制面板->个性化->主题->特效模式
44. 怎么双击安装deb包
- 答在商店里查找kylin-installer如果默认搜索结果结果是空的可以点击那个全库搜索安装以后就可以双击安装deb
45. kmre无法启动提示未运行
- 答可能是cpu太过老旧不支持kmre一般十年内的CPU都是可以支持的如果CPU较新但是仍然无法启动请在优麒麟的微信群求助
46. 找不到软件商店了怎么办?
- 答:这个就只能用命令了,在终端输入
```
sudo apt install kylin-software-center
```
回车以后即可安装好商店
47. 优麒麟安装的不识别我的nvme固态了怎么回事
- 答因为BIOS默认的SATA mode是RAID需要改成AHCI才可以识别但是需要注意的是改变了以后win可能是需要重装的
48. 我怎么在终端里连续使用sudo有办法吗
- 答可以使用sudo -i可以让这个终端临时的提升到root权限不掉然后执行命令结束的时候可以使用exit退出root环境
49. 怎么隐藏分区使其不会挂载?
- 答:终端运行 blkid 查看需隐藏的分区 UUID 号
然后超级权限编辑以下文件
```
sudo pluma /usr/lib/udev/rules.d/80-udisks2.rules
```
按照以下格式替换你需要隐藏的 UUID 号对应的分区PS逗号是英文的这个内容需要写到一行屏幕宽度问题可能看起来是换行的
```
ENV{ID_FS_UUID}=="18e72db3-ebb6-458a-956a-b3bf9ac2fd09", ENV{UDISKS_IGNORE}="1"
```
保存重启这样的话在本系统的文件管理器中就看不到你隐藏的分区了,并且不会自动挂载,取消的话删除即可
50. 自定义apk安装的程序在哪里可以看到
- 答:开始菜单或者是商店的移动应用里都可以看到,如果没有的话可以试着重启一下
51. 怎么修改grub设置
- 答:有两个办法,一个是在终端使用命令手动编辑
```
sudo pluma /etc/default/grub
```
还有就是使用grub-customizer用图形界面编辑在商店搜索Grub Customizer
![图片1.png](../assets/QA/%E5%9B%BE%E7%89%871.png)
可以使用图形界面编辑
52. 商店提示0001错误怎么处理
- 答可以看看自己有没有安装python3-pyqt5这个包如果没有的话可以安装一下试试看装好以后再重启商店应该就没问题了如果已经安装了还是报这个错那就不清楚了
53. 用root不能启动百度云/原生微信
- 答用electron的如果官方没有做处理都是不能用root或者sudo打开的这是谷歌v8引擎的设置需要添加--no-sandbox才可以用root启动

View File

@ -1,27 +0,0 @@
# <center>rtl8168无线网卡无法上网</center>
#### <center>作者:陌生人</center>
#### <center>2022-03-29 00:24:34</center>
前些天在微信群发现有人的网卡不能识别,一开始以为是内核版本问题,然后降级了内核还是不行,通过命令
```
lspci
```
看到网卡是rtl8168的系统上通过lsmod看到也有驱动rtl816x的驱动但是依旧无法识别从Ubuntu论坛查到了原因因为r8169本身也支持不少8168的设备同一件设备两个驱动都宣称支持。因此对于rtl8168需要手动安装软件源的**r8168-dkms**软件包,命令如下:
```
sudo apt install r8168-dkms
```
除此之外,还可以使用
```
sudo pluma /etc/modprobe.d/r8168-dkms.conf
```
```
#blacklist r8169
```
这句取消注释以禁用系统自动加载8169的驱动不过这个操作会让8169的设备也用不了8169的驱动如果不换网卡的话可以使用
参考链接:
[r8168网卡ubuntu18.04开机经常加载r8169的驱动](https://forum.ubuntu.org.cn/viewtopic.php?t=490829)

View File

@ -1,16 +0,0 @@
# <center>新人指南</center>
#### <center>作者:陌生人</center>
#### <center>2022-04-15 13:43:05</center>
此文档和腾讯文档的[新人手册](https://docs.qq.com/sheet/DWEV2Z3dTZWJPZ3pl)进行双向同步,部分可能会有版权问题的内容会放在腾讯文档中
| 名称| 链接 |备注|来源|
| ------------ | ------------ |------------ |------------ |
| 优麒麟百科 | https://ubuntukylin.github.io/ |搭建在github上访问可能有些慢可以多试几次里边也有很多问答可以看下有没有自己需要的|优麒麟官方|
| 2004安装图文 | https://mp.weixin.qq.com/s/h7Lcyb5-PqB0q-pHUINCug |暂无 | 优麒麟官方公众号 |
| 2004安装视频 | https://www.bilibili.com/video/BV1TP4y1x7fR/ | | 陌生人 |
| 1804安装视频 | https://www.bilibili.com/video/BV1M7411v7v2/ |防止在2004的双安装器里误用了1804的安装器 | 陌生人 |
| 懒人版优麒麟操作系统20.04 LTS PRO | https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=194554 | | 优麒麟论坛 |
| Q&A常见问题 | [Q&A](./%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/QA.md) |常见问题说明,大多是一些大家不明白的问题 | 陌生人 |
| 银河麒麟Linux系统从入门到办公到精通\|国产操作系统\|优麒麟\|UOS\|Deepin | https://www.bilibili.com/video/BV1Hv411p7HG?spm_id_from=333.999.0.0 |系列视频,比较长,目前大部分银河,部分优麒麟 | Linux重度使用 |
| 为什么 WPS 和 Office 中显示的版式不一致? | https://my.oschina.net/chipo/blog/5044536 | | chipo |
| 关机或重启等待90秒1分30秒的问题 | https://my.oschina.net/chipo/blog/5062815 | | chipo |

View File

@ -1,160 +0,0 @@
# <center>Linux上的文件类型与默认图标</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
## Linux上的文件类型与默认图标
**引言**
也许小伙伴们对 Linux 已经有一定程度的了解,或者已经是一名能够在工作和生活中活用它的 Linux 用户了。随着桌面环境的不断发展Linux 系统已经不再仅仅是一个面向极客和开发者的操作系统了,在 PC 上,上手 Linux 桌面已经可以变得像上手Windows 桌面一样简单。
本篇文章是一篇纯黑的技术软文,讲的是我们平时一般不会在意的东西,而且不会涉及具体编程方面的知识,所以小伙伴们不用担心文章过于晦涩难懂,尽情的一边喝茶一边涨知识吧!
### Windows上的文件类型与默认图标
在Windows上文件类型基于唯一后缀名进行区分比如——文本类型的后缀名是”.txt”而Win32应用程序的后缀名是“.exe”。在win10系统中这些后缀名默认被隐藏在文件管理器的选项中更改设置为显示就能够看到每个文件的后缀名了。
对于每一种文件类型Windows上都有一个默认图标一般exe的图标不是默认的而是应用自己定制的它的默认图标可以由默认打开它的应用决定比如——使用winrar作为默认应用打开”.zip”压缩文件那么所有的”.zip”类型文件默认图标都会变成winrar的图标而使用2345好压作为默认打开应用默认图标又会改变。
### Linux与Windows并不完全相同
在Linux系统上有一些文件没有后缀名比如Linux上的文本文件即使不加txt后缀一样的能够作为文本文件存在并被正确地显示和打开。
我们右键文本文件图标,打开属性窗口,可以看到“类型”:
![](https://www.ubuntukylin.com/upload/201812/1544597804892983.png)
我们可以推测:默认图标的显示是与这个类型属性相关的。
### 让我们做一个实验
为了验证这个结论,我们需要做一个小实验。
* 实验系统Ubuntu Kylin 18.10
* 实验对象doc、docx类型文件
* 实验方法:安装/卸载wps
也许大家没有注意过在安装或者卸载了系统上的wps以后doc和docx等类型文件的默认图标也改变了如果没有刷新或者重启一下
一般从优麒麟官网上下载的增强版自带了wps我们打开一个目录创建一个doc和docx文档
![](https://www.ubuntukylin.com/upload/201812/1544597909746823.png)
打开属性窗口:
![](https://www.ubuntukylin.com/upload/201812/1544600648905345.png)
![](https://www.ubuntukylin.com/upload/201812/1544600648593032.png)
可以看到它们的文件类型那么接下来我们打开终端Ctrl+Alt+T输入
sudo apt remove wps-office
![](https://www.ubuntukylin.com/upload/201812/1544600689772744.png)
![](https://www.ubuntukylin.com/upload/201812/1544600727686021.png)
卸载wps接下来回到刚才创建的doc和docx所在的目录刷新一下
![](https://www.ubuntukylin.com/upload/201812/1544600745317428.png)
这个时候的默认图标类型已经变了,接着再打开属性:
![](https://www.ubuntukylin.com/upload/201812/1544600761749681.png)
![](https://www.ubuntukylin.com/upload/201812/1544600786228952.png)
同样的文件,文件类型改变的同时图标也跟着改变,所以,之前所提出的推论是对的。
那么,我们在安装/卸载wps的时候它究竟做了什么
### MIME-Info database
我们可以看到在卸载wps的时候出现了一些mime相关的配置事实上Linux上的文件类型标准就是这个MIME-Info database所有文件类型相关的配置包括默认图标都是在这个database中定义的。
大家如果有兴趣,可以参考:[点击此处](https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-0.18.html)
/usr/share/mime/packages目录下存放着相关配置文件其中freedesktop.org.xml 是 Linux 默认的文件类型基准。在这里,我们先找到 wps-office-wps.xml并打开
![](https://www.ubuntukylin.com/upload/201812/1544600831986186.png)
其中comment、mime-type就是属性窗口中的文件类型
alias type顾名思义是mime-type的别名所以这些文件类型就被wps-office.doc覆盖了
generic-icon name即文件类型的默认图标名
glob partten如果文件名中有匹配则认为是该类型。
在/usr/share/icons目录下存放着默认图标
![](https://www.ubuntukylin.com/upload/201812/1544600848817269.png)
Linux的判断文件类型的最优先基准往往是通过文件名中的字段如果字段和MIME-database匹配则认为是该文件类型。然而并非所有文件类型都规定了匹配字段它们依旧能够确定类型但是如果重命名后包含了MIME-database的匹配字段则会优先使用对应类型覆盖原有的类型。
实际上在之前举出的本文件创建的例子中不需要后缀名的原因是文本类型的文件在创建的时候已经被赋予了MIME type只要文件名不与其它MIME type的基准冲突这个文本文件就能正常的显示和打开。
### DIY一个文件类型的图标
小伙伴们也许现在还有点一头雾水,没关系,接下来的干货才是重头戏;前面的看不懂?没关系,自己动手做一次,马上就理解了。
![](https://www.ubuntukylin.com/upload/201812/1544600873149787.png)
可以看到,命名为.so的文件的默认图标已经被小编改成了自己的图案那么究竟是怎么做到的呢接下来我们一步一步的完成。
**1、准备图标**
首先我们需要准备自己的文件类型图片一般使用png格式即可文件图标可以在网上下载自己喜欢的也可以使用GIMP自己绘制然后导出小编这里为了方便就自己简单的画了一下。GIMP可以在开始菜单中搜索gimp得到
![](https://www.ubuntukylin.com/upload/201812/1544600900397307.png)
![](https://www.ubuntukylin.com/upload/201812/1544600900866148.png)
关于GIMP的使用小编也是小白所以就不罗嗦了大家有兴趣的话自行百度一下吧。
我们打开/usr/share/icons/ukui-icon-theme目录:
![](https://www.ubuntukylin.com/upload/201812/1544604859921343.png)
我们把准备好的图标放进对应尺寸文件夹的mimetypes目录下比如48x48的png放到/usr/share/icons/ukui-icon-theme/48x48/mimetypes目录下。
由于在/usr/share目录下操作需要管理员权限所以建议以管理员身分运行文件管理器优麒麟18.10上,在终端输入:
sudo peony
就可以以管理员身分运行文件管理器当然小伙伴们也可以使用sudo cp在终端操作。
还有,这里一定要注意,我们不同尺寸目录下的图标文件名必须一样,不然等会儿图片会找不全。
**2、编写自己的配置文件**
就像wps做的那样我们也需要自己写一个.xml文件来覆盖原有的文件类型这同样需要管理员权限。
我们在/usr/share/mime/packages目录下创建一个文本文件命名为XXX.xml这里小编的是sharedlib.xml输入以下内容。
![](https://www.ubuntukylin.com/upload/201812/1544603156648367.png)
最关键的是alias type、generic-icon name和glob pattern三项。保存退出。
![](https://www.ubuntukylin.com/upload/201812/1544601011883301.png)
**3、更新**
现在我们的.so文件还没有变因为我们还需要手动更新它。
依次执行:
sudo gtk-update-icon-cache /usr/share/icons/ukui-icon-theme/
sudo update-mime-database -V /usr/share/mime
第一条命令将我们的自定图片更新到cache中使得文件管理器能够通过cache找到我们的icon
第二条命令将我们对配置的更改更新至MIME-database中这样我们的自定义配置就生效了。
我们刷新一下在看看,.so文件是不是变了打开.so文件的属性发现它的内容和mime-type也已经变成了我们自己写的类型。
也许有小伙伴们会问,为什么只有.so文件变了.so.1.2.3之类的文件没有变呢这就是glob参数的作用了大家有兴趣可以研究一下freedesktop.org.xml文件里面有对于application/x-sharedlib原来glob的标注不光是.so也能够识别类似.so.1.2.3的类型。
不知到大家是否有所收获呢本篇文章虽然没有涉及代码编程但是不同的人看一定会有不同的体会和收获吧在行文中小编凸显了一些细节也略写了一些细节希望大家看完这篇软文以后能够有所精进让我们在Linux的道路上共同进步吧。

View File

@ -1,47 +1,47 @@
# <center>Linux中你一定要掌握的网络基本命令!</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
不论你是一个有追求的 Linux 系统管理者,或是 Linux 狂热者,这些基础且重要的 Linux 网络命令你一定要了解!
在学习 Linux 的过程中,大家都会非常注意命令行的运用,想必也看过很多书来进行学习。在今天的文章中,我(注:作者为 Abhishek Prakash给大家总结一下曾让我在计算机网络工程这门课上帮助我拿到高分的网络命令集。欢迎大家拿出小抄赶紧记上希望对你也有用哦。
### 网络连通性
Ping发送一个 ICMP 回声请求消息给主机,一直持续到到你按下 Ctrl+C 。Ping 表示一个包通过 ICMP 从你的机器发送出去然后在IP层得到回应。Ping 可以检测你与另一台主机是否连通。
Telnet host在指定的端口与主机交互。telnet 端口默认是 23。其他比较常用的端口有回送端口7用来发送邮件 SMTP 25用户查询79。使用 Ctrl+] 退出 telnet。
### ARP
ARP 是用来将 IP 地址转换为以太网地址的。Root 用户可以增加/删除 ARP 条目。其中 ARP 的条目都是缓存在内核中的一般在20分钟后会自动删除。但 root 用户可以创建永久性的 ARP 条目。
arp -a打印 ARP 表
arp -s[pub]:增加条目
arp -a -d删除所有条目
### 路由
netstat -r打印路由表。路由表存储在内核中ip 通过它来将包发送到外网。
routed执行动态路由选择的 BSD 守护进程。实现 RIP 路由协议。只能在 root 权限下使用。
gatedgated 是实现 RIP 的另一个路由守护进程。同时使用 OSPF/EGP/RIP 。只能在 root 权限下使用。
traceroute可用来追踪IP数据包经过的路由信息。
netstat -rnf inet可显示 IPv4 的路由表。
sysctl net.inet.ip.forwarding=1使数据包继续传递把一个主机变成路由
routeroute 命令用来在路由表中设置静态路由。所有从 PC 到 IP/SubNet 的信息都要经过指定的网关 IP。这命令还可以用来设定默认路由。
route add|delete [-net|-host]:添加/删除静态路由route add 192.168.20.0/24 192.168.30.4)。
route flush删除所有路由。
route add -net 0.0.0.0 192.168.10.2:增加一个默认路由。
### 重要文件
/etc/hostsIP地址及名字
/etc/networksIP地址及网络名字
/etc/protocols协议号及协议名字
/etc/servicestcp/udp服务名字对应的端口号
### 工具以及网络性能分析
ifconfig[up]:开启接口
ifconfig[down|delete]:停止接口
tcpdump -i -vvv抓取和分析数据包的工具
netstat -w [seconds] -l [interface]:显示网络设置和数据
### 其他
nslookup通过查询 DNS 服务器将 IP 转换成名字,或把名字转换成 IP。比如nslookup ubuntukylin.com 会得到 ubuntukylin.com 的IP地址。
ftp在本地主机和远程主机之间传送文件。
rlogin远程登陆主机。
# <center>Linux中你一定要掌握的网络基本命令!</center>
#### <center>作者:小K</center>
#### <center>2022-04-22 23:36:00</center>
不论你是一个有追求的 Linux 系统管理者,或是 Linux 狂热者,这些基础且重要的 Linux 网络命令你一定要了解!
在学习 Linux 的过程中,大家都会非常注意命令行的运用,想必也看过很多书来进行学习。在今天的文章中,我(注:作者为 Abhishek Prakash给大家总结一下曾让我在计算机网络工程这门课上帮助我拿到高分的网络命令集。欢迎大家拿出小抄赶紧记上希望对你也有用哦。
### 网络连通性
Ping发送一个 ICMP 回声请求消息给主机,一直持续到到你按下 Ctrl+C 。Ping 表示一个包通过 ICMP 从你的机器发送出去然后在IP层得到回应。Ping 可以检测你与另一台主机是否连通。
Telnet host在指定的端口与主机交互。telnet 端口默认是 23。其他比较常用的端口有回送端口7用来发送邮件 SMTP 25用户查询79。使用 Ctrl+] 退出 telnet。
### ARP
ARP 是用来将 IP 地址转换为以太网地址的。Root 用户可以增加/删除 ARP 条目。其中 ARP 的条目都是缓存在内核中的一般在20分钟后会自动删除。但 root 用户可以创建永久性的 ARP 条目。
arp -a打印 ARP 表
arp -s[pub]:增加条目
arp -a -d删除所有条目
### 路由
netstat -r打印路由表。路由表存储在内核中ip 通过它来将包发送到外网。
routed执行动态路由选择的 BSD 守护进程。实现 RIP 路由协议。只能在 root 权限下使用。
gatedgated 是实现 RIP 的另一个路由守护进程。同时使用 OSPF/EGP/RIP 。只能在 root 权限下使用。
traceroute可用来追踪IP数据包经过的路由信息。
netstat -rnf inet可显示 IPv4 的路由表。
sysctl net.inet.ip.forwarding=1使数据包继续传递把一个主机变成路由
routeroute 命令用来在路由表中设置静态路由。所有从 PC 到 IP/SubNet 的信息都要经过指定的网关 IP。这命令还可以用来设定默认路由。
route add|delete [-net|-host]:添加/删除静态路由route add 192.168.20.0/24 192.168.30.4)。
route flush删除所有路由。
route add -net 0.0.0.0 192.168.10.2:增加一个默认路由。
### 重要文件
/etc/hostsIP地址及名字
/etc/networksIP地址及网络名字
/etc/protocols协议号及协议名字
/etc/servicestcp/udp服务名字对应的端口号
### 工具以及网络性能分析
ifconfig[up]:开启接口
ifconfig[down|delete]:停止接口
tcpdump -i -vvv抓取和分析数据包的工具
netstat -w [seconds] -l [interface]:显示网络设置和数据
### 其他
nslookup通过查询 DNS 服务器将 IP 转换成名字,或把名字转换成 IP。比如nslookup ubuntukylin.com 会得到 ubuntukylin.com 的IP地址。
ftp在本地主机和远程主机之间传送文件。
rlogin远程登陆主机。

452
新手必看/Linux命令及Linux终端的20个趣事.md Normal file → Executable file
View File

@ -1,226 +1,226 @@
# <center>Linux命令及Linux终端的20个趣事</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
玩Linux其乐无穷哈哈。不相信。记住我的话在文章结尾时你就会相信Linux确实好玩了。
![](https://www.ubuntukylin.com/upload/images/tl0.png)
### 命令sl (蒸汽机车)
你可能了解 ls 命令,并经常使用它来查看文件夹的内容。但是,有些时候你可能会拼写成 sl ,这时我们应该如何获得一些乐趣而不是看见“command not found”呢
安装 sl
![](https://www.ubuntukylin.com/upload/images/tl1.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl2.png)
![](https://www.ubuntukylin.com/upload/images/t13.png)
当你敲入的是LS而不是ls这个命令也会运行。
### 命令telnet
非也非也这可不像它平常那样复杂。你可能很熟悉telnet。Telnet 是一个文本化的双向网络协议。这里不需要安装什么东西。你需要的就是一个Linux系统和一个连通的网络。
![](https://www.ubuntukylin.com/upload/images/t14.png)
![](https://www.ubuntukylin.com/upload/images/tl5.png)
### 命令fortune
试试你未知的运气,终端里有时也有好玩的。
安装 fortune
![](https://www.ubuntukylin.com/upload/images/tl6.png)
### 命令rev翻转
它会把传递给它的的每个字符串都反过来,是不是很好玩。
![](https://www.ubuntukylin.com/upload/images/tl7.png)
### 命令factor
该谈点儿关于Mathematics的了这个命令输出给定数字的所有因子。
![](https://www.ubuntukylin.com/upload/images/tl8.png)
### 命令script
好的,这不是什么命令,而是一个脚本,一个很有趣的脚本。
![](https://www.ubuntukylin.com/upload/images/tl9.png)
### 命令Cowsay
一个在终端用ASCII码组成的小牛这个小牛会说出你想要它说的话。
安装Cowsay
![](https://www.ubuntukylin.com/upload/images/tl10.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl11.png)
如果用管道将fortune command命令重定向到cowsay会怎样呢
root@tecmint:~# fortune | cowsay
![](https://www.ubuntukylin.com/upload/images/tl12.png)
提示:‘|是管道命令符。通常它是将一个命令的输出作为下一个命令的输入。在上面的例子中fortune的输出作为cowsay命令的输出。管道命令会经常用在脚本和程序编写中。
xcowsay是一个图形界面程序。它与cowsay类似只是以一种图形的方式来表达可以说是X版本的cowsay。
![](https://www.ubuntukylin.com/upload/images/tl13.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl14.png)
![](https://www.ubuntukylin.com/upload/images/tl15.png)
cowthink是另一个命令。运行“cowthink Linux is sooo funny ”看看它与cowsay的不同吧。
![](https://www.ubuntukylin.com/upload/images/tl16.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl17.png)
### 命令yes
yes 是一个非常有趣又有用的命令,尤其对于脚本编写和系统管理员来说,它可以自动地生成预先定义的响应或者将其传到终端。
![](https://www.ubuntukylin.com/upload/images/tl18.png)
提示: (直到你按下ctrl+c才停止)
### 命令: toilet
什么?你在开玩笑吗! 当然没有,但肯定的是这个命令的名字太搞了,我也不知道这个命令的名字从何而来。
安装toilet
![](https://www.ubuntukylin.com/upload/images/tl19.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl20.png)
这个命令甚至提供了一些颜色和字体格式。
![](https://www.ubuntukylin.com/upload/images/tl21.png)
提示Figlet 是另外一个与toilet产生的效果类似的命令。
### 命令cmatrix
你可能看多好莱坞的电影黑客帝国并陶醉于被赋予Neo的能看到在矩阵中任何事物的能力或者你会想到一幅类似于Hacker的桌面的生动画面。
安装 cmatrix
![](https://www.ubuntukylin.com/upload/images/tl23.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl24.png)
### 命令: oneko
可能你坚信Linux的鼠标指针永远是同样的黑色或白色一点儿也不生动那你就错了。“oneko”是一个会让一个“Jerry”你的鼠标指针附着到你鼠标上的一个软件包。
安装 oneko
![](https://www.ubuntukylin.com/upload/images/tl25(1).png)
输出
![](https://www.ubuntukylin.com/upload/images/tl26.png)
![](https://www.ubuntukylin.com/upload/images/tl27.png)
提示关闭运行着oneko的终端时Jerry也会随之消失重新启动终端时也不会再出项。你可以将这个程序添加到启动选项中然后继续使用它。
### Fork炸弹
这是一段非常欠抽的代码。运行这个命令的后果自己负责。这个命令其实是一个fork炸弹它会以指数级的自乘直到所有的系统资源都被利用了或者系统挂起想要见识这个命令的威力你可以试一次这个命令但是后果自负记得在运行它之前关掉并保存其它所有程序和文件
![](https://www.ubuntukylin.com/upload/images/tl28.png)
### 命令while
下面的”while“命令是一个脚本这个脚本可以为你提供彩色的日期和文件直到你按下中断键ctrl+c。复制粘贴这个命令到你的终端。
![](https://www.ubuntukylin.com/upload/images/tl29.png)
![](https://www.ubuntukylin.com/upload/images/tl30.png)
提示:以上脚本通过下面的修改也会产生类似的输出但是还是有点不同的,在你的终端试试吧。
![](https://www.ubuntukylin.com/upload/images/tl31.png)
### 命令: espeak
将你的多媒体音箱的音量调到最大,然后在将这个命令复制到你的终端,来看看你听到上帝的声音时的反应吧。
安装 espeak
![](https://www.ubuntukylin.com/upload/images/tl32.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl33.png)
### 命令: aafire
在你的终端放一把火如何。把这个“aafire”敲到你的终端不需要什么引号看看这神奇的一幕吧。按下任意键中指该程序。
安装 aafire
![](https://www.ubuntukylin.com/upload/images/tl34.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl35.png)
![](https://www.ubuntukylin.com/upload/images/tl36.png)
### 命令: bb
首先安装“apt-get install bb”,然后敲入“bb”看看会发生什么吧。
![](https://www.ubuntukylin.com/upload/images/tl37.png)
![](https://www.ubuntukylin.com/upload/images/tl38.png)
### 命令: url
如果在你的朋友面前用命令行来改变你的 twitter status 会不会很酷呢。用你的用户名密码和你想要的状态分别替换username, password 和“your status message“就可以了。
![](https://www.ubuntukylin.com/upload/images/tl39.png)
### ASCIIquarium
想要在终端弄一个水族馆该,怎么办?
![](https://www.ubuntukylin.com/upload/images/tl40.png)
### 安装 ASCIIquarium
下载并安装ASCIIquarium。
![](https://www.ubuntukylin.com/upload/images/tl41.png)
最后在终端运行“asciiquarium”或者“/usr/local/bin/asciiquarium”记得不要加引号神奇的一幕将在你眼前展现。
![](https://www.ubuntukylin.com/upload/images/tl42.png)
![](https://www.ubuntukylin.com/upload/images/tl43.png)
### 命令: funny manpages
首先安装“apt-get install funnymanpages”然后运行下面命令的man手册。其中一些
![](https://www.ubuntukylin.com/upload/images/tl44.png)
### Linux Tweaks
该到了做一些优化的时候了
![](https://www.ubuntukylin.com/upload/images/tl45.png)
Linux总是sexywho | grep -i blonde | date; cd ~; unzip; touch; strip; finger; mount; gasp; yes; uptime; umount; sleep如果你知道我的意思
还有一些其它的命令只是这些命令并不能在所有的系统上运行所以本文没有涉及到。比如说dog , filter, banner
使用愉快,你可以稍后再对我说谢谢:)
# <center>Linux命令及Linux终端的20个趣事</center>
#### <center>作者:小K</center>
#### <center>2022-04-22 23:36:00</center>
玩Linux其乐无穷哈哈。不相信。记住我的话在文章结尾时你就会相信Linux确实好玩了。
![](https://www.ubuntukylin.com/upload/images/tl0.png)
### 命令sl (蒸汽机车)
你可能了解 ls 命令,并经常使用它来查看文件夹的内容。但是,有些时候你可能会拼写成 sl ,这时我们应该如何获得一些乐趣而不是看见“command not found”呢
安装 sl
![](https://www.ubuntukylin.com/upload/images/tl1.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl2.png)
![](https://www.ubuntukylin.com/upload/images/t13.png)
当你敲入的是LS而不是ls这个命令也会运行。
### 命令telnet
非也非也这可不像它平常那样复杂。你可能很熟悉telnet。Telnet 是一个文本化的双向网络协议。这里不需要安装什么东西。你需要的就是一个Linux系统和一个连通的网络。
![](https://www.ubuntukylin.com/upload/images/t14.png)
![](https://www.ubuntukylin.com/upload/images/tl5.png)
### 命令fortune
试试你未知的运气,终端里有时也有好玩的。
安装 fortune
![](https://www.ubuntukylin.com/upload/images/tl6.png)
### 命令rev翻转
它会把传递给它的的每个字符串都反过来,是不是很好玩。
![](https://www.ubuntukylin.com/upload/images/tl7.png)
### 命令factor
该谈点儿关于Mathematics的了这个命令输出给定数字的所有因子。
![](https://www.ubuntukylin.com/upload/images/tl8.png)
### 命令script
好的,这不是什么命令,而是一个脚本,一个很有趣的脚本。
![](https://www.ubuntukylin.com/upload/images/tl9.png)
### 命令Cowsay
一个在终端用ASCII码组成的小牛这个小牛会说出你想要它说的话。
安装Cowsay
![](https://www.ubuntukylin.com/upload/images/tl10.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl11.png)
如果用管道将fortune command命令重定向到cowsay会怎样呢
root@tecmint:~# fortune | cowsay
![](https://www.ubuntukylin.com/upload/images/tl12.png)
提示:‘|是管道命令符。通常它是将一个命令的输出作为下一个命令的输入。在上面的例子中fortune的输出作为cowsay命令的输出。管道命令会经常用在脚本和程序编写中。
xcowsay是一个图形界面程序。它与cowsay类似只是以一种图形的方式来表达可以说是X版本的cowsay。
![](https://www.ubuntukylin.com/upload/images/tl13.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl14.png)
![](https://www.ubuntukylin.com/upload/images/tl15.png)
cowthink是另一个命令。运行“cowthink Linux is sooo funny ”看看它与cowsay的不同吧。
![](https://www.ubuntukylin.com/upload/images/tl16.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl17.png)
### 命令yes
yes 是一个非常有趣又有用的命令,尤其对于脚本编写和系统管理员来说,它可以自动地生成预先定义的响应或者将其传到终端。
![](https://www.ubuntukylin.com/upload/images/tl18.png)
提示: (直到你按下ctrl+c才停止)
### 命令: toilet
什么?你在开玩笑吗! 当然没有,但肯定的是这个命令的名字太搞了,我也不知道这个命令的名字从何而来。
安装toilet
![](https://www.ubuntukylin.com/upload/images/tl19.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl20.png)
这个命令甚至提供了一些颜色和字体格式。
![](https://www.ubuntukylin.com/upload/images/tl21.png)
提示Figlet 是另外一个与toilet产生的效果类似的命令。
### 命令cmatrix
你可能看多好莱坞的电影黑客帝国并陶醉于被赋予Neo的能看到在矩阵中任何事物的能力或者你会想到一幅类似于Hacker的桌面的生动画面。
安装 cmatrix
![](https://www.ubuntukylin.com/upload/images/tl23.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl24.png)
### 命令: oneko
可能你坚信Linux的鼠标指针永远是同样的黑色或白色一点儿也不生动那你就错了。“oneko”是一个会让一个“Jerry”你的鼠标指针附着到你鼠标上的一个软件包。
安装 oneko
![](https://www.ubuntukylin.com/upload/images/tl25(1).png)
输出
![](https://www.ubuntukylin.com/upload/images/tl26.png)
![](https://www.ubuntukylin.com/upload/images/tl27.png)
提示关闭运行着oneko的终端时Jerry也会随之消失重新启动终端时也不会再出项。你可以将这个程序添加到启动选项中然后继续使用它。
### Fork炸弹
这是一段非常欠抽的代码。运行这个命令的后果自己负责。这个命令其实是一个fork炸弹它会以指数级的自乘直到所有的系统资源都被利用了或者系统挂起想要见识这个命令的威力你可以试一次这个命令但是后果自负记得在运行它之前关掉并保存其它所有程序和文件
![](https://www.ubuntukylin.com/upload/images/tl28.png)
### 命令while
下面的”while“命令是一个脚本这个脚本可以为你提供彩色的日期和文件直到你按下中断键ctrl+c。复制粘贴这个命令到你的终端。
![](https://www.ubuntukylin.com/upload/images/tl29.png)
![](https://www.ubuntukylin.com/upload/images/tl30.png)
提示:以上脚本通过下面的修改也会产生类似的输出但是还是有点不同的,在你的终端试试吧。
![](https://www.ubuntukylin.com/upload/images/tl31.png)
### 命令: espeak
将你的多媒体音箱的音量调到最大,然后在将这个命令复制到你的终端,来看看你听到上帝的声音时的反应吧。
安装 espeak
![](https://www.ubuntukylin.com/upload/images/tl32.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl33.png)
### 命令: aafire
在你的终端放一把火如何。把这个“aafire”敲到你的终端不需要什么引号看看这神奇的一幕吧。按下任意键中指该程序。
安装 aafire
![](https://www.ubuntukylin.com/upload/images/tl34.png)
输出
![](https://www.ubuntukylin.com/upload/images/tl35.png)
![](https://www.ubuntukylin.com/upload/images/tl36.png)
### 命令: bb
首先安装“apt-get install bb”,然后敲入“bb”看看会发生什么吧。
![](https://www.ubuntukylin.com/upload/images/tl37.png)
![](https://www.ubuntukylin.com/upload/images/tl38.png)
### 命令: url
如果在你的朋友面前用命令行来改变你的 twitter status 会不会很酷呢。用你的用户名密码和你想要的状态分别替换username, password 和“your status message“就可以了。
![](https://www.ubuntukylin.com/upload/images/tl39.png)
### ASCIIquarium
想要在终端弄一个水族馆该,怎么办?
![](https://www.ubuntukylin.com/upload/images/tl40.png)
### 安装 ASCIIquarium
下载并安装ASCIIquarium。
![](https://www.ubuntukylin.com/upload/images/tl41.png)
最后在终端运行“asciiquarium”或者“/usr/local/bin/asciiquarium”记得不要加引号神奇的一幕将在你眼前展现。
![](https://www.ubuntukylin.com/upload/images/tl42.png)
![](https://www.ubuntukylin.com/upload/images/tl43.png)
### 命令: funny manpages
首先安装“apt-get install funnymanpages”然后运行下面命令的man手册。其中一些
![](https://www.ubuntukylin.com/upload/images/tl44.png)
### Linux Tweaks
该到了做一些优化的时候了
![](https://www.ubuntukylin.com/upload/images/tl45.png)
Linux总是sexywho | grep -i blonde | date; cd ~; unzip; touch; strip; finger; mount; gasp; yes; uptime; umount; sleep如果你知道我的意思
还有一些其它的命令只是这些命令并不能在所有的系统上运行所以本文没有涉及到。比如说dog , filter, banner
使用愉快,你可以稍后再对我说谢谢:)

View File

@ -1,79 +1,95 @@
# <center>Linux新手大礼包学习Linux你必须知道的那些事儿</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
 
  欢迎加入 Linux 的大家庭!对你来说,这可能还是一个陌生的领域,不过相信随着逐步深入的了解,你会喜欢上 Linux喜欢上开源的首先让我们来看一下Linux新手应该注意和了解哪些事情吧
### 1. 认识几个大牛
Linus Torvalds
生于1969年12月28日的芬兰赫尔辛基市拥有美国国籍。他是 Linux 内核的最早作者,随后发起了这个开源项目,担任 Linux 内核的首席架构师与项目协调者,是当今世界最著名的电脑程序员、黑客之一。他还发起了 Git 这个开源项目,并为主要的开发者。
Richard Matthew Stallman
简称 RMS生于1953年3月16日美国自由软件运动的精神领袖、GNU 计划 以及自由软件基金会的创立者。作为一个著名的黑客他的主要成就包括Emacs及后来的 GNU EmacsGNU C 编译器及GDB调试器。他所写作的GNU通用公共许可证是世上最广为采用的自由软件许可证为Copyleft观念开拓出一条崭新的道路。
Eric Steven Raymond
生于1957年12月4日程序员《大教堂与市集》的作者、《新黑客词 典》("Jargon File"的维护人、著名黑客。作为《新黑客词典》的主要编撰人以及维护者雷蒙很早就被认为是黑客文化的历史学家以及人类学家。但是在1997年以 后,雷蒙被广泛公认为是开放源代码运动的主要领导者之一,并且是最为大众所知道(并最具争议性)的黑客。
### 2. 了解Linux家族的明星成员
  **Red Hat Enterprise Linux**Red Hat Enterprise Linux 是 Red Hat 公司的 Linux 发行版,面向商业市场,包括大型机。红帽公司从 Red Hat Enterprise Linux 5 开始对企业版 LINUX 的每个版本提供10年的支持Red Hat Enterprise Linux 常简作 RHEL。Red Hat Enterprise Linux 大约3年发布一个新版本。
  **Fedora Linux**Fedora Linux 是较具知名度的 Linux 发行版之一。它是一套功能完备、更新快速的免费操作系统。而对赞助者 Red Hat 公司而言,它是许多新技术的测试平台,被认为可用的技术最终会加入到 Red Hat Enterprise Linux 中。
  **Centos**CentOS 全名为“社区企业操作系统”Community Enterprise Operating System是Linux发布版之一它是来自于 Red Hat Enterprise Linux 依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码因此有些要求高度稳定性的服务器以CentOS替代商业版的 Red Hat Enterprise Linux 使用。两者的不同,在于 CentOS 并不包含封闭源代码软件。CentOS 对上游代码的主要修改是为了卸载不能自由使用的商标。
  **Ubuntu**Ubuntu 是一个以桌面应用为主的 GNU/Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ Ubuntu ”一词,意思是“人性”。 Ubuntu 基于 Debian 发行版,与 Debian 的不同在于它每6个月会发布一个新版本。
  **SUSE Linux**SUSE 是 Linux 操作系统其中一个发布版也是德国的一个发布版。SUSE Linux 目前专注于企业市场。
  **openSUSE**openSUSE 是一个开放社区的计划,号称“最美丽的 Linux 发行版”。
  **Debian**Debian 是一种自由操作系统,全称 Debian GNU/Linux由Debian计划Debian Project组织维护Debian 是一个纯粹由自由软件所组合而成的操作环境。
  **Archlinux**Arch Linux(或称Arch)是一种以轻量简洁为设计理念的Linux发行版。其开发团队秉承简洁、优雅、正确和代码最小化的设计宗旨。Arch Linux 项目受 CRUX 启发,由 Judd Vinet 于2002年启动。
更多Linux版本请看这里 [Linux系统家族族谱](https://code.csdn.net/groups/7587/discources/935281)
### 3. 初学者必读的Linux基础书籍  
  要想学好Linux你至少需要一本好入门教材、一本linux指令参考手册、linux系统管理手册、讲解linux系统原理的书。这里我们推荐几部公认的好书
[《 鸟哥的Linux私房菜 基础学习篇》](https://book.douban.com/subject/4889838/) 鸟哥 著;人民邮电出版社
[《 鸟哥的Linux私房菜 服务器架设篇》](https://book.douban.com/subject/10794788/) 鸟哥 著;机械工业出版社
[《 Linux命令、编辑器与Shell编程》](https://book.douban.com/subject/25750712/) [美]索贝尔(Sobell·M.G.) 著; 清华大学出版社
[《 Linux设备驱动程序》](https://book.douban.com/subject/1723151/) 科波特 著; 中国电力出版社
[《 深入理解Linux内核》](https://book.douban.com/subject/2287506/) (美)博韦,西斯特 著; 中国电力出版社
[《 UNIX环境高级编程》](https://book.douban.com/subject/1788421/) W.Richard Stevens / Stephen A.Rago 著;人民邮电出版社
### 4. 熟悉Linux常用命令
* man 任何时候你觉得对一个命令行不是很确定都可以通过输入“man + 命令”来了解这个命令能确切是做什么的。
* ls :列出目录内容。
* pwd :在终端中显示当前工作目录的全路径。
* cd :要变更你当前所在的目录。
* mkdir :创建一个新的目录。
* cp :复制文件/重命名文件。
* mv :移动文件。
* find 和 locate搜索文件。
* kill :快速关闭一个进程。
* passwd :更改密码。
* md5sum 计算和检验MD5信息签名
* history :查询历史记录命令。
* sudo (super user do)命令允许授权用户执行超级用户或者其它用户的命令。
* touch :创建一个新文件,或者将文件的访问和修改时间更新为当前时间。
* chmod :修改文件的访问权限。
* chown :改变文件拥有者和所在用户组。
* apt APT是一个为Debian系列系统UbuntuKubuntu等等开发的高级包管理器在Gnu/Linux系统上它会为包自动智能地搜索、安装、升级以及解决依赖问题。
### 5. 小心新手常犯的几个错误 
 **不要以根用户登录**这是使用Unix的惯例除非必须那么不要轻易在根用户下运行任何东西。 
 **文件命名混乱**:避免使用美元符($),括弧和百分号(%等特殊字符这些字符对于shell有着特殊意义可能会引起冲突。避免使用空格不要使用无效字符“/”是根目录专用的。 
 **所有文件都混在一起**将Home目录放在一个独立的分区上可以在你重装系统甚至升级你的整个版本而不会丢失你的数据和个人设置。 
 **试图点击运行.exe文件**除非你安装了WINE双击那些.exe文件毫无用处。新用户需要知道无论是Linux还是Windows都只会运行针对自身系统开发的应用程序。  
 **以默认格式向微软Office用户发送OpenOffice文档**微软产品对其它操作系统和其它应用程序的友好性并不强许多新Linux用户在共享文件给朋友时往往会遇到麻烦因为对方无法阅读他们共享的文件格式因此新Linux用户要注意存储文件的格式确保它们能够被微软类似应用所打开。
 **忽视更新**新的更新可以为一些新的漏洞打上补丁。维持更新可以在一个易受损的系统与一个安全的系统之间构造分水岭。Linux的安全来自于不断地维护。    
 以上是一些操作习惯方面的错误,还有一些技术类型的错误,你可以查看《 避免UNIX和Linux中的常见错误》
### 6. 常去逛逛一些Linux社区和网站
国内的专业Linux网站
  [ChinaUnix](https://www.chinaunix.net/) 创办于2001年是一个以讨论Linux/Unix类操作系统技术、软件开发技术、数据库技术和网络应用技术等为主的开源技术社区网站。
  [LinuxCN](https://linux.cn/)Linux中国是专注于中文Linux技术、资讯的社区在这里你可以获得一手的Linux资讯和技术知识。
国外著名Linux网站
  [Linux Online](https://www.linux.org/) 最权威的Linux网站文章讨论无所不包软件硬件应有尽有。
  [Linux国际协会(Linux International)](https://li.org/)有大量的Linux资源列表。
  [Linux](https://www.linux.com/)学习Linux的最好网站也是Linux使用经验的汇聚地。
  [Linuxforums](https://www.linuxforums.org/) 提供Linux的软件资源Linux论坛Linux服务器发行版的信息LINUX文章教程等信息的综合性网站。
# <center>Linux新手大礼包学习Linux你必须知道的那些事儿</center>
#### <center>作者小K</center>
#### <center>2022-04-22 23:36:00</center>
 
  欢迎加入 Linux 的大家庭!对你来说,这可能还是一个陌生的领域,不过相信随着逐步深入的了解,你会喜欢上 Linux喜欢上开源的首先让我们来看一下Linux新手应该注意和了解哪些事情吧
### 1. 认识几个大牛
Linus Torvalds
生于1969年12月28日的芬兰赫尔辛基市拥有美国国籍。他是 Linux 内核的最早作者,随后发起了这个开源项目,担任 Linux 内核的首席架构师与项目协调者,是当今世界最著名的电脑程序员、黑客之一。他还发起了 Git 这个开源项目,并为主要的开发者。
Richard Matthew Stallman
简称 RMS生于1953年3月16日美国自由软件运动的精神领袖、GNU 计划 以及自由软件基金会的创立者。作为一个著名的黑客他的主要成就包括Emacs及后来的 GNU EmacsGNU C 编译器及GDB调试器。他所写作的GNU通用公共许可证是世上最广为采用的自由软件许可证为Copyleft观念开拓出一条崭新的道路。
Eric Steven Raymond
生于1957年12月4日程序员《大教堂与市集》的作者、《新黑客词 典》("Jargon File"的维护人、著名黑客。作为《新黑客词典》的主要编撰人以及维护者雷蒙很早就被认为是黑客文化的历史学家以及人类学家。但是在1997年以 后,雷蒙被广泛公认为是开放源代码运动的主要领导者之一,并且是最为大众所知道(并最具争议性)的黑客。
### 2. 了解Linux家族的明星成员
**Red Hat Enterprise Linux**Red Hat Enterprise Linux 是 Red Hat 公司的 Linux 发行版,面向商业市场,包括大型机。红帽公司从 Red Hat Enterprise Linux 5 开始对企业版 LINUX 的每个版本提供10年的支持Red Hat Enterprise Linux 常简作 RHEL。Red Hat Enterprise Linux 大约3年发布一个新版本。
**Fedora Linux**Fedora Linux 是较具知名度的 Linux 发行版之一。它是一套功能完备、更新快速的免费操作系统。而对赞助者 Red Hat 公司而言,它是许多新技术的测试平台,被认为可用的技术最终会加入到 Red Hat Enterprise Linux 中。
**Centos**CentOS 全名为“社区企业操作系统”Community Enterprise Operating System是Linux发布版之一它是来自于 Red Hat Enterprise Linux 依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码因此有些要求高度稳定性的服务器以CentOS替代商业版的 Red Hat Enterprise Linux 使用。两者的不同,在于 CentOS 并不包含封闭源代码软件。CentOS 对上游代码的主要修改是为了卸载不能自由使用的商标。
**Ubuntu**Ubuntu 是一个以桌面应用为主的 GNU/Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ Ubuntu ”一词,意思是“人性”。 Ubuntu 基于 Debian 发行版,与 Debian 的不同在于它每6个月会发布一个新版本。
**SUSE Linux**SUSE 是 Linux 操作系统其中一个发布版也是德国的一个发布版。SUSE Linux 目前专注于企业市场。
**openSUSE**openSUSE 是一个开放社区的计划,号称“最美丽的 Linux 发行版”。
**Debian**Debian 是一种自由操作系统,全称 Debian GNU/Linux由Debian计划Debian Project组织维护Debian 是一个纯粹由自由软件所组合而成的操作环境。
**Archlinux**Arch Linux(或称Arch)是一种以轻量简洁为设计理念的Linux发行版。其开发团队秉承简洁、优雅、正确和代码最小化的设计宗旨。Arch Linux 项目受 CRUX 启发,由 Judd Vinet 于2002年启动。
更多Linux版本请看这里 [Linux系统家族族谱](https://code.csdn.net/groups/7587/discources/935281)
### 3. 初学者必读的Linux基础书籍  
要想学好Linux你至少需要一本好入门教材、一本linux指令参考手册、linux系统管理手册、讲解linux系统原理的书。这里我们推荐几部公认的好书
* [《 鸟哥的Linux私房菜 基础学习篇》](https://book.douban.com/subject/4889838/) 鸟哥 著;人民邮电出版社
* [《 鸟哥的Linux私房菜 服务器架设篇》](https://book.douban.com/subject/10794788/) 鸟哥 著;机械工业出版社
* [《 Linux命令、编辑器与Shell编程》](https://book.douban.com/subject/25750712/) [美]索贝尔(Sobell·M.G.) 著; 清华大学出版社
* [《 Linux设备驱动程序》](https://book.douban.com/subject/1723151/) 科波特 著; 中国电力出版社
* [《 深入理解Linux内核》](https://book.douban.com/subject/2287506/) (美)博韦,西斯特 著; 中国电力出版社
* [《 UNIX环境高级编程》](https://book.douban.com/subject/1788421/) W.Richard Stevens / Stephen A.Rago 著;人民邮电出版社
### 4. 熟悉Linux常用命令
* man 任何时候你觉得对一个命令行不是很确定都可以通过输入“man + 命令”来了解这个命令能确切是做什么的。
* ls :列出目录内容。
* pwd :在终端中显示当前工作目录的全路径。
* cd :要变更你当前所在的目录。
* mkdir :创建一个新的目录。
* cp :复制文件/重命名文件。
* mv :移动文件。
* find 和 locate搜索文件。
* kill :快速关闭一个进程。
* passwd :更改密码。
* md5sum 计算和检验MD5信息签名
* history :查询历史记录命令。
* sudo (super user do)命令允许授权用户执行超级用户或者其它用户的命令。
* touch :创建一个新文件,或者将文件的访问和修改时间更新为当前时间。
* chmod :修改文件的访问权限。
* chown :改变文件拥有者和所在用户组。
* apt APT是一个为Debian系列系统UbuntuKubuntu等等开发的高级包管理器在Gnu/Linux系统上它会为包自动智能地搜索、安装、升级以及解决依赖问题。
### 5. 小心新手常犯的几个错误 
**不要以根用户登录**这是使用Unix的惯例除非必须那么不要轻易在根用户下运行任何东西。
**文件命名混乱**:避免使用美元符($),括弧和百分号(%等特殊字符这些字符对于shell有着特殊意义可能会引起冲突。避免使用空格不要使用无效字符“/”是根目录专用的。
**所有文件都混在一起**将Home目录放在一个独立的分区上可以在你重装系统甚至升级你的整个版本而不会丢失你的数据和个人设置。
**试图点击运行.exe文件**除非你安装了WINE双击那些.exe文件毫无用处。新用户需要知道无论是Linux还是Windows都只会运行针对自身系统开发的应用程序。
**以默认格式向微软Office用户发送OpenOffice文档**微软产品对其它操作系统和其它应用程序的友好性并不强许多新Linux用户在共享文件给朋友时往往会遇到麻烦因为对方无法阅读他们共享的文件格式因此新Linux用户要注意存储文件的格式确保它们能够被微软类似应用所打开。
**忽视更新**新的更新可以为一些新的漏洞打上补丁。维持更新可以在一个易受损的系统与一个安全的系统之间构造分水岭。Linux的安全来自于不断地维护。
以上是一些操作习惯方面的错误,还有一些技术类型的错误,你可以查看《 避免UNIX和Linux中的常见错误》
### 6. 常去逛逛一些Linux社区和网站
国内的专业Linux网站
[ChinaUnix](https://www.chinaunix.net/) 创办于2001年是一个以讨论Linux/Unix类操作系统技术、软件开发技术、数据库技术和网络应用技术等为主的开源技术社区网站。
[LinuxCN](https://linux.cn/)Linux中国是专注于中文Linux技术、资讯的社区在这里你可以获得一手的Linux资讯和技术知识。
国外著名Linux网站
[Linux Online](https://www.linux.org/) 最权威的Linux网站文章讨论无所不包软件硬件应有尽有。
[Linux国际协会(Linux International)](https://li.org/)有大量的Linux资源列表。
[Linux](https://www.linux.com/)学习Linux的最好网站也是Linux使用经验的汇聚地。
[Linuxforums](https://www.linuxforums.org/) 提供Linux的软件资源Linux论坛Linux服务器发行版的信息LINUX文章教程等信息的综合性网站。

View File

@ -1,205 +0,0 @@
# <center>优麒麟目录结构</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
对于Linux爱好者来说深入了解Linux文件目录结构的标准和每个目录的详细功能对于我们用好Linux系统至关重要下面就由小编给大家介绍下优麒麟系统的目录结构PS: 同样适用于其他Linux发行版。
查看系统的全部目录:
* 在终端中进入 / 执行命令ls。
* 在文件浏览器中通过左侧导航中的“文件系统”进入根目录。如图1所示。
![图1 系统根目录](https://www.ubuntukylin.com/upload/201908/1564643220763676.png)
### 1 系统目录概述
Linux目录类似一棵树以根目录出发含有多个子目录或文件子目录中又可含有更下级的子目录或者文件分层衍生出多个分叉。如图2所示。
优麒麟Ubuntu Kylin
![图2 目录结构](https://www.ubuntukylin.com/upload/201908/1564644154149997.png)
一般来说根目录下只存放目录除了vmlinuz和initrd.img两个链接文件。其中vmliuz是Linux内核的镜像文件initrd.img是RAM disk的镜像文件都是用于启动Linux系统。
下面将对每一个目录的用途及内容进行介绍。
### 2 目录详解
2.1 /bin、/sbin、/usr/bin、/usr/sbin
表1 bin与sbin
文件目录|说明
:-:|:-:
/bin|放置一些系统必备的可执行文件比如bash、cat、chmod、cp、ls、mv等普通用户和root用户都可以使用。
/sbin|放置一些系统管理必备的可执行文件比如e2fsck、ethtool、fdisk、mount等只有root用户才能使用。
/usr/bin|放置一些必备应用软件的可执行文件比如vim、ssh、file、c++等。
/usr/sbin|放置一些系统管理必备软件的可执行文件比如gparted、cron、tcpdump等只有root用户使用。
可以理解为:如果是用户和管理员必备的命令,则会放在/bin如果是系统管理员必备的命令则会放在/sbin。同理/usr/bin和/usr/sbin对应的是系统额外的应用软件。
![图3 /bin目录](https://www.ubuntukylin.com/upload/201908/1564646117554742.png)
2.2 /boot
存放的是系统的内核文件、引导加载程序文件和grub开机管理。根目录下的两个链接vmlinuz和initrd.img就是指向/boot目录下对应的文件。在系统安装时会为boot单独创建一个分区。
![图4 /boot目录](https://www.ubuntukylin.com/upload/201908/1564646196175428.png)
![图5 根目录下的启动链接文件](https://www.ubuntukylin.com/upload/201908/1564646196175428.png)
2.3 /dev
在Linux系统中任何设备都是以文件的形态存在于/dev目录中。访问该目录下某个文件相当于访问某个设备。比较重要及常用的文件说明如表 2所示。
表2 /dev子目录介绍
文件目录|说明
:-:|:-:
/dev/sd*|SCSI磁盘sd后面的字母表示第几块磁盘数字表示该磁盘的第几分区。比如sda1表示第一块磁盘的第一个分区。一般来说系统盘为sda后续外接的磁盘则从b开始递增。
/dev/tty*|TTY终端设备。比如tty0表示当前虚拟终端ttyS0表示当前UART串口当串口为USB外接的时候则会有ttyUSB0表示当前USB串口。
/dev/loop*|回环设备通常被用于光盘或是磁盘镜像以循环挂载的方式来挂载包含文件系统的文件使得在这个文件系统中的内容得以被访问。比如loop0表示第一个回环设备。
/dev/null|空设备。它会丢弃一切写入其中的数据,并且没有任何可以读取的内容。可当作垃圾站,清除文件中的内容。
/dev/zero|零流源。与/dev/null相似任何写入都将被直接丢弃读取会得到无限多的二进制零流。通常用于创建一个指定长度大小、用于初始化的空文件。
/dev/random /dev/urandom|随机数设备,提供永不为空的随机字节数据流。差别在于:/dev/random依赖于系统中断产生的速度比较慢有时候还会出现较大的停顿数据随机性更高/dev/urandom不依赖系统的中断产生速度很快相比而言数据随机性低。
2.4 /etc
用于存放配置文件包含系统配置和应用软件的配置。该目录下的文件由root用户使用普通用户大都只有读取的权限。比较重要的文件说明如表3所示。
表3 /etc子目录介绍
文件目录|说明
:-:|:-:
/etc/hosts| 域名解析文件即ip地址与域名的对应关系网络访问时可快速解析。
/etc/passwd| 用户数据库,存放了系统中所有的用户信息,包括系统或服务正常运行所必需的用户(系统用户)。 文件中每一行各字段的含义为—— 用户名:密码:UID:GID:用户信息:用户主目录:Shell 其中用户名在同一系统中是唯一的限制在8个字符(字长度之内并且区分大小写UID是用户标识也是用于区分用户常用于系统内部管理进程GID是组标识一个用户可以存在多个组Shell是指用户登录系统时运行的程序名称通常是一个Shell程序的全路径名。 密码在passwd文件中一般以一个“x”符号来代替shadow文件为真正的密码文件只有root用户才有读取的权限。
/etc/shadow| 真正的密码文件。文件中每一行各字段的含义为——用户名:加密后的密码:最近改动日期:不可更改天数:需要重设天数:过期提醒天数:过期后的宽限时间:账号失效日期 其中密码最近的改动日期是从1970年1月1日算起的天数不可更改的天数为0表示没有限制需要重设天数为99999表示没有限制失效日期也是从1970年1月1日算起的天数。
/etc/group| 系统用户的分组信息。文件中每一行各字段的含义为——组名:组密码:组ID:包含的用户与passwd相似组密码以“x”代替gshadow文件为真正的组密码文件组ID与passwd中的GID是对应的。
/etc/gshadow| 真正的组密码文件。文件中每一行各字段的含义为——组名:组密码:组管理员:组成员组密码字段为空或是“!”号,表示没有密码;若有多个组管理员、组成员,用“,”分隔。
/etc/init.d| 存放系统各种服务的启动和停止脚本。使用该目录下的脚本需要有root权限。比如需要重启网络可以使用命令——/etc/init.d/networking restart
/etc/init| 存放系统各种服务和应用的配置文件。
/etc/rc.d| 这些目录中包含了控制进程进行的脚本。以K开头的脚本存放在*为0-6的目录下运行在以S开头的脚本存放在rcS.d目录下之前。脚本放置的地方决定开始运行的层级。
/etc/rc.local|在系统初始化级别脚本运行之后(即系统启动之后)再执行的脚本。
/etc/fstab|在开机引导时,自动挂载的文件系统。文件中每一行对应一个分区,含义为——实际位置挂载点格式挂载状态 DUMP功能开机检查其中挂载状态比如是ro只读、rw读写DUMP功能指在系统DUMP时是否需要BACKUP默认为0开机检查除了root除了有必要为1其余可根据需要调整默认为0。
/etc/issue|getty在登录提示符前的输出信息通常包括系统的一段短说明或欢迎信息。
/etc/profile|设置系统的全局变量。比如——PATH预设可执行文件或命令的搜索路径USER用户登录时使用的用户名HOSTNAME所使用的主机名。
/etc/profild.d|存放的是一些应用程序所需的启动脚本,包括一些命令的附加设置。
/etc/X11|X_Window系统的配置文件。
/etc/skel|新建用户时,把该目录下的内容拷贝到用户的家目录下。
2.5 /home
用户主目录的位置,每创建一个用户,该目录下就会生成名字为该用户的文件夹,用于存放用户的各种文件、数据。
2.6 /lib
库文件目录,包含了所有对系统有用的库文件。在/bin或/sbin目录中的命令的动态库文件就在此目录中内核模块同样也在这里。
文件目录|说明
:-:|:-:
/lib32 /lib64|这两个目录与/lib是一样的包含的是特殊架构的库文件。
/lib/firmware|包含硬件、固件代码。硬件运行在系统中分为两个部分:固件(加载到实际硬件的代码)和驱动程序(用于固件和内核之间的通讯)。
/lib/modules|包含所有可加载的内核模块,如果有多个内核,则该目录下会有代表每个内核的目录。
/lib/modprobe.d|modprobe命令的配置。该命令的作用是在linux内核中添加或删除模块。
/lib/hdparm|包含 SATA/IDE 硬盘正确运行的参数。
/lib/udev|udev是一种工具能够根据系统中硬件设备的状态动态更新设备文件创建删除和刷新。该目录存放了所有的 udev 相关的文件和文件夹比如rules.d就设定了udev规范。
2.7 /media、/mnt
/media ——可移除的外置设备比如U盘、光盘等自动挂载的位置。
/mnt ——文件系统挂载点。当进行手动挂载移动介质、其它文件系统的分区、可安装文件系统时,挂载点的优先选择。
2.8 /opt
存放系统额外软件安装的文件和程序一般是大型第三方软件比如WPS办公Firefox等。
2.9 /proc
一个虚拟文件系统,是正在运行的内核信息映射,也是内核和内核模块用来向进程发送消息的机制。它可以让用户和内核内部数据结构进行交互,获取有关进程的信息,并且可以在运行中改变设置。
/proc运行在内存之中不占用外部存储空间以文件的形式向用户空间提供了访问接口。主要包含了进程信息、内存资源信息、磁盘分区信息等。
2.10 /root
系统管理员root的主目录。
2.11 /run
进入/run目录后执行命令“df -k .”可以看到它被识别为“tmpfs”即临时文件系统。与/var/run相同该目录下是程序或者服务启动后的PID重启后会重/srv新生成对应的目录数据。
2.12 /srv
主要用来存储本机或本服务器提供的服务或数据(用户主动产生的数据、对外提供的服务)。
2.13 /sys
/sys是sysfs的挂载点。sysfs是一个虚拟的、基于内存的文件系统它与/proc相似可以查看和设定内核参数并且还能以更好的方式导出内核数据。
文件目录|说明
:-:|:-:
/sys/devices|所有在总线上被发现的物理设备比如网卡、显卡、ACPI、虚拟设备tty、bonding等是内核对系统中所有设备的分层次表达模型。
/sys/dev|字符设备(block)和块设备(char)里面均是以主次设备号major:minor命名的链接文件指向/sys/devices。
/sys/class|包含所有注册在kernel里面的设备类型每个设备类型表达具有一种功能的设备。每个设备类型子目录下是链接文件指向/sys/devices/目录下的具体设备。
/sys/bus|按总线类型分类设备。其中每个子目录下都包含devices和drivers两个子目录devices ——该总线类型下的所有设备,均为链接文件,指向(/sys/devices/drivers ——该总线类型下的驱动,参数可查看和修改。
/sys/modules|所有被载入内核的模块,包括编译到内核中的模块,和编译为.ko文件的外模块。
/sys/fs|描述系统中所有文件系统,包括文件系统本身和按文件系统分类存放的已挂载点(一些传统虚拟文件系统控制参数仍然在/proc/sys/fs中
/sys/kernel|内核中所有可调整的参数(一些传统内核可调整参数仍然位于/proc/sys/kernel中
/sys/firmware|对固件对象和属性进行操作和观察的接口,即系统加载固件机制时对用户空间的接口。
/sys/power|存在一些属性文件,用于控制整个机器的电源状态。
2.14 /tmp
用户和程序的临时目录。该目录中的内容会被系统定时自动清空。
2.15 /usr
/usr目录下放置的是系统中软件的资源而不是用户数据usr≠user所有系统默认的软件都会放置到/usr。
文件目录|说明
:-:|:-:
/usr/bin /usr/sbin|参考2.1的内容。
/usr/include|开发和编译应用程序所需要的头文件。编译时,可以通过头文件来使用某些库函数。
/usr/lib|目标库文件(包括动态连接库),以及通常不是直接调用的可执行文件。
/usr/local|安装本地程序的默认路径。当下载一个程序源代码进行编译安装时,如果不特别指定安装路径,那么程序相关的文件将会默认放置到这个目录对应的子目录下。
/usr/share|存放了同一个操作系统在不同构架下工作时,特定应用程序的共享数据,比如背景图、程序文档信息、语言设置等。
/usr/src|Linux内核源码。
2.16 /var
常态性变动的文件,包括缓存、日志信息以及某些运作所产生的文件。
文件目录|说明
:-:|:-:
/var/cache|应用程序运行过程中产生的缓存。
/var/lib|应用程序运行过程中,需要使用到的文件。
/var/local|存放/usr/local中安装的程序的可变数据。
/var/lock|锁定文件。比如,某些资源一次只能被一个应用程序使用时,如果同时被两个及以上程序使用,就会产生错误,于是,就需要对该资源进行锁定操作。
/var/log|有关于系统的各种日志信息:
alternatives.log|系统的更新替代信息。
auth.log|系统授权信息,包括用户登录和使用的权限机制等。
boot.log|系统在启动引导过程中的日志信息。
bootstrap.log|构建最小系统的日志信息。
btmp wtmp|btmp记录所有失败登录信息wtmp记录了谁正在登录进入系统使用命令显示这个文件信息等。
dmesg|包含启动时的内核缓冲,以及与硬件有关的信息。
dpkg.log|使用dpkg安装或卸载软件的日志。
faillog|记载用户登录失败的信息,以及错误登录命令。
syslog|格式说明:日期主机名进程名[PID]: 具体信息其中日期格式为MM dd hh:mm:ss进程的PID通常是一个数字也可以为空。syslog是Linux系统默认的日志守护进程任何希望生成日志信息的程序都可以通过syslog提供的接口在该文件中生成信息。它对于系统、软件调试定位问题有很大作用。
Xorg.*.log|X显示的日志信息。
/var/run|存放某些程序或者服务启动后的PID。
/var/spool|放置一些队列数据,即排队等待其他程序使用的数据。这些数据被使用后,通常都会被删除。比如系统收到新邮件会放置到/var/spool/mail/中,当用户收下后,该邮件就会被删除。除了邮件以外,还有打印队列、周期执行任务队列等。
2.17 /lostfound
在系统修复过程中,恢复的文件所在目录。

View File

@ -1,30 +0,0 @@
# <center>安装NVIDIA显卡驱动</center>
#### <center>作者:陌生人</center>
#### <center>2022-05-27 22:35:54</center>
目前来说在优麒麟安装英伟达的显卡驱动是非常简单的主要是因为优麒麟的上游Ubuntu把英伟达的闭源驱动集成了大家再也不用像以前那样去英伟达的官网下载二进制驱动然后关闭x window安装了让新人也可以非常快速简单的安装好自己对应的显卡驱动。
再次稍稍解释下为啥要装显卡驱动显卡驱动装好了以后很多的软件可以调用显卡加速来降低CPU的使用率从而降低一定的功耗比如视频硬解码视频转码浏览器的GPU硬件加速如果没有驱动的话这些相当耗费性能的计算都会给CPU去完成结果就是CPU使用率暴增。好了下面进入正题。
首先打开软件更新器,从开始菜单里就可以找到
![图片1.png](../assets/%E5%AE%89%E8%A3%85NVIDIA%E6%98%BE%E5%8D%A1%E9%A9%B1%E5%8A%A8/%E5%9B%BE%E7%89%871.png)
打开以后软件更新器会自动更新软件信息,注意,此处只是更新软件信息,并不会升级
![图片2.png](../assets/%E5%AE%89%E8%A3%85NVIDIA%E6%98%BE%E5%8D%A1%E9%A9%B1%E5%8A%A8/%E5%9B%BE%E7%89%872.png)
此处视网络速度和硬件性能影响,会有不同的等待时间,总的来说只要等他检查结束即可,建议这一步不要跳过,有可能会无法下载驱动
检查完成后会提示当前可以升级软件包,可以升级也可以选择延后,一般建议大家升级更新,这个时候点击左下角的设置
![图片3.png](../assets/%E5%AE%89%E8%A3%85NVIDIA%E6%98%BE%E5%8D%A1%E9%A9%B1%E5%8A%A8/%E5%9B%BE%E7%89%873.png)
点击以后会有一个新的弹窗,可能需要等待几秒这个弹窗才会出来,然后点击**附加驱动**
![图片4.png](../assets/%E5%AE%89%E8%A3%85NVIDIA%E6%98%BE%E5%8D%A1%E9%A9%B1%E5%8A%A8/%E5%9B%BE%E7%89%874.png)
此时会显示正在搜索的字样,稍微等一下就会出现一些驱动,一般来说都是显卡的,也有一些是别的设备的,如果没有安装显卡驱动的话在列表最下方的**使用X.Org X server**是被选中的,这个是内核里的开源驱动,一般情况下是可以让显卡正常显示,但是像是硬件加速这些功能一般是没办法用的,这个时候我们可以从列表里挑选一个驱动,一般最上边的是比较推荐的,只要选中最上边的那个驱动,然后点击右下角的应用更改就可以了
![图片5.png](../assets/%E5%AE%89%E8%A3%85NVIDIA%E6%98%BE%E5%8D%A1%E9%A9%B1%E5%8A%A8/%E5%9B%BE%E7%89%875.png)
如果点错了还可以点击应用更改旁边的还原,应用更改以后前边会有一个小的滚动条,滚动条走完以后就可以重启电脑来使用对应的闭源驱动了。

65
新手必看/常用的组合命令.md Normal file → Executable file
View File

@ -1,36 +1,29 @@
# <center>常用的组合命令</center>
#### <center>作者:陌生人</center>
#### <center>2022-04-23 00:16:10</center>
内容还不多,如果有收集到有用的命令会尽快更新至此
1. 安装头文件
```
sudo apt install linux-headers-`uname -r`
```
2. 更新引导
```
sudo update-grub
```
3. 查看是否安装了某个包
```
dpkg -l|grep 包名或者是包名里包含的部分字符
```
4. 双系统时间同步
```
sudo timedatectl set-local-rtc 1
sudo hwclock --localtime --systohc
```
5. kmre一直卡在初始化可以执行下面两条命令发到群里
```
sudo docker ps -a
ls /dev/bind*
```
# <center>常用的组合命令</center>
#### <center>作者:陌生人</center>
#### <center>2022-04-23 00:16:10</center>
内容还不多,如果有收集到有用的命令会尽快更新至此
1. 安装头文件
```
sudo apt install linux-headers-`uname -r`
```
2. 更新引导
```
sudo update-grub
```
3. 查看是否安装了某个包
```
dpkg -l|grep 包名或者是包名里包含的部分字符
```
4. 双系统时间同步
```
sudo timedatectl set-local-rtc 1
sudo hwclock --localtime --systohc
```

View File

@ -1,27 +1,27 @@
# <center>有趣的Linux彩蛋——用sudo来冒犯用户</center>
#### <center>作者:优麒麟</center>
#### <center>2022-04-22 23:36:00</center>
人们可以配置 sudo用来给命令授权的来冒犯那些输错密码的用户。一起来看看吧
首先,打开终端,输入以下命令:
**sudo visudo**
强烈推荐使用 visudo 编辑 /etc/sudoers 配置文件。之所以使用 visudo 有两个原因一是它能够防止两个用户同时修改它二是它可以帮助校验修改是否正确。visudo不会擅自保存带有语法错误的配置文件它会提示你出现的问题并询问该如何处理。visudo 默认的是在vi里打开配置文件而在 Ubuntu Kylin 中visudo 默认在 nano 中打开 /etc/sudoers。
然后,在文件顶部,加上这么一行:
**Defaults insults**
如图所示:  
![](https://www.ubuntukylin.com/upload/201602/1456191668463393.jpg)
接下来保存并且关闭文件。如果您使用的是nano按Ctrl+X退出它会提示您是否想要保存更改。请按Y保存更改。
然后终端输入sudo -k清空密码的缓存。最后在sudo命令里输入错的密码
![](https://www.ubuntukylin.com/upload/201602/1456192456272768.jpg)
看看它还对我不耐烦呢。现在你也可以向朋友哭诉自家的sudo欺负你了^_^。
# <center>有趣的Linux彩蛋——用sudo来冒犯用户</center>
#### <center>作者:小K</center>
#### <center>2022-04-22 23:36:00</center>
人们可以配置 sudo用来给命令授权的来冒犯那些输错密码的用户。一起来看看吧
首先,打开终端,输入以下命令:
**sudo visudo**
强烈推荐使用 visudo 编辑 /etc/sudoers 配置文件。之所以使用 visudo 有两个原因一是它能够防止两个用户同时修改它二是它可以帮助校验修改是否正确。visudo不会擅自保存带有语法错误的配置文件它会提示你出现的问题并询问该如何处理。visudo 默认的是在vi里打开配置文件而在 Ubuntu Kylin 中visudo 默认在 nano 中打开 /etc/sudoers。
然后,在文件顶部,加上这么一行:
**Defaults insults**
如图所示:  
![](https://www.ubuntukylin.com/upload/201602/1456191668463393.jpg)
接下来保存并且关闭文件。如果您使用的是nano按Ctrl+X退出它会提示您是否想要保存更改。请按Y保存更改。
然后终端输入sudo -k清空密码的缓存。最后在sudo命令里输入错的密码
![](https://www.ubuntukylin.com/upload/201602/1456192456272768.jpg)
看看它还对我不耐烦呢。现在你也可以向朋友哭诉自家的sudo欺负你了^_^。