欢迎光临
我们一直在努力

Linux技巧

解决Linux安装Mysql5.7时出现报错”The GPG keys listed for the MySQL 5.7 Community Server”

阅读(517)评论(0)

安装版本是linux的mysql5.7,安装时按照网上的文章安装,结果报错了:The GPG keys listed for the MySQL 5.7 Community Server,在网上找大半天,终于得到解决。

Linux安装Mysql5.7时出现如下报错

自动草稿

问题原因

这是由于MySQL GPG 密钥已过期导致的 问题解决出处 https://bugs.mysql.com/bug.php?id=106188

解决办法

需要如下运行命令, 以2022年为例

  1. rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

然后重新执行

  1. yum -y install mysql-community-server -y

Debian Linux上安装最新Docker详细步骤教程

阅读(511)评论(0)

Docker 在 Debian 的默认存储库中可用,但就其性质而言,您一定会获得旧的 docker 版本。

但是,如果您不关心最新版本,您可以使用给定的命令,docker 将安装在您的 Debian 系统上:

sudo apt install docker.io

但是,如果您正在寻找一种获取最新镜像的方法,则必须利用官方存储库来安装 docker。

在跳转到安装部分之前,有必要删除旧版本的 Docker:

sudo apt-get remove docker docker-engine docker.io containerd runc

本教程将介绍如何使用官方存储库安装 docker。

在 Debian 中安装最新的 Docker

首先,您必须安装以下软件包,以便您可以通过 apt 存储库使用 HTTPS:

sudo apt-get install ca-certificates curl gnupg lsb-release

/etc/apt/keyrings接下来如果默认不存在就得用下面的命令来创建:

sudo mkdir -p /etc/apt/keyrings

添加 GPG 密钥

GPG 密钥用于对包进行身份验证以验证包的来源。

并为 docker 添加 GPG 密钥,以下命令应该可以完成工作:

curl -fsSL https://download.docker.com/linux/<a target="_blank" href="https://www.xpn.cc/redirect/aHR0cHM6Ly93d3cuYnVuaWFuLmNuL3RhZy9kZWJpYW4=" target="_blank" title="View all posts in debian">debian</a>/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

添加官方 Docker 存储库

存储库是存储包的地方,要在 Debian 中添加 docker 存储库,请使用给定的命令:

echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

在 Debian 中安装 Docker

首先,您必须更新存储库索引以使您刚刚所做的更改生效:

sudo apt update

现在,您可以使用给定的命令来安装最新版本的 docker:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

在 Docker 中运行 Hello World 镜像

要检查 docker 是否安装成功,您可以使用hello-world镜像:

sudo docker run hello-world

它会下载一个 hello-world 镜像,询问你,然后自己退出:

Debian Linux上安装最新Docker详细步骤教程

需要 sudo(超级用户权限)才能使用 docker 镜像。

在 Debian 中使用不带 sudo 的 Docker

第一步是创建一个名为的新用户组docker

sudo groupadd docker

现在,您可以将用户添加到 docker 用户组。

sudo usermod -aG docker <username>

请记住,更改仅适用于添加的用户,因此您也可以添加多个用户!

⚠️ 您应该只添加具有超级用户权限的用户。

现在,注销并重新登录来重载资源,如果您使用的是 VM,则需要重新启动。

完成后,您可以使用给定的命令来激活更改:

newgrp docker

现在,您可以在不使用 sudo 的情况下使用 docker 镜像:

Debian Linux上安装最新Docker详细步骤教程
使用Docket镜像

包起来

在本教程中,我解释了如何使用两种方法在 Debian 中安装 docker,包括如何避免每次使用 docker 时都使用 sudo。

CentOS7 更新yum源

阅读(504)评论(0)

备份

cd /etc/yum.repos.d/
mkdir repo_bak
mv *.repo repo_bak/

下载新的CentOS-Base.repo 到/etc/yum.repos.d/(多选一)

#使用curl下载阿里云镜像源文件
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#使用curl下载网易云镜像源文件
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
#使用curl下载华为云镜像源文件
curl -o /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
#使用curl下载腾讯云镜像源文件
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo

清除并生成新的yum缓存

yum clean all
yum makecache

安装EPEL(Extra Packages for Enterprise Linux )源

