Vivek Gite 发布的文章

如何在 CnetOS 7 或 RHEL 7(Red Hat 企业版 Linux)服务器上安装和配置 KVM(基于内核的虚拟机)?如何在 CentOS 7 上设置 KVM 并使用云镜像 / cloud-init 来安装客户虚拟机?

基于内核的虚拟机(KVM)是 CentOS 或 RHEL 7 的虚拟化软件。KVM 可以将你的服务器变成虚拟机管理器。本文介绍如何在 CentOS 7 或 RHEL 7 中使用 KVM 设置和管理虚拟化环境。还介绍了如何使用命令行在物理服务器上安装和管理虚拟机(VM)。请确保在服务器的 BIOS 中启用了虚拟化技术(VT)。你也可以运行以下命令测试 CPU 是否支持 Intel VT 和 AMD\_V 虚拟化技术

$ lscpu | grep Virtualization
Virtualization: VT-x

按照 CentOS 7/RHEL 7 终端服务器上的 KVM 安装步骤进行操作。

步骤 1: 安装 kvm

输入以下 yum 命令:

# yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install

How to install KVM on CentOS 7 RHEL 7 Headless Server

启动 libvirtd 服务:

# systemctl enable libvirtd
# systemctl start libvirtd

步骤 2: 确认 kvm 安装

使用 lsmod 命令和 grep命令 确认加载了 KVM 模块:

# lsmod | grep -i kvm

步骤 3: 配置桥接网络

默认情况下,由 libvirtd 配置基于 dhcpd 的网桥。你可以使用以下命令验证:

# brctl show
# virsh net-list

KVM default networking

所有虚拟机(客户机)只能对同一台服务器上的其它虚拟机进行网络访问。为你创建的私有网络是 192.168.122.0/24。验证:

# virsh net-dumpxml default

如果你希望你的虚拟机可用于 LAN 上的其他服务器,请在连接到你的 LAN 的服务器上设置一个网桥。更新你的网卡配置文件,如 ifcfg-enp3s0 或 em1:

# vi /etc/sysconfig/network-scripts/ifcfg-enp3s0 

添加一行:

BRIDGE=br0

使用 vi 保存并关闭文件。编辑 /etc/sysconfig/network-scripts/ifcfg-br0

# vi /etc/sysconfig/network-scripts/ifcfg-br0

添加以下内容:

DEVICE="br0"
# I am getting ip from DHCP server #
BOOTPROTO="dhcp"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
ONBOOT="yes"
TYPE="Bridge"
DELAY="0"

重新启动网络服务(警告:ssh 命令将断开连接,最好重新启动该设备):

# systemctl restart NetworkManager

brctl 命令验证它:

# brctl show

步骤 4: 创建你的第一个虚拟机

我将会创建一个 CentOS 7.x 虚拟机。首先,使用 wget 命令获取 CentOS 7.x 最新的 ISO 镜像:

# cd /var/lib/libvirt/boot/
# wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso

验证 ISO 镜像:

# wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/sha256sum.txt
# sha256sum -c sha256sum.txt

创建 CentOS 7.x 虚拟机

在这个例子中,我创建了 2GB RAM,2 个 CPU 核心,1 个网卡和 40 GB 磁盘空间的 CentOS 7.x 虚拟机,输入:

# virt-install \
--virt-type=kvm \
--name centos7 \
--ram 2048 \
--vcpus=1 \
--os-variant=centos7.0 \
--cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-1708.iso \
--network=bridge=br0,model=virtio \
--graphics vnc \
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2

从另一个终端通过 ssh 配置 vnc 登录,输入:

# virsh dumpxml centos7 | grep v nc
<graphics type='vnc' port='5901' autoport='yes' listen='127.0.0.1'>

请记录下端口值(即 5901)。你需要使用 SSH 客户端来建立隧道和 VNC 客户端才能访问远程 vnc 服务器。在客户端/桌面/ macbook pro 系统中输入以下 SSH 端口转发命令:

$ ssh [email protected] -L 5901:127.0.0.1:5901

一旦你建立了 ssh 隧道,你可以将你的 VNC 客户端指向你自己的 127.0.0.1 (localhost) 地址和端口 5901,如下所示:

你应该看到 CentOS Linux 7 客户虚拟机安装屏幕如下:

现在只需按照屏幕说明进行操作并安装CentOS 7。一旦安装完成后,请继续并单击重启按钮。 远程服务器关闭了我们的 VNC 客户端的连接。 你可以通过 KVM 客户端重新连接,以配置服务器的其余部分,包括基于 SSH 的会话或防火墙。

使用云镜像

以上安装方法对于学习目的或单个虚拟机而言是可行的。你需要部署大量的虚拟机吗? 可以试试云镜像。你可以根据需要修改预先构建的云镜像。例如,使用 Cloud-init 添加用户、ssh 密钥、设置时区等等,这是处理云实例的早期初始化的事实上的多分发包。让我们看看如何创建带有 1024MB RAM,20GB 磁盘空间和 1 个 vCPU 的 CentOS 7 虚拟机。(LCTT 译注: vCPU 即电脑中的虚拟处理器)

获取 CentOS 7 云镜像

# cd /var/lib/libvirt/boot
# wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2

创建所需的目录

# D=/var/lib/libvirt/images
# VM=centos7-vm1 ## vm name ##
# mkdir -vp $D/$VM
mkdir: created directory '/var/lib/libvirt/images/centos7-vm1'

创建元数据文件

# cd $D/$VM
# vi meta-data

添加以下内容:

instance-id: centos7-vm1
local-hostname: centos7-vm1

创建用户数据文件

我将使用 ssh 密钥登录到虚拟机。所以确保你有 ssh 密钥:

# ssh-keygen -t ed25519 -C "VM Login ssh key"

ssh-keygen command

请参阅 “如何在 Linux/Unix 系统上设置 SSH 密钥” 来获取更多信息。编辑用户数据如下:

# cd $D/$VM
# vi user-data

添加如下(根据你的设置替换 hostnameusersssh-authorized-keys):

#cloud-config

# Hostname management
preserve_hostname: False
hostname: centos7-vm1
fqdn: centos7-vm1.nixcraft.com

# Users
users:
    - default
    - name: vivek
      groups: ['wheel']
      shell: /bin/bash
      sudo: ALL=(ALL) NOPASSWD:ALL
      ssh-authorized-keys:
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIMP3MOF2ot8MOdNXCpHem0e2Wemg4nNmL2Tio4Ik1JY VM Login ssh key

# Configure where output will go
output:
  all: ">> /var/log/cloud-init.log"

# configure interaction with ssh server
ssh_genkeytypes: ['ed25519', 'rsa']

# Install my public ssh key to the first user-defined user configured
# in cloud.cfg in the template (which is centos for CentOS cloud images)
ssh_authorized_keys:
  - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIMP3MOF2ot8MOdNXCpHem0e2Wemg4nNmL2Tio4Ik1JY VM Login ssh key

# set timezone for VM
timezone: Asia/Kolkata

# Remove cloud-init 
runcmd:
  - systemctl stop network && systemctl start network
  - yum -y remove cloud-init

复制云镜像

# cd $D/$VM
# cp /var/lib/libvirt/boot/CentOS-7-x86_64-GenericCloud.qcow2 $VM.qcow2

创建 20GB 磁盘映像

# cd $D/$VM
# export LIBGUESTFS_BACKEND=direct
# qemu-img create -f qcow2 -o preallocation=metadata $VM.new.image 20G
# virt-resize --quiet --expand /dev/sda1 $VM.qcow2 $VM.new.image

Set VM image disk size

用缩放后的镜像覆盖它:

# cd $D/$VM
# mv $VM.new.image $VM.qcow2

创建一个 cloud-init ISO

# mkisofs -o $VM-cidata.iso -V cidata -J -r user-data meta-data

Creating a cloud-init ISO

创建一个池

# virsh pool-create-as --name $VM --type dir --target $D/$VM
Pool centos7-vm1 created

安装 CentOS 7 虚拟机

# cd $D/$VM
# virt-install --import --name $VM \
--memory 1024 --vcpus 1 --cpu host \
--disk $VM.qcow2,format=qcow2,bus=virtio \
--disk $VM-cidata.iso,device=cdrom \
--network bridge=virbr0,model=virtio \
--os-type=linux \
--os-variant=centos7.0 \
--graphics spice \
--noautoconsole

删除不需要的文件:

# cd $D/$VM
# virsh change-media $VM hda --eject --config
# rm meta-data user-data centos7-vm1-cidata.iso