yum install -y epel-release

再次清除并生成新的yum缓存

yum clean all
yum makecache

查看启用的yum源和所有的yum源

yum repolist enabled
yum repolist all

更新yum

yum -y update

Powerline为VIM和Bash注入强劲动力

阅读(497)评论(0)

Powerline 是一个极棒的 Vim 编辑器的状态行插件,这个插件是使用 Python 开发的,主要用于显示状态行和提示信息,适用于很多软件,比如 bash、zsh、tmux 等等。
特色
  1. 使用 python 编写,使其更具扩展性且功能丰富
  2. 稳定易测的代码库,兼容 python 2.6+ 和 python 3
  3. 支持多种 Linux 功能及工具的提示和状态栏
  4. 通过 JSON 保存配置和颜色方案
  5. 快速、轻量级,具有后台守护进程支持,提供更佳的性能
Powerline 效果截图

自动草稿

在本文中,我会介绍如何安装 Powerline 及其字体,以及如何在 RedHat 和 Debian 类的系统中使 Bash 和 Vim 支持 Powerline。

第一步:准备好安装 Powerline 所需的软件

由于和其它无关项目之间存在命名冲突,因此 powerline 只能放在 PyPI(Python Package Index)中的 powerline-status 包下.

为了从 PyPI 中安装该包,需要先准备好 pip(该工具专门用于 Python 包的管理)工具。所以首先要在 Linux 系统下安装好 pip 工具。

在 Debian、Ubuntu 和 Linux Mint 中安装 pip

# apt-get install python-pip

示例输出:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Recommended packages:
python-dev-all python-wheel
The following NEW packages will be installed:
python-pip
0 upgraded, 1 newly installed, 0 to remove and 533 not upgraded.
Need to get 97.2 kB of archives.
After this operation, 477 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ trusty-updates/universe python-pip all 1.5.4-1ubuntu3 [97.2 kB]
Fetched 97.2 kB in 1s (73.0 kB/s)
Selecting previously unselected package python-pip.
(Reading database ... 216258 files and directories currently installed.)
Preparing to unpack .../python-pip_1.5.4-1ubuntu3_all.deb ...
Unpacking python-pip (1.5.4-1ubuntu3) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Setting up python-pip (1.5.4-1ubuntu3) ...

在 CentOS、RHEL 和 Fedora 中安装 pip

在 Fedora 类系统中,需要先打开 epel 仓库,然后按照如下方法安装 pip 包。

# yum install python-pip
# dnf install python-pip [Fedora 22+ 以上]

示例输出:

Installing:
python-pip noarch 7.1.0-1.el7 epel 1.5 M
Transaction Summary
=================================================================================
Install 1 Package
Total download size: 1.5 M
Installed size: 6.6 M
Is this ok [y/d/N]: y
Downloading packages:
python-pip-7.1.0-1.el7.noarch.rpm | 1.5 MB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : python-pip-7.1.0-1.el7.noarch 1/1
Verifying : python-pip-7.1.0-1.el7.noarch 1/1
Installed:
python-pip.noarch 0:7.1.0-1.el7
Complete!

第二步:在 Linux 中安装 Powerline

现在可以从 Git 仓库中安装 Powerline 的最新开发版。在此之前系统需要安装好 Git 工具以便可以从仓库拉下代码。

# apt-get install git
# yum install git
# dnf install git

然后你可以通过 pip 命令安装 Powerline。

# pip install git+git://github.com/powerline/powerline

示例输出:

Cloning git://github.com/powerline/powerline to /tmp/pip-WAlznH-build
Running setup.py (path:/tmp/pip-WAlznH-build/setup.py) egg_info for package from git+git://github.com/Lokaltog/powerline
warning: no previously-included files matching '*.pyc' found under directory 'powerline/bindings'
warning: no previously-included files matching '*.pyo' found under directory 'powerline/bindings'
Installing collected packages: powerline-status
Found existing installation: powerline-status 2.2
Uninstalling powerline-status:
Successfully uninstalled powerline-status
Running setup.py install for powerline-status
warning: no previously-included files matching '*.pyc' found under directory 'powerline/bindings'
warning: no previously-included files matching '*.pyo' found under directory 'powerline/bindings'
changing mode of build/scripts-2.7/powerline-lint from 644 to 755
changing mode of build/scripts-2.7/powerline-daemon from 644 to 755
changing mode of build/scripts-2.7/powerline-render from 644 to 755
changing mode of build/scripts-2.7/powerline-config from 644 to 755
changing mode of /usr/local/bin/powerline-config to 755
changing mode of /usr/local/bin/powerline-lint to 755
changing mode of /usr/local/bin/powerline-render to 755
changing mode of /usr/local/bin/powerline-daemon to 755
Successfully installed powerline-status
Cleaning up...

第三步:在 Linux 中安装 Powerline 的字体

Powerline 使用特殊的符号来为开发者显示特殊的箭头效果和符号内容。因此你的系统中必须要有符号字体或者补丁过的字体。

通过下面的 wget 命令下载最新的系统字体及字体配置文件。

# wget https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otf
# wget https://github.com/powerline/powerline/raw/develop/font/10-powerline-symbols.conf

然后你将下载的字体放到字体目录下 /usr/share/fonts 或者 /usr/local/share/fonts,或者你可以通过 xset q 命令找到一个有效的字体目录。

# mv PowerlineSymbols.otf /usr/share/fonts/

接下来你需要通过如下命令更新你系统的字体缓存。

# fc-cache -vf /usr/share/fonts/

其次安装字体配置文件。

# mv 10-powerline-symbols.conf /etc/fonts/conf.d/

注意:如果相应的符号没有出现,可以尝试关闭终端会话并重启 X window,这样就会生效了。

第四步:给 Bash Shell 和 Vim 状态行设置 Powerline

在这一节将介绍 bash shell 和 vim 编辑器中关于 Powerline 的配置。首先通过在 ~/.bashrc 中添加如下内容以便设置终端为 256 色。

export TERM="screen-256color"

打开 Bash Shell 中的 Powerline

如果希望在 bash shell 中默认打开 Powerline,可以在 ~/.bashrc 中添加如下内容。

首先通过如下命令获取 powerline 的安装位置。

# pip show powerline-status
Name: powerline-status
Version: 2.2.dev9999-git.aa33599e3fb363ab7f2744ce95b7c6465eef7f08
Location: /usr/local/lib/python2.7/dist-packages
Requires:

一旦找到 powerline 的具体位置后,根据你系统的情况替换到下列行中的 /usr/local/lib/python2.7/dist-packages 对应的位置。

powerline-daemon -q
POWERLINE_BASH_CONTINUATION=1
POWERLINE_BASH_SELECT=1
. /usr/local/lib/python2.7/dist-packages/powerline/bindings/bash/powerline.sh

然后退出后重新登录,现在 powerline 的状态行应该如下显示了。

自动草稿

现在切换目录并注意显示你当前路径的面包屑导航提示的变化。

如果远程 Linux 服务器上安装了 powerline,你能看到后台挂起的任务,当你用 ssh 登录上去时,会看到该提示增加了主机名。

在 Vim 中打开 Powerline

如果你喜欢使用 vim,正好有一个 vim 的强力插件。可以在 ~/.vimrc 中添加如下内容打开该插件(译注:注意同样需要根据你的系统情况修改路径)。

set rtp+=/usr/local/lib/python2.7/dist-packages/powerline/bindings/vim/
set laststatus=2
set t_Co=256

然后你打开 vim 后会看到一个新的状态行:

自动草稿

总结

Powerline 可以在某些软件中提供颜色鲜艳、很优美的状态行及提示内容,这对编程环境有利。希望这篇指南对您有帮助,如果您需要帮助或者有任何好的想法,请留言给我。

如何在 Linux 上使用 dnf 命令安装软件包?

阅读(496)评论(0)

了解如何在 Linux 上使用 dnf 命令安装软件包,然后下载我们的速查表,让正确的命令触手可及。

在计算机系统上安装应用程序非常简单:就是将档案(如 ​​.zip​​ 文件)中的文件复制到目标计算机上,放在操作系统预期放应用程序的位置。因为我们中的许多人习惯于使用花哨的安装“向导”来帮助我们在计算机上安装软件,所以这个过程似乎在技术上应该比实际更复杂。