查找虚拟机的 IP 地址

# virsh net-dhcp-leases default

CentOS7-VM1- Created

登录到你的虚拟机

使用 ssh 命令:

# ssh [email protected]

Sample VM session

有用的命令

让我们看看管理虚拟机的一些有用的命令。

列出所有虚拟机

# virsh list --all

获取虚拟机信息

# virsh dominfo vmName
# virsh dominfo centos7-vm1

停止/关闭虚拟机

# virsh shutdown centos7-vm1

开启虚拟机

# virsh start centos7-vm1

将虚拟机标记为在引导时自动启动

# virsh autostart centos7-vm1

重新启动(软安全重启)虚拟机

# virsh reboot centos7-vm1

重置(硬重置/不安全)虚拟机

# virsh reset centos7-vm1

删除虚拟机

# virsh shutdown centos7-vm1
# virsh undefine centos7-vm1
# virsh pool-destroy centos7-vm1
# D=/var/lib/libvirt/images
# VM=centos7-vm1
# rm -ri $D/$VM

查看 virsh 命令类型的完整列表:

# virsh help | less
# virsh help | grep reboot

关于作者

作者是 nixCraft 的创建者,也是经验丰富的系统管理员和 Linux 操作系统/ Unix shell 脚本的培训师。 他曾与全球客户以及 IT,教育,国防和空间研究以及非营利部门等多个行业合作。 在 TwitterFacebookGoogle + 上关注他。


via: https://www.cyberciti.biz/faq/how-to-install-kvm-on-centos-7-rhel-7-headless-server/

作者:Vivek Gite 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

yum 命令是 RHEL / CentOS Linux 系统中用来安装和更新软件包的一个工具。我知道如何使用 yum 命令行 更新系统,但是我想用 cron 任务自动更新软件包。该如何配置才能使得 yum 使用 cron 自动更新系统补丁或更新呢?

首先需要安装 yum-cron 软件包。该软件包提供以 cron 命令运行 yum 更新所需的文件。如果你想要每晚通过 cron 自动更新可以安装这个软件包。

CentOS/RHEL 6.x/7.x 上安装 yum cron

输入以下 yum 命令:

$ sudo yum install yum-cron

使用 CentOS/RHEL 7.x 上的 systemctl 启动服务:

$ sudo systemctl enable yum-cron.service 
$ sudo systemctl start yum-cron.service 
$ sudo systemctl status yum-cron.service

在 CentOS/RHEL 6.x 系统中,运行:

$ sudo chkconfig yum-cron on 
$ sudo service yum-cron start

yum-cronyum 的一个替代方式。使得 cron 调用 yum 变得非常方便。该软件提供了元数据更新、更新检查、下载和安装等功能。yum-cron 的各种功能可以使用配置文件配置,而不是输入一堆复杂的命令行参数。

配置 yum-cron 自动更新 RHEL/CentOS Linux

使用 vi 等编辑器编辑文件 /etc/yum/yum-cron.conf/etc/yum/yum-cron-hourly.conf

$ sudo vi /etc/yum/yum-cron.conf

确保更新可用时自动更新:

apply_updates = yes