然而,复杂的是,是什么构成了一个程序?用户认为的单个应用程序实际上包含了分散在操作系统中的软件库的各种依赖代码(例如:Linux 上的 .so 文件、Windows 上的 .dll 文件和 macOS 上的 .dylib 文件)。

为了让用户不必担心这些程序代码之间的复杂的互相依赖关系, Linux 使用 包管理系统package management system 来跟踪哪些应用程序需要哪些库,哪些库或应用程序有安全或功能更新,以及每个软件会附带安装哪些额外的数据文件。包管理器本质上是一个安装向导。它们易于使用,提供了图形界面和基于终端的界面,让你的生活更轻松。你越了解你的发行版的包管理器,你的生活就会越轻松。

在 Linux 上安装应用程序

如果你在使用 Linux 桌面时,偶尔想要安装一个应用程序,那么你可能正在寻找 ​​GNOME “软件”​​,它是一个桌面应用程序浏览器。

如何在 Linux 上使用 dnf 命令安装软件包?

GNOME “软件” 程序

它会按你的预期工作:点击它的界面,直到你找到一个看起来有用的应用程序,然后单击 “安装” 按钮。

或者,你可以在 GNOME “软件” 中打开从网络下载的 ​​.rpm​​​ 或 ​​.flatpakref​​ 软件包,以便它进行安装。

但如果你更倾向于使用命令行,请继续阅读。

用 dnf 搜索软件

在安装应用程序之前,你可能需要确认它是否存在于你的发行版的服务器上。通常,使用 ​​dnf​​​ 搜索应用程序的通用名称就足够了。例如,假设你最近阅读了 ​​一篇关于 Cockpit 的文章​​​,并决定尝试一下。你可以搜索 ​​cockpit​​ 验证该发行版是否包含它:

$ dnf search cockpit
Last metadata expiration check: 0:01:46 ago on Tue 18 May 2021 19:18:15 NZST.
==== Name Exactly Matched: cockpit ====
cockpit.x86_64 : Web Console for Linux servers

==== Name & Summary Matched: cockpit ==
cockpit-bridge.x86_64 : Cockpit bridge server-side component
cockpit-composer.noarch : Composer GUI for use with Cockpit
[...]

有一个精确的匹配。上面列出的匹配的软件包名为 ​​cockpit.x86_64​​​,但名称中的 ​​.x86_64​​​ 部分仅表示它兼容该 CPU 架构。默认情况下,你的系统会安装适配当前 CPU 架构的软件包,因此你可以忽略该扩展名。所以你确认你要查找的软件包确实简称为 ​​cockpit​​。

现在你可以放心地使用 ​​dnf install​​ 安装它。 此步骤需要管理员权限:

$ sudo dnf install cockpit

一般来说,这就是典型的 ​​dnf​​ 工作流:搜索并安装。

然而,有时 ​​dnf search​​​ 的结果并不清晰,或者你想要关于一个软件包的更多信息,而不仅仅是它的通用名称。有一些相关的 ​​dnf​​ 子命令,具体取决于你想要的信息。

软件包的元数据

如果你觉得你的搜索已 接近 想要的结果,但还不确定,查看软件包的元数据通常会有所帮助,例如项目的网址和描述。要获取此信息,请使用顾名思义的 ​​dnf info​​ 命令:

$ dnf info terminator
Available Packages
Name : terminator
Version : 1.92
Release : 2.el8
Architecture : noarch
Size : 526 k
Source : terminator-1.92-2.el8.src.rpm
Repository : epel
Summary : Store and run multiple GNOME terminals in one window
URL : https://github.com/gnome-terminator
License : GPLv2
Description : Multiple GNOME terminals in one window. This is a project to produce
: an efficient way of filling a large area of screen space with
: terminals. This is done by splitting the window into a resizeable
: grid of terminals. As such, you can produce a very flexible
: arrangements of terminals for different tasks.

这个信息告诉你可用软件包的版本、在你系统中注册的哪一个存储库提供了它、该项目的网站以及详细的功能描述。

哪个软件包提供的这个文件?

软件包名称并不总是与你要查找的内容相匹配。例如,假设你正在阅读的文档告诉你必须安装名为 ​​qmake-qt5​​ 的东西:

$ dnf search qmake-qt5
No matches found.

​​dnf​​​ 数据库非常广泛,因此你不要局限于搜索完全匹配的内容。你可以使用 ​​dnf provides​​ 命令来了解你正在寻找的东西是否作为某个更大的软件包的一部分而提供:

$ dnf provides qmake-qt5
qt5-qtbase-devel-5.12.5-8.el8.i686 : Development files for qt5-qtbase
Repo : appstream
Matched from:
Filename : /usr/bin/qmake-qt5

qt5-qtbase-devel-5.15.2-3.el8.x86_64 : Development files for qt5-qtbase
Repo : appstream
Matched from:
Filename : /usr/bin/qmake-qt5

可以确认应用程序 ​​qmake-qt5​​​ 是名为 ​​qt5-qtbase-devel​​​ 的软件包的一部分。它还告诉你,该应用程序会安装到 ​​/usr/bin​​,因此你知道了安装后它的确切位置。

软件包中包含哪些文件?

有时我发现自己会从完全不同的角度来对待 ​​dnf​​。有时,我已经确认我的系统上安装了一个应用程序;我只是不知道我是怎么得到它的。还有一些时候,我知道我安装了一个特定的软件包,但我不清楚这个软件包到底在我的系统上安装了什么。 如果你需要对包的有效负载payload进行 “逆向工程reverse engineer”,可以使用 ​​dnf repoquery​​​ 命令和 ​​--list​​ 选项。这将查看存储库中有关软件包的元数据,并列出该软件包提供的所有文件:

$ dnf repoquery --list qt5-qtbase-devel
/usr/bin/fixqt4headers.pl
/usr/bin/moc-qt5
/usr/bin/qdbuscpp2xml-qt5
/usr/bin/qdbusxml2cpp-qt5
/usr/bin/qlalr
/usr/bin/qmake-qt5
/usr/bin/qvkgen
/usr/bin/rcc-qt5
[...]

能很长,使用 ​​less​​ 或你喜欢的分页命令配合管道操作会有所帮助。

移除应用程序

如果你决定系统中不再需要某个应用程序,可以使用 ​​dnf remove​​ 卸载它,该软件包本身安装的文件以及不再需要的任何依赖项都会被移除:

$ dnf remove bigapp

有时,你发现随着一个应用程序一起安装的依赖项对后来安装的其他应用程序也有用。如果两个包需要相同的依赖项,​​dnf remove​​ 不会 删除依赖项。在安装和卸载大量应用程序之后,孤儿软件包散落各处的现象并不少见。大约每年我都要执行一次 ​​dnf autoremove​​ 来清除所有未使用的软件包:

$ dnf autoremove

这不是必需的,但这是一个让我的电脑感觉更好的大扫除步骤。

了解 dnf

你对包管理器的工作方式了解得越多,在必要时安装和查询应用程序就越容易。即便你不是 ​​dnf​​ 的重度使用者,当你发现自己与基于 RPM 的发行版交互时,了解它也会很有用。

告别 ​​yum​​​ 后,我最喜欢的包管理器之一是 ​​dnf​​​ 命令。虽然我不喜欢它的所有子命令,但我发现它是目前最健壮的 包管理系统package management system 之一。 ​​下载我们的 dnf 速查表​​ 习惯该命令,不要害怕尝试一些新技巧。一旦熟悉了它,你可能会发现很难使用其他任何东西替代它。

不常见但是很有用的 gcc 命令行选项发布啦!

阅读(486)评论(0)

软件工具通常情况下会提供多个功能以供选择,但是如你所知的,不是所有的功能都能被每个人用到的。公正地讲,这并不是设计上的错误,因为每个用户都会有自己的需求,他们只在他们的领域内使用该工具。然而,深入了解你所使用的工具也是很有益处的,因为你永远不知道它的某个功能会在什么时候派上用场,从而节省下你宝贵的时间。

举一个例子:编译器。一个优秀的编程语言编译器总是会提供极多的选项,但是用户一般只知道和使用其中很有限的一部分功能。更具体点来说,比如你是 C 语言开发人员,并将 Linux 作为你的开发平台,那么你很有可能会用到 gcc 编译器,这个编译器提供了 (几乎) 数不清的命令行选项列表。