可以设置通知 email 的发件地址。注意: localhost将会被system\_name` 的值代替。

email_from = root@localhost

列出发送到的 email 地址。

email_to = your-it-support@some-domain-name

发送 email 信息的主机名。

email_host = localhost

CentOS/RHEL 7.x 上不想更新内核的话,添加以下内容:

exclude=kernel*

RHEL/CentOS 6.x 下添加以下内容来禁用内核更新

YUM_PARAMETER=kernel*

保存并关闭文件。如果想每小时更新系统的话修改文件 /etc/yum/yum-cron-hourly.conf,否则文件 /etc/yum/yum-cron.conf 将使用以下命令每天运行一次(使用 cat 命令 查看):

$ cat /etc/cron.daily/0yum-daily.cron

示例输出:

#!/bin/bash

# Only run if this flag is set. The flag is created by the yum-cron init
# script when the service is started -- this allows one to use chkconfig and
# the standard "service stop|start" commands to enable or disable yum-cron.
if [[ ! -f /var/lock/subsys/yum-cron ]]; then
 exit 0
fi

# Action!
exec /usr/sbin/yum-cron /etc/yum/yum-cron-hourly.conf
[root@centos7-box yum]# cat /etc/cron.daily/0yum-daily.cron
#!/bin/bash

# Only run if this flag is set. The flag is created by the yum-cron init
# script when the service is started -- this allows one to use chkconfig and
# the standard "service stop|start" commands to enable or disable yum-cron.
if [[ ! -f /var/lock/subsys/yum-cron ]]; then
 exit 0
fi

# Action!
exec /usr/sbin/yum-cron

完成配置。现在你的系统将每天自动更新一次。更多细节请参照 yum-cron 的说明手册。

$ man yum-cron

关于作者

作者是 nixCraft 的创始人,一个经验丰富的系统管理员和 Linux/Unix 脚本培训师。他曾与全球客户合作,领域涉及IT,教育,国防和空间研究以及非营利部门等多个行业。请在 TwitterFacebookGoogle+ 上关注他。获取更多有关系统管理、Linux/Unix 和开源话题请关注我的 RSS/XML 地址


via: https://www.cyberciti.biz/faq/fedora-automatic-update-retrieval-installation-with-cron/

作者:Vivek Gite 译者:shipsw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

我是一名新的 Vim 编辑器用户。我用它编写 Python 代码。有没有办法在 vim 中查看 Python 文档而无需访问互联网?假设我的光标在 Python 的 print 关键字下,然后按下 F1,我想查看关键字 print 的帮助。如何在 vim 中显示 python help() ?如何在不离开 vim 的情况下调用 pydoc3/pydoc 寻求帮助?

pydocpydoc3 命令可以根据 Python 关键字、主题、函数、模块或包的名称显示文本文档,或在模块内或包中的模块对类或函数的引用。你可以从 Vim 中调用 pydoc。让我们看看如何在 Vim 编辑器中使用 pydoc 访问 Python 文档。

使用 pydoc 访问 python 帮助

语法是:

pydoc keyword
pydoc3 keyword
pydoc len
pydoc print

编辑你的 ~/.vimrc

$ vim ~/.vimrc

pydoc3 添加以下配置(python v3.x 文档)。在正常模式下创建 H 键的映射:

nnoremap <buffer> H :<C-u>execute "!pydoc3 " . expand("<cword>")<CR>

保存并关闭文件。打开 Vim 编辑器:

$ vim file.py

写一些代码:

#!/usr/bin/python3
x=5
y=10
z=x+y
print(z)
print("Hello world")

将光标置于 Python 关键字 print 的下方,然后按下 Shift,然后按 H。你将看到下面的输出:

Access Python Help Within Vim

按 H 查看 Python 关键字 print 的帮助

如何在使用 Vim 时查看 python 帮助

jedi-vim 是一个绑定自动补全库 Jed 的 Vim 插件。它可以做很多事情,包括当你按下 Shift 后跟 K (即按大写 K) 就显示关键字的帮助。

如何在 Linux 或类 Unix 系统上安装 jedi-vim

使用 pathogenvim-plugVundle 安装 jedi-vim。我使用的是 vim-plug。在 ~/.vimrc 中添加以下行:

Plug 'davidhalter/jedi-vim'

保存并关闭文件。启动 Vim 并输入:

PlugInstall

在 Arch Linux 上,你还可以使用 pacman 命令从官方仓库中的 vim-jedi 安装 jedi-vim:

$ sudo pacman -S vim-jedi

它也可以在 Debian(比如 8)和 Ubuntu( 比如 14.04)上使用 apt-get command/apt-get command 安装 vim-python-jedi:

$ sudo apt install vim-python-jedi

在 Fedora Linux 上,它可以用 dnf 安装 vim-jedi:

$ sudo dnf install vim-jedi

Jedi 默认是自动初始化的。所以你不需要进一步的配置。要查看 Documentation/Pydoc,请按 K。它将弹出帮助窗口:

How to view python help when using vim

关于作者

作者是 nixCraft 的创建者,也是经验丰富的系统管理员和 Linux 操作系统/Unix shell 脚本的培训师。他曾与全球客户以及 IT、教育、国防和太空研究以及非营利部门等多个行业合作。在 TwitterFacebookGoogle + 上关注他。


via: https://www.cyberciti.biz/faq/how-to-access-view-python-help-when-using-vim/

作者:Vivek Gite 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如何在 Ubuntu Linux 桌面上安装 spotify 来在线听音乐?

Spotify 是一个可让你访问大量歌曲的数字音乐流服务。你可以免费收听或者购买订阅,可以创建播放列表。订阅用户可以免广告收听音乐,你会得到更好的音质。本教程展示如何使用在 Ubuntu、Mint、Debian、Fedora、Arch 和其他更多发行版上的 snap 包管理器安装 Spotify。

在 Linux 上安装 spotify

在 Linux 上安装 spotify 的步骤如下:

  1. 安装 snapd
  2. 打开 snapd
  3. 找到 Spotify snap:snap find spotify
  4. 安装 spotify:sudo snap install spotify
  5. 运行:spotify &

让我们详细看看所有的步骤和例子。

步骤 1 - 安装 snapd

你需要安装 snapd 包。它是一个守护进程(服务),并能在 Linux 系统上启用 snap 包管理。

Debian/Ubuntu/Mint Linux 上的 snapd

输入以下 apt 命令/ apt-get 命令

$ sudo apt install snapd

在 Arch Linux 上安装 snapd

snapd 只包含在 Arch User Repository(AUR)中。运行 yaourt 命令(参见如何在 Archlinux 上安装 yaourt):

$ sudo yaourt -S snapd
$ sudo systemctl enable --now snapd.socket

在 Fedora 上获取 snapd

运行 snapd 命令:

sudo dnf install snapd
sudo ln -s /var/lib/snapd/snap /snap

OpenSUSE 安装 snapd

执行如下的 zypper 命令:

### Tumbleweed verson ###
$ sudo zypper addrepo http://download.opensuse.org/repositories/system:/snappy/openSUSE_Tumbleweed/ snappy
### Leap version ##
$ sudo zypper addrepo http://download.opensuse.org/repositories/system:/snappy/openSUSE_Leap_42.3/ snappy

安装:

$ sudo zypper install snapd
$ sudo systemctl enable --now snapd.socket

步骤 2 - 在 Linux 上使用 snap 安装 spofity

执行 snap 命令:

$ snap find spotify

snap search for spotify app command

安装它:

$ sudo snap install spotify

How to install Spotify application on Linux using snap command

步骤 3 - 运行 spotify 并享受它

从 GUI 运行它,或者只需输入:

$ spotify

在启动时自动登录你的帐户:

$ spotify --username [email protected]
$ spotify --username [email protected] --password 'myPasswordHere'

在初始化时使用给定的 URI 启动 Spotify 客户端:

$ spotify --uri=<uri>

以指定的网址启动:

$ spotify --url=<url>

Spotify client app running on my Ubuntu Linux desktop

关于作者

作者是 nixCraft 的创建者,是经验丰富的系统管理员,也是 Linux 操作系统/Unix shell 脚本的培训师。他曾与全球客户以及 IT、教育、国防和太空研究以及非营利部门等多个行业合作。在 TwitterFacebookGoogle + 上关注他。


via: https://www.cyberciti.biz/faq/how-to-install-spotify-application-on-linux/

作者:Vivek Gite 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果你是一个 Linux 系统管理方面的新手,如何在 Linux 上使用命令行方式去安装或者更新 Intel/AMD CPU 的微码固件呢?

微码 microcode 就是由 Intel/AMD 提供的 CPU 固件。Linux 的内核可以在引导时更新 CPU 固件,而无需 BIOS 更新。处理器的微码保存在内存中,在每次启动系统时,内核可以更新这个微码。这些来自 Intel/AMD 的微码的更新可以去修复 bug 或者使用补丁来防范 bug。这篇文章演示了如何使用包管理器或由 lntel 提供的 Linux 处理器微码更新来安装 AMD 或 Intel 的微码更新。

如何查看当前的微码状态

以 root 用户运行下列命令:

# dmesg | grep microcode

输出如下:

Verify microcode update on a CentOS RHEL Fedora Ubuntu Debian Linux

请注意,你的 CPU 在这里完全有可能出现没有可用的微码更新的情况。如果是这种情况,它的输出可能是如下这样的:

[ 0.952699] microcode: sig=0x306a9, pf=0x10, revision=0x1c
[ 0.952773] microcode: Microcode Update Driver: v2.2.

如何在 Linux 上使用包管理器去安装微码固件更新

对于运行在 x86/amd64 架构的 CPU 上的 Linux 系统,Linux 自带了工具去更改或者部署微码固件。在 Linux 上安装 AMD 或者 Intel 的微码固件的过程如下:

  1. 打开终端应用程序
  2. Debian/Ubuntu Linux 用户推输入:sudo apt install intel-microcode
  3. CentOS/RHEL Linux 用户输入:sudo yum install microcode_ctl

对于流行的 Linux 发行版,这个包的名字一般如下 :

  • microcode_ctllinux-firmware —— CentOS/RHEL 微码更新包
  • intel-microcode —— Debian/Ubuntu 和衍生发行版的适用于 Intel CPU 的微码更新包
  • amd64-microcode —— Debian/Ubuntu 和衍生发行版的适用于 AMD CPU 的微码固件
  • linux-firmware —— 适用于 AMD CPU 的 Arch Linux 发行版的微码固件(你不用做任何操作,它是默认安装的)
  • intel-ucode —— 适用于 Intel CPU 的 Arch Linux 发行版微码固件
  • microcode_ctllinux-firmwareucode-intel —— Suse/OpenSUSE Linux 微码更新包

警告 :在某些情况下,微码更新可能会导致引导问题,比如,服务器在引导时被挂起或者自动重置。以下的步骤是在我的机器上运行过的,并且我是一个经验丰富的系统管理员。对于由此引发的任何硬件故障,我不承担任何责任。在做固件更新之前,请充分评估操作风险!

示例

在使用 Intel CPU 的 Debian/Ubuntu Linux 系统上,输入如下的 apt 命令/apt-get 命令

$ sudo apt-get install intel-microcode

示例输出如下:

How to install Intel microcode firmware Linux

必须重启服务器以激活微码 更新:

$ sudo reboot

重启后检查微码状态:

# dmesg | grep 'microcode'

示例输出如下:

[ 0.000000] microcode: microcode updated early to revision 0x1c, date = 2015-02-26
[ 1.604672] microcode: sig=0x306a9, pf=0x10, revision=0x1c
[ 1.604976] microcode: Microcode Update Driver: v2.01 <[email protected]>, Peter Oruba

如果你使用的是 RHEL/CentOS 系统,使用 yum 命令 尝试去安装或者更新以下两个包:

$ sudo yum install linux-firmware microcode_ctl
$ sudo reboot
$ sudo dmesg | grep 'microcode'

如何更新/安装从 Intel 网站上下载的微码

只有在你的 CPU 制造商建议这么做的时候,才可以使用下列的方法去更新/安装微码,除此之外,都应该使用上面的方法去更新。大多数 Linux 发行版都可以通过包管理器来维护、更新微码。使用包管理器的方法是经过测试的,对大多数用户来说是最安全的方式。

如何为 Linux 安装 Intel 处理器微码块(20180108 发布)

首先通过 AMD 或 Intel 网站 去获取最新的微码固件。在本示例中,我有一个名称为 ~/Downloads/microcode-20180108.tgz 的文件(不要忘了去验证它的检验和),它的用途是去防范 meltdown/Spectre bug。先使用 tar 命令去提取它:

$ mkdir firmware
$ cd firmware
$ tar xvf ~/Downloads/microcode-20180108.tgz
$ ls -l

示例输出如下:

drwxr-xr-x 2 vivek vivek 4096 Jan 8 12:41 intel-ucode
-rw-r--r-- 1 vivek vivek 4847056 Jan 8 12:39 microcode.dat
-rw-r--r-- 1 vivek vivek 1907 Jan 9 07:03 releasenote
我只在 CentOS 7.x/RHEL、 7.x/Debian 9.x 和 Ubuntu 17.10 上测试了如下操作。如果你没有找到 /sys/devices/system/cpu/microcode/reload 文件的话,更老的发行版所带的更老的内核也许不能使用此方法。参见下面的讨论。请注意,在应用了固件更新之后,有一些客户遇到了系统重启现象。特别是对于那些运行 Intel Broadwell 和 Haswell CPU 的用于客户机和数据中心服务器上的系统。不要在 Intel Broadwell 和 Haswell CPU 上应用 20180108 版本。尽可能使用软件包管理器方式。

检查一下,确保存在 /sys/devices/system/cpu/microcode/reload

$ ls -l /sys/devices/system/cpu/microcode/reload

你必须使用 cp 命令 拷贝 intel-ucode 目录下的所有文件到 /lib/firmware/intel-ucode/ 下面:

$ sudo cp -v intel-ucode/* /lib/firmware/intel-ucode/

你只需要将 intel-ucode 这个目录整个拷贝到 /lib/firmware/ 目录下即可。然后在重新加载接口中写入 1 去重新加载微码文件:

# echo 1 > /sys/devices/system/cpu/microcode/reload

更新现有的 initramfs,以便于下次启动时它能通过内核来加载:

$ sudo update-initramfs -u
$ sudo reboot

重启后通过以下的命令验证微码是否已经更新:

# dmesg | grep microcode

到此为止,就是更新处理器微码的全部步骤。如果一切顺利的话,你的 Intel CPU 的固件将已经是最新的版本了。

关于作者

作者是 nixCraft 的创始人、一位经验丰富的系统管理员、Linux/Unix 操作系统 shell 脚本培训师。他与全球的包括 IT、教育、国防和空间研究、以及非盈利组织等各行业的客户一起工作。可以在 TwitterFacebookGoogle+ 上关注他。


via: https://www.cyberciti.biz/faq/install-update-intel-microcode-firmware-linux/

作者:Vivek Gite 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

我在我的 Linux 系统上定义了如下 mount 别名:

alias mount='mount | column -t'

但是我需要在挂载文件系统和其他用途时绕过这个 bash 别名。我如何在 Linux、*BSD、macOS 或者类 Unix 系统上临时禁用或者绕过 bash shell 呢?

你可以使用 alias 命令定义或显示 bash shell 别名。一旦创建了 bash shell 别名,它们将优先于外部或内部命令。本文将展示如何暂时绕过 bash 别名,以便你可以运行实际的内部或外部命令。

4 种绕过 bash 别名的方法

尝试以下任意一种方法来运行被 bash shell 别名绕过的命令。让我们如下定义一个别名

alias mount='mount | column -t'

运行如下:

mount

示例输出:

sysfs                        on  /sys                             type  sysfs            (rw,nosuid,nodev,noexec,relatime)
proc                         on  /proc                            type  proc             (rw,nosuid,nodev,noexec,relatime)
udev                         on  /dev                             type  devtmpfs         (rw,nosuid,relatime,size=8023572k,nr_inodes=2005893,mode=755)
devpts                       on  /dev/pts                         type  devpts           (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs                        on  /run                             type  tmpfs            (rw,nosuid,noexec,relatime,size=1610240k,mode=755)
/dev/mapper/ubuntu--vg-root  on  /                                type  ext4             (rw,relatime,errors=remount-ro,data=ordered)
/dev/sda1                    on  /boot                            type  ext4             (rw,relatime,data=ordered)
binfmt_misc                  on  /proc/sys/fs/binfmt_misc         type  binfmt_misc      (rw,relatime)
lxcfs                        on  /var/lib/lxcfs                   type  fuse.lxcfs       (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

方法 1 - 使用 \command

输入以下命令暂时绕过名为 mount 的 bash 别名:

\mount

方法 2 - 使用 "command"'command'

如下引用 mount 命令调用实际的 /bin/mount

"mount"

或者

'mount'

方法 3 - 使用命令的完全路径

使用完整的二进制路径,如 /bin/mount

/bin/mount
/bin/mount /dev/sda1 /mnt/sda

方法 4 - 使用内部命令 command

语法是:

command cmd
command cmd arg1 arg2

要覆盖 .bash_aliases 中设置的别名,例如 mount

command mount
command mount /dev/sdc /mnt/pendrive/

“command” 直接运行命令或显示关于命令的信息。它带参数运行命令会抑制 shell 函数查询或者别名,或者显示有关给定命令的信息。

关于 unalias 命令的说明

要从当前会话的已定义别名列表中移除别名,请使用 unalias 命令:

unalias mount

要从当前 bash 会话中删除所有别名定义:

unalias -a

确保你更新你的 ~/.bashrc$HOME/.bash_aliases。如果要永久删除定义的别名,则必须删除定义的别名:

vi ~/.bashrc

或者

joe $HOME/.bash_aliases

想了解更多信息,参考这里的在线手册,或者输入下面的命令查看:

man bash
help command
help unalias
help alias

via: https://www.cyberciti.biz/faq/bash-bypass-alias-command-on-linux-macos-unix/

作者:Vivek Gite 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出