你知道,你可以让 gcc 保存每个编译阶段的输出吗?你知道用于生成警告的-Wall 选项,它并不会包含一些特殊的警告吗?gcc 的很多命令行选项都不会经常用到,但是它们在某些特定的情况下会变得非常有用,例如,当你在调试代码的时候。

所以在本文中,我们会介绍这样的几个选项,提供所有必要的细节,并通过简单易懂的例子来解释它们。

但是在开始前,请注意本文中所有的例子所使用的环境:基于 Ubuntu 16.04 LTS 操作系统,gcc 版本为 5.4.0。

在每个编译阶段查看中间代码的输出

你知道在通过 gcc 编译 c 语言代码的时候大体上共分为四个阶段吗?分别为预处理 -> 编译 -> 汇编 -> 链接。在每个阶段之后,gcc 都会产生一个将移交给下一个阶段的临时输出文件。但是生成的都是临时文件,因此我们并不能看到它们——我们所看到的只是我们发起编译命令,然后它生成的我们可以直接运行的二进制文件或可执行文件。

但是比如说在预处理阶段,如果调试时需要查看代码是如何进行处理的,你要怎么做呢?好消息是 gcc 编译器提供了相应的命令行选项,你可以在标准编译命令中使用这些选项获得原本被编译器删除的中间文件。我们所说的选项就是-sava-temps。

以下是 gcc 手册中对该选项的介绍:

永久存储临时的中间文件,将它们放在当前的文件夹下并根据源文件名称为其命名。因此,用 -c -save-temps 命令编译 foo.c 文件时会生成 foo.i foo.s 和 foo.o 文件。即使现在编译器大多使用的是集成的预处理器,这命令也会生成预处理输出文件 foo.i。

当与 -x命令行选项结合使用时,-save-temps 命令会避免覆写与中间文件有着相同扩展名的输入源文件。相应的中间文件可以通过在使用 -save-temps 命令之前重命名源文件获得。

以下是怎样使用这个选项的例子:

gcc -Wall -save-temps test.c -o test-exec

下图为该命令的执行结果,验证其确实产生了中间文件:

自动草稿

因此,在截图中你所看到的 test.i、test.s、 test.o 文件都是由 -save-temps 选项产生的。这些文件分别对应于预处理、编译和链接阶段。

让你的代码可调试和可分析

你可以使用专有的工具调试和分析代码。如 gdb 就是专用于调试的工具,而 gprof 则是热门的分析工具。但你知道 gcc 特定的命令行选项也可以让你的代码可调试和可分析吗?

让我们开始调试之路吧!为了能在代码调试中使用 gdb,你需要在编译代码的时候使用 gcc 编译器提供的 -g选项。这个选项让 gcc 生成 gdb 需要的调试信息从而能成功地调试程序。

如果你想要使用此选项,建议您详细阅读 gcc 手册提供的有关此选项的详细信息——在某些情况下,其中的一些内容可能是至关重要的。 例如,以下是从手册页中摘录的内容:

GCC 允许在使用-g选项的时候配合使用 -O 选项。优化代码采用的便捷方式有时可能会产生意想不到的结果:某些你声明的变量可能不复存在;控制流可能会突然跳转到你未曾预期的位置;一些语句也许不会执行,因为它们已经把常量结果计算了或值已经被保存;一些语句可能会在不同地方执行,因为它们已经被移出循环。

然而优化的输出也是可以调试的。这就使得让优化器可以合理地优化或许有 bug 的代码。

不只是 gdb,使用 -g 选项编译代码,还可以开启使用 Valgrind 内存检测工具,从而完全发挥出该选项的潜力。或许还有一些人不知道,mencheck 工具被程序员们用来检测代码中是否存在内存泄露。你可以在这里参见这个工具的用法。

继续往下,为了能够在代码分析中使用 gprof 工具,你需要使用 -pg 命令行选项来编译代码。这会让 gcc 生成额外的代码来写入分析信息,gprof 工具需要这些信息来进行代码分析。gcc 手册 中提到:当编译你需要数据的源文件时,你必须使用这个选项,当然链接时也需要使用它。为了能了解 gprof 分析代码时具体是如何工作的,你可以转到我们的网站专用教程进行了解。

注意:-g 和-pg 选项的用法类似于上一节中使用-save-temps选项的方式。

结论

我相信除了 gcc 的专业人士,都可以在这篇文章中得到了一些启发。尝试一下这些选项,然后观察它们是如何工作的。同时,请期待本教程系列的下一部分,我们将会讨论更多有趣和有用的 gcc 命令行选项。

Chrome Remote Desktop 远程控制 Ubuntu 服务器

阅读(479)评论(0)

准备工作

众所周知,Chrome Remote Desktop 是一款十分出色的完全免费远程控制软件。其易用性和功能的强大性,以及连接的稳定性都给这款软件加分不少,唯一的缺点可能就是国内无法使用了,需要开梯子才可使用。

首先,先准备一个需要远程控制的VPS,要求 Debian或者 Ubuntu系统。还需要另一个控制端,手机电脑均可,登录你的 Google 账户:

https://remotedesktop.google.com/support/

安装(Ubuntu为例)

下载

控制端前往 https://remotedesktop.google.com/headless

 

Chrome Remote Desktop 远程控制 Ubuntu 服务器

Ubuntu被控端下载程序包

  1. wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb

用wget可以直接下载该程序包。

Chrome Remote Desktop 远程控制 Ubuntu 服务器

安装

安装该程序包(默认是下载在了/root路径,就在/root路径安装)

  1. sudo apt-get install -y /root/chrome-remote-desktop_current_amd64.deb

然后安装桌面图形,这里推荐 Xfce,因为他是最轻量的。你也可以选择其他的,可以参考(Cinnamon, Gnome, Gnome-Classic, KDE Plasma):

https://cloud.google.com/architecture/chrome-desktop-remote-on-compute-engine#install_an_x_windows_system_desktop_environment

安装Xfce

安装Xfce本体

  1. sudo DEBIAN_FRONTEND=noninteractive \
  2. apt install --assume-yes xfce4 desktop-base dbus-x11 xscreensaver

设置Xfce为默认桌面

  1. sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/xfce4-session" > /etc/chrome-remote-desktop-session'

(可选)安装桌面套件,包括Firefox,LibreOffice,PDF viewer等

  1. sudo apt install --assume-yes task-xfce-desktop

禁止默认的桌面显示

  1. sudo systemctl disable lightdm.service

(可选)安装Chrome

  1. curl -L -o google-chrome-stable_current_amd64.deb \
  2. https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  3. sudo apt install --assume-yes ./google-chrome-stable_current_amd64.deb

新建用户

由于它不支持root用户(安全起见),所以我们需要新加一个用户

  1. adduser ednovas

然后填入信息即可。后面User Information全部跳过即可。

(可选,不建议,安全第一)如果想要把用户权限提为管理员,可以使用以下命令。

  1. adduser ednovas sudo

校验

控制端,点击下一步,然后会出现类似下图的内容,选择最后一个复制黏贴到被控端。

 

Chrome Remote Desktop 远程控制 Ubuntu 服务器

记得在最后添加一个 --user-name=ednovas ,这样就可以指定以ednovas用户运行了。

这个黏贴的校验码要尽快使用,几分钟就会过期,而且只能使用一次,如果出了任何bug或者报错,就要在控制端点重来。

运行正常以后,就可以查看是否正常运行了。

状态

$USER 就是刚刚创建且运行的用户名

  1. sudo systemctl status chrome-remote-desktop@$USER

Chrome Remote Desktop 远程控制 Ubuntu 服务器

如上图即运行正常。

连接

https://remotedesktop.google.com/access 页面选择刚刚新加的,然后输入设置的PIN码连接即可。

 

Chrome Remote Desktop 远程控制 Ubuntu 服务器参考 https://cloud.google.com/architecture/chrome-desktop-remote-on-compute-engine

Linux系统多线、三线、双线路由配置出口

阅读(479)评论(0)

问题概述

我们使用一台机器,接入多根网线,并配置多个运营商网络,需要指定相关出口

操作步骤

1、在末尾加入三张路由表

vi /etc/iprou***/rt_table

  • 252 cucc
  • 251 cmcc
  • 250 tel

2、执行脚本设置路由(自行替换IP和网卡接口)

电信 IP地址:58.218.33.177 网关:58.218.33.1 网卡em2
移动 IP地址:36.149.88.37 网关:36.149.88.1 网卡em3
联通 IP地址:157.0.217.180 网关:157.0.217.1 网卡em4

把下面内容粘贴到:vi /etc/rc.local(在exit之前,保存)

  • #电信
  • ip route flush table tel
  • ip route add default via 58.218.33.1 dev em2 src 58.218.33.177 table tel
  • ip rule add from 58.218.33.177 table tel
  • #移动
  • ip route flush table cmcc
  • ip route add default via 36.149.88.1 dev em3 src 36.149.88.37 table cmcc
  • ip rule add from 36.149.88.37 table cmcc
  • #联通
  • ip route flush table cuc
  • ip route add default via 157.0.217.1 dev em4 src 157.0.217.180 table cucc
  • ip rule add from 157.0.217.180 table cucc

3、执行以下步骤

  • chmod +x /etc/rc.d/rc.local
  • systemctl enable rc-local.service
  • systemctl start rc-local.service

4、reboot 重启验证

OBS linux 使用虚拟摄像头 virtual cam

阅读(471)评论(0)

顾名思义,就是给电脑生成一个假的摄像头设备
应用场景:

电脑没有摄像头,想要一个摄像头输入
想要使用视频或者图片作为摄像头的输入, 比如可以在视频聊天时使用虚拟摄像头,播放视频给对方而不是使用真实摄像头
开发调试时为了摄像头输入图像稳定,也可以使用虚拟摄像头
需要在不支持串流的软件直播,比如在会议软件直播,需要调整画面内容, 可以采用虚拟摄像头 + OBS 的方式生成一个虚拟摄像头,然后在会议软件使用这个虚拟的摄像头进行视频即可
生成虚拟摄像头设备
这里以 manjaro(arch 系) 为例, ubuntu 使用 apt 替换即可,用法类似,自行灵活变通

pamac search v4l2loopback
pamac install v4l2loopback-dkms
sudo modprobe v4l2loopback devices=1 video_nr=2 exclusive_caps=1 card_label="VirtualWebCam"
lsmod | grep v4l2loopback
ls /dev/video*
会出现一个虚拟摄像头: 比如 /dev/video2, 这里指定设备为video2是因为一般电脑有实体摄像头时会注册video0和video1,将这两个设备名预留给真实设备

安装 obs-v4l2sink 插件
源码在: https://github.com/CatxFish/obs-v4l2sink

直接用包管理器安装

pamac search v4l2sink
pamac install obs-v4l2sink


如果前面的步骤没弄好就会像这样打不开,弄好了就可以打开辣, 格式建议选择 YUV420, 比如 google chrome 就是支持这种格式

使用
然后再其它程序中就能看到这个新的摄像头辣,如果不能使用,比如 chrome 无法识别到, 可以检查是不是按照前面说的命令执行的, 参数exclusive_caps=1很重要哦
可以

sudo modprobe -r v4l2loopback
sudo modprobe v4l2loopback devices=1 video_nr=2 exclusive_caps=1 card_label="VirtualWebCam"

 

 

Centos7安装OpenStack单机版

阅读(441)评论(0)

OpenStack是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过web接口让最终用户部署资源。

Centos 7+运行内存8G+硬盘20G
自动草稿

hostnamectl set-hostname openstack-alone
ip a

自动草稿

vi /etc/sysconfig/network-scripts/ifcfg-ens33

自动草稿

yum update
systemctl stop NetworkManager.servicesystemctl disable NetworkManager.service
systemctl restart network
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

vi /etc/selinux/config
#修改SELINUX=disabled
yum update device-mapper
yum install -y http://rdo.fedorapeople.org/rdo-release.rpm
yum install -y openstack-packstack

安装过程是很漫长的,我的电脑大概十分钟的样子。

packstack --allinone

出现如下successfully就是安装成功了
自动草稿
http://192.168.200.119/dashboard是登录地址。

http://192.168.200.119/dashboard
自动草稿

##账号密码

cat keystonerc_admin

自动草稿
OS_USERNAME是登录账号,OS_PASSWORD是登录密码。

自动草稿

登录

忘记密码 ?