欢迎光临
我们一直在努力

Linux技巧

一张图带你看Linux内核运行原理

阅读(211)评论(0)

Linux的都知道Kernel的含义,在我看来就是操作系统的核心或者最重要的部分。众所周知的是,几乎整个互联网都运行在 Linux上,从网络协议,到服务器,到你平常访问的绝大多数网站,都能看到它的身影,Linux 内核就是最复杂最流行的开源项目之一。如果你希望学习内核知识,在网上可以搜到无数的资料,但是Kernel真的是一个非常复杂的项目,从广义上来讲Kernel就是一个软件,它在硬件和软件之间提供了一个层,严格地从计算机科学的角度讲,Linux中所指的Kernel是Linus Torvalds在90年代初期写的那些代码。
一张图带你看Linux内核运行原理
俗话说“一图胜千言”,下面通过一张完整的 Linux 内核运行原理图,可以很方便地让你学习内核知识。在 Linux 内核中,有许多层次、模块、功能调用和函数。要把其中的每一块儿都弄明白是很不容易的,不过MakeLinux做了一个非常酷的完整的内核交互图,上面非常清晰地标注了每一个组件部分及之间的关系,这张Linux内核交互图可以很好的帮助你不用一一细读 Linux 内核代码,就能弄明白各个内核子系统间复杂的内部联系。
一张图带你看Linux内核运行原理
这张图上包含有超过400个关键函数,这400个关键函数被分进了一些主要的子系统,彼此之间的关系用连线标明了,交互地图在这里,非常感谢 MakeLinux 制作的Linux内核交互图,希望能帮你更清楚的认识Linux Kernel。

轻松学会源码编译Vim 8.0

阅读(187)评论(0)

轻松学会源码编译Vim 8.0

1、首先,安装包括 Git 在内的所有必备的库。

对于一个 Debian 类的 Linux 发行版,例如 Ubuntu,命令如下:

sudo apt-get install libncurses5-dev libgnome2-dev libgnomeui-dev \
libgtk2.0-dev libatk1.0-dev libbonoboui2-dev \
libcairo2-dev libx11-dev libxpm-dev libxt-dev python-dev \
python3-dev ruby-dev lua5.1 lua5.1-dev libperl-dev git

在 Ubuntu 16.04 上,lua 开发包的名称是 liblua5.1-dev而非 lua5.1-dev。
如果你知道你将使用哪种语言,可随意删去你不需要的包。例如:Python2 python-dev或者是 Ruby ruby-dev。这一原则适用于本文的大部分内容。

对于 Fedora 20,将是以下命令:

sudo yum install -y ruby ruby-devel lua lua-devel luajit \
luajit-devel ctags git python python-devel \
python3 python3-devel tcl-devel \
perl perl-devel perl-ExtUtils-ParseXS \
perl-ExtUtils-XSpp perl-ExtUtils-CBuilder \
perl-ExtUtils-Embed

在 Fedora 20 上需要这一步来纠正安装 XSubPP 时出现的问题:

### 从 /usr/bin 到 perl 目录做个 xsubpp (perl) 的符号链接

sudo ln -s /usr/bin/xsubpp /usr/share/perl5/ExtUtils/xsubpp
2、如果你已经安装了 vim,删掉它。
sudo apt-get remove vim vim-runtime gvim

如果是 Ubuntu 12.04.2,你或许也需要同时删除下面这些软件包:

sudo apt-get remove vim-tiny vim-common vim-gui-common vim-nox

 

3、获取 vim 源代码.

注意:如果你使用python,你的配置目录或许有一个特定的机器名(例如 config-3.5m-x86_64-linux-gnu)。检查/usr/lib/python[2/3/3.5]目录来找到你的 python 配置目录,据此更改 python-config-dir和/或python3-config-dir的参数。

添加/删除下面的编译参数以适合您的设置。例如,如果您不打算写任何 Lua 脚本,您可以删去 enable-luainterp。同时,如果你使用的不是vim8.0,请确认下面VIMRUNTIMEDIR参数设置正确(例如,如果使用vim8.0a,就用/usr/share/vim/vim80a)。记住,一些 vim 安装是直接安装 /usr/share/vim

下的;调整好参数以适应你的系统:

cd ~
git clone https://github.com/vim/vim.git
cd vim
./configure --with-features=huge \
--enable-multibyte \
--enable-rubyinterp=yes \
--enable-pythoninterp=yes \
--with-python-config-dir=/usr/lib/python2.7/config \
--enable-python3interp=yes \
--with-python3-config-dir=/usr/lib/python3.5/config \
--enable-perlinterp=yes \
--enable-luainterp=yes \
--enable-gui=gtk2 --enable-cscope --prefix=/usr
make VIMRUNTIMEDIR=/usr/share/vim/vim80

在 Ubuntu 16.04 上,由于同时开启了 Python2 和 Python3,Python 支持将不工作。 阅读 chirinosky 的回答 以获取变通的处理方法。

如果你想将来轻松卸载 vim,可以使用 checkinstall来安装 。

sudo apt-get install checkinstall
cd ~/vim
sudo checkinstall

否则,可以使用 make来安装。

cd ~/vim
sudo make install

要让 vim 成为你默认的编辑器,请使用 update-alternative。

sudo update-alternatives --install /usr/bin/editor editor /usr/bin/vim 1
sudo update-alternatives --set editor /usr/bin/vim
sudo update-alternatives --install /usr/bin/vi vi /usr/bin/vim 1
sudo update-alternatives --set vi /usr/bin/vim
4、 确认 Vim 应用程序版本。

如果你的 gvim 不工作(在 ubuntu 12.04.1 LTS 上),试着把 --enable-gui=gtk2参数变为 --enable-gui=gnome2。

如果你遇到问题,仔细检查在步骤 3 开始提到的,使用正确的 Python 配置目录配置 configure。

这些 configure和  make命令假设你是一个 Debian 发行版,Vim 的运行库文件目录放在 /usr/share/vim/vim80/,这不是 vim 的默认路径。 在 configure命令中的 --prefix=/usr也是如此。这些参数或许对一个不是基于 Debian 的 Linux 发行版来说是有所不同的,在这种情况下,试着移除 configure命令中的 --prefix变量和 make命令中的 VIMRUNTIMEDIR(换句话说,使用这些参数的默认值)。

关闭 Ubuntu 中的关机/重启确认的小技巧

阅读(245)评论(0)

Ubuntu 新手来说,有很多新东西要学,但是网上很多教程不是针对新手的。在这里,我们不走寻常路。不能说全部的教程都是为初学者准备,但至少大部分是。
关闭 Ubuntu 中的关机/重启确认

这篇文章也是一篇新手教程,并且展示如何在每次执行关机、重启、注销时禁用确定框。Ubuntu 总是配置好了一个对话框,每当你要关机、重启或者注销时提示你。这是一个保护措施,防止你本不打算这样做却错误关机或重启。不是所有人都想每次关机的时候被询问。忙碌的小伙伴们可能就让自己的电脑那么醒着,因为他执行了关闭命令,却忘了确认那个该死的对话框。

这个教程将会指导你每一次关机的时候如何避免那个对话框。

当这个特性被激活,你将会收到下面的提示。

Are you sure you want to close all programs and shutdown your computer?

运行下面命令关掉它。

按下键盘上的 Ctrl – Alt – T打开终端。然后敲击下面的命令

gsettings set com.canonical.indicator.session suppress-logout-restart-shutdown true

就这么简单,你再也不会被该死的确认对话框骚扰了。

如果想恢复这个对话框,敲下面的命令就可以了

gsettings set com.canonical.indicator.session suppress-logout-restart-shutdown false

自动草稿

Linux 中使用 sFTP 上传或下载文件与文件夹

阅读(412)评论(0)

sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与 FTP(文件传输协议)类似。 然而,sFTP 比 FTP 更安全;它通过加密 SSH 传输处理所有操作。

它可以配置使用几个有用的 SSH 功能,如公钥认证和压缩。 它连接并登录到指定的远程机器,然后切换到交互式命令模式,在该模式下用户可以执行各种命令。

在本文中,我们将向你展示如何使用 sFTP 上传/下载整个目录(包括其子目录和子文件)。

如何在 Linux 中使用 sFTP 传输文件/文件夹

默认情况下,SFTP 协议采用和 SSH 传输协议一样的方式建立到远程服务器的安全连接。虽然,用户验证使用类似于 SSH 默认设置的密码方式,但是,建议创建和使用 SSH 无密码登录,以简化和更安全地连接到远程主机。

要连接到远程 sftp 服务器,如下建立一个安全 SSH 连接并创建 SFTP 会话:

$ sftp tecmint@192.168.56.10

登录到远程主机后,你可以如下运行交互式的 sFTP 命令:

sftp> ls            #list directory 
sftp> pwd           #print working directory on remote host
sftp> lpwd          #print working directory on local host
sftp> mkdir uploads     #create a new directory

Linux 中使用 sFTP 上传或下载文件与文件夹

如何使用 sFTP 上传文件夹

要将整个目录上传到远程 Linux 主机中,请使用put命令。但是,如果目录名称不存在于远程主机上的工作目录中,你将收到错误,如下面的屏幕截图所示。

因此,首先在远程主机上创建一个具有相同名称的目录,然后从本地主机上传它,-r参数允许拷贝子目录和子文件:

sftp> put -r  Tecmint.com-articles
sftp> mkdir Tecmint.com-articles
sftp> put -r Tecmint.com-articles

Linux 中使用 sFTP 上传或下载文件与文件夹
要保留修改时间、访问时间以及被传输的文件的模式,请使用-p标志。

sftp> put -pr Tecmint.com-articles
如何使用 sFTP 下载文件夹

要从远程 Linux 主机下载整个 fstools-0.0 文件夹到本机中,如下所示使用 get 命令带上-r标志:

sftp> get -r fstools-0.0

Linux 中使用 sFTP 上传或下载文件与文件夹

使用 sFTP 下载目录

如果文件夹已经下载完成了,接着查看本机的工作目录。

要退出 sFTP shell,输入:

sftp> bye或者sftp> exit

请注意,为了防止用户访问远程主机上的整个文件系统,出于安全原因,你可以使用 chroot Jail将 sFTP 用户限制到其主目录中。

就是这样了!在本文中,我们向你展示了如何使用 sFTP 上传/下载整个目录。

实战Centos系统部署Codis集群服务

阅读(293)评论(0)

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.

实战Centos系统部署Codis集群服务

一、Codis简介

Codis 是 Wandoujia Infrastructure Team 开发的一个分布式 Redis 服务, 用户可以看成是一个无限内存的 Redis 服务, 有动态扩/缩容的能力. 对偏存储型的业务更实用, 如果你需要 SUBPUB 之类的指令, Codis 是不支持的. 时刻记住 Codis 是一个分布式存储的项目. 对于海量的 key, value不太大( <= 1M ), 随着业务扩展缓存也要随之扩展的业务场景有特效.

Codis github地址:https://github.com/CodisLabs/codis

Codis FAQ:https://github.com/CodisLabs/codis/blob/master/doc/FAQ_zh.md

二、Codis架构图

实战Centos系统部署Codis集群服务

1、组件说明

Codis 由四部分组成:

Codis Proxy (codis-proxy)

Codis Dashboard (codis-config)

Codis Redis (codis-server)

ZooKeeper/Etcd

codis-proxy:是客户端连接的Redis代理服务,codis-proxy 本身实现了Redis协议,表现得和一个原生的Redis没什么区别(就像Twemproxy),对于一个业务来说,可以部署多个codis-proxy,codis-proxy本身是没状态的。

codis-config:是Codis的管理工具,支持包括,添加/删除Redis节点,添加/删除Proxy节点,发起数据迁移等操作,codis-config本身还自带了一个http server,会启动一个dashboard,用户可以直接在浏览器上观察Codis集群的状态。

codis-server:是Codis项目维护的一个Redis分支,基于2.8.13开发,加入了slot的支持和原子的数据迁移指令,Codis上层的codis-proxy和codis-config只能和这个版本的Redis交互才能正常运行。

ZooKeeper:用来存放数据路由表和codis-proxy节点的元信息,codis-config发起的命令都会通过ZooKeeper同步到各个存活的codis-proxy

注:Codis支持按照Namespace区分不同的产品,拥有不同的product name 的产品,各项配置都不会冲突。

2、实验环境
主机名 IP地址 角色
linux-node1 10.1.1.148 Zookeeper、redis_master,redis_slave
linux-node2 10.1.1.149 Zookeeper、redis_master,redis_slave
linux-node3 10.1.1.150 zookeeper,codis-proxy、redis_master,redis_slave

注:生产环境建议redis放到单独的服务器上面

3、安装配置

注:部署单个codis-proxy节点的环境,建议相关的安装包本地下载完上传到服务器上面。

#在codis-proxy(linux-node3)服务器上面操作

yum install -y git gcc make g++ gcc-c++ automake openssl-devel zlib-devel
3.1、安装GO

Go下载地址:http://www.golangtc.com/download

cd /usr/local/src/
tar zxvf go1.7.linux-amd64.tar.gz -C /opt

注意:Zookeeper已搭建完成的下面安装JDK和zookeeper的步骤可以跳过。

3.2、安装JDK

JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

rpm -ivh jdk-8u65-linux-x64.rpm
3.3、安装zookeeper

Zookeeper下载地址:http://zookeeper.apache.org/releases.html#download

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz
tar zxvf zookeeper-3.4.8.tar.gz -C /opt/
3.4、环境变量设置

修改环境变量:vim /etc/profile 在最后添加以下内容

#codis path
export GOROOT=/opt/go
export GOPATH=/opt/codis
JAVA_HOME=/usr/java/jdk1.8.0_101
CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$GOROOT/bin:$JAVA_HOME/bin:

#测试环境变量设置
实战Centos系统部署Codis集群服务

#执行source /etc/profile是环境变量生效,测试go是否正常安装:

cat hello.go
package main
import "fmt"
func main(){
fmt.Printf("hello,world\n")
}
[root@linux-node-2 ~]# go run hello.go
hello,world!
三、安装codis
[root@linux-node-3 ~]# yum -y install git
[root@linux-node-3 opt]# go get -u -d github.com/CodisLabs/codis

可以看到no buildable Go source files in /opt/codis/src/github.com/wandoulabs/codis,我们在上面环境就是设置GOAPTH=/opt/codis,所以只要执行上面的获取命令,就会下载在/opt/codis下:

实战Centos系统部署Codis集群服务

我们进到提示的路径进行安装,安装过程比较久,耐心等待:

[root@linux-node-3 ~]# cd /opt/codis/src/github.com/CodisLabs/codis

目录执行make命令编译代码,并执行make gotest来跑测试

make

实战Centos系统部署Codis集群服务

make gotest

实战Centos系统部署Codis集群服务

建议只通过go get命令来下载codis,除非你非常熟悉go语言的目录引用形式从而不会导致代码放错地方。该命令会下载master分支的最新版,我们会确保master分支的稳定。

执行全部指令后,会在 bin 文件夹内生成 codis-config、codis-proxy、codis-server三个可执行文件。另外, bin/assets 文件夹是 codis-config 的 dashboard http 服务需要的前端资源, 需要和 codis-config 放置在同一文件夹下)
实战Centos系统部署Codis集群服务

通过git方式安装codis
git clone https://github.com/CodisLabs/codis.git

git仓库下载完毕后,我们接下来进行如下的操作。如下:

mkdir -p /opt/codis /src/github.com/CodisLabs/
cp -r codis /opt/codis/src/github.com/CodisLabs/
cd /opt/codis/src/github.com/CodisLabs/codis/

#以上操作完毕后,就和通过go下载安装方式一样,执行make命令进行编译,然后执行make gotest命令进行测试

通过源码包安装
wget https://github.com/CodisLabs/codis/archive/3.0.3.tar.gz -P /usr/local/src
tar zxvf 3.0.3.tar.gz && cd codis-3.0.3 && make && make gotest
codis相关配置文件详解

#codis安装完成之后codis-config主要的使用方法

# ./bin/codis-config -h (master)
usage: codis-config [-c ] [-L ] [--log-level=]
 [...]
 options:
 -c 配置文件地址
 -L 日志输出文件地址
 --log-level= 输出日志级别 (debug < info (default) < warn < error < fatal)
commands:
server redis 服务器组管理
slot slot 管理
dashboard 启动 dashboard 服务
action 事件管理 (目前只有删除历史事件的日志)
proxy proxy 管理
# ./bin/codis-proxy -h
usage: codis-proxy [-c ] [-L ] [--log-level=] [--cpu=] [--addr=] [--http-addr=]

options:
-c 配置文件地址
-L 日志输出文件地址
--log-level= 输出日志级别 (debug < info (default) < warn < error < fatal)
--cpu= proxy占用的 cpu 核数, 默认1, 最好设置为机器的物理cpu数的一半到2/3左右
--addr= proxy 的 redis server 监听的地址, 格式 :, 如: localhost:9000, :9001
--http-addr= proxy 的调试信息启动的http server, 可以访问 http://debug_http_server_addr/debug/vars
四、配置codis集群

codis安装完毕后,我们现在来配置codis集群,在正式配置集群之前,先创建相关的目录,然后复制相关文件到新的目录下。

1、codis集群配置

使用如下命令:

cd /opt/codis/src/github.com/CodisLabs/codis/
mkdir -p /opt/codis/{log,redis_conf}
cp -rf bin/ /opt/codis/
cp config.ini /opt/codis/
cp extern/redis-test/conf/6379.conf /opt/codis/redis_conf/
cp extern/redis-test/conf/6380.conf /opt/codis/redis_conf/

实战Centos系统部署Codis集群服务

2、编辑codis配置文件
[root@linux-node3 codis]# egrep -v "^#|^$" config.ini
coordinator=zookeeper
zk=192.168.1.148:2181,192.168.1.149:2181,192.168.1.150:2181
product=test
dashboard_addr=192.168.1.150:18087
password=
backend_ping_period=5
session_max_timeout=1800
session_max_bufsize=131072
session_max_pipeline=1024
zk_session_timeout=30000
proxy_id=proxy_3

该配置文件中,我们需要注意三个参数:zk、dashboard_addr、proxy_id。

其中zk是表示zookeeper集群的服务器IP地址,dashboard_addr表示codis web管理的IP地址及端口,proxy_id表示codis的id,注意每台codis服务器该值要唯一。

#linux-node1

实战Centos系统部署Codis集群服务

#linux-node2

实战Centos系统部署Codis集群服务

#linux-node3

实战Centos系统部署Codis集群服务

3、编辑redis配置文件

每台codis服务器上,启动两个redis实例(也可以启动多个redis实例),配置两个redis,如下:

daemonize no
pidfile /var/run/redis.pid
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile /var/log/redis/6379.log
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump6379.rdb
dir /opt/codis/
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

#注意红线标注的一个参数,配置第二个redis实例

\cp /opt/codis/redis_conf/6379.conf 6380.conf
sed -i 's/6379/6380/g' /opt/codis/redis_conf/6380.conf
mkdir -p /var/log/redis/

#上面操作需要在每台codis服务上面都执行。

echo 512 > /proc/sys/net/core/somaxconn
sysctl vm.overcommit_memory=1

注:优化系统的参数

4、 初始化 slots

执行 bin/codis-config slot init,该命令会在zookeeper上创建slot相关信息

/opt/codis/bin/codis-config -c /opt/codis/config.ini slot init

#linux-node3、linux-node1、linux-node2

/opt/codis/bin/codis-server /opt/codis/redis_conf/6379.conf &
/opt/codis/bin/codis-server /opt/codis/redis_conf/6380.conf &
ps -ef | grep codis-server

实战Centos系统部署Codis集群服务

#在三台codis-proxy上面分别启动redis实例

5、启动codis dashboard

#尽量在redis安装目录或者让redi的log目录下启动dashboard,这样方便查看启动产生的日志,nohup.out

nohup /opt/codis/bin/codis-config -c /opt/codis/config.ini dashboard &

实战Centos系统部署Codis集群服务

#从图中可以看出dashboard已经启动完成,然后去web页面访问,codis dashboard访问端口是18087

#查看codis dashboard,浏览器访问http://192.168.1.150:18087/,如下:
实战Centos系统部署Codis集群服务

#codis dashboard启动完成之后默认页面如上图所示,我们可以通过web页面新建redis_group,把刚刚启动好的redis实例加到不同的组当中、也可以通过命令行执行创建redis_group的操作。

6、添加 Redis Server Group

# 每一个 Server Group 作为一个Redis服务器组存在, 只允许有一个master, 可以有多个slave, group id仅支持大于等于1的整数

#在codis dashboard上使用命令新建server group

[root@linux-node3 ~]# cd /opt/codis/
[root@linux-node3 codis]# ./bin/codis-config server -h
usage:
codis-config server list
codis-config server add
codis-config server remove
codis-config server promote
codis-config server add-group
codis-config server remove-group

#如: 添加三个 server group, 每个 group 有两个 redis 实例,group的id分别为1和2, redis实例为一主一从。

#注:这里我把linux-node3,linux-node2,linux-node1上面的两个redis实例分别加到不同的server group当中,详细如下:

group_1: linux-node3 redis_6379 linux-node2 redis_6380
group_2: linux-node2 redis_6379 linux-node1 redis_6380
group_3: linux-node1 redis_5379 linux-node3 redis_6380

其中redis的6379端口作为redis master,6380作为slave

#添加一个group,group的id为1, 并添加一个redis master(192.168.1.150:6379)到该group

./bin/codis-config server add 1 192.168.1.150:6379 master

#添加一个redis slave(192.168.1.149:6380)到该group

./bin/codis-config server add 1 192.168.1.149:6380 slave

实战Centos系统部署Codis集群服务

#添加一个group,group的id为2, 并添加一个redis master(192.168.1.149:6379)到该group

./bin/codis-config server add 2 192.168.1.149:6379 master

#添加一个redis slave(192.168.1.148:6380)到该group

./bin/codis-config server add 2 192.168.1.148:6380 slave

#添加一个group,group的id为3, 并添加一个redis master(192.168.1.148:6379)到该group

./bin/codis-config server add 3 192.168.1.148:6379 master

#添加一个redis slave(192.168.1.150:6380)到该group

./bin/codis-config server add 3 192.168.1.150:6380 slave

实战Centos系统部署Codis集群服务
实战Centos系统部署Codis集群服务

注意:每组添加的第一个redis实例不能被删除,因为codis默认把该redis实例设置为master。

#从图中我们可以看出server group 已经创建成功,到codis dashboard上面查看:
实战Centos系统部署Codis集群服务

7、设置 server group 服务的 slot 范围,
https://github.com/CodisLabs/codis/blob/master/doc/FAQ_zh.md

Codis 采用 Pre-sharding 的技术来实现数据的分片, 默认分成 1024 个 slots (0-1023), 对于每个key来说, 通过以下公式确定所属的 Slot Id : SlotId = crc32(key) % 1024 每一个 slot 都会有一个且必须有一个特定的 server group id 来表示这个 slot 的数据由哪个 server group 来提供.

[root@linux-node3 codis]# ./bin/codis-config slot -h
usage:
codis-config slot init [-f]
codis-config slot info
codis-config slot set
codis-config slot range-set
codis-config slot migrate [--delay=]
codis-config slot rebalance [--delay=]

#设置编号为[0, 340]的 slot 由 server group 1 提供服务, 编号 [341, 682] 的 slot 由 server group 2 提供服务,编号[683, 1023] 的 slot 由 server group 3 提供服务

./bin/codis-config slot range-set 0 340 1 online
./bin/codis-config slot range-set 341 682 2 online
./bin/codis-config slot range-set 683 1023 3 online

实战Centos系统部署Codis集群服务

#查看slot的信息
/opt/codis/bin/codis-config -c /opt/codis/config.ini slot info 1
/opt/codis/bin/codis-config -c /opt/codis/config.ini slot info 2
/opt/codis/bin/codis-config -c /opt/codis/config.ini slot info 3

#slot操作完成可以到codis dashboard查看状态。如下:

实战Centos系统部署Codis集群服务

8、启动 codis-proxy
./bin/codis-proxy -c config.ini -L ./log/proxy.log --cpu=1 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000

实战Centos系统部署Codis集群服务

nohup /opt/codis/bin/codis-proxy -c /opt/codis/config.ini --log-level=error -L /opt/codis/log/proxy.log --cpu=1 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000 &

#下面对以上命令中的参数进行解释:

-c 配置文件地址。
-L 日志输出文件地址。
–log-level= 输出日志级别(debug –cpu= proxy占用的cpu核数,默认1,最好设置为机器的物理cpu数的一半到2/3左右。
–addr= proxy的redis server监听的地址, 格式:, 如: localhost:9000, :9001。
–http-addr= proxy的调试信息启动的http server,可以访问 http://debug_http_server_addr/debug/vars。

实战Centos系统部署Codis集群服务

#codis-proxy启动后,我们可以在dashboard上进行查看,如下:

实战Centos系统部署Codis集群服务

#到此codis集群搭建完毕,为了性能需求,建议redis实例和codis-proxy放到不同的服务器上面。

9、连接codis集群

codis集群搭建完毕后,测试连接codis集群。要连接codis集群,我们只需要连接codis-proxy即可。codis-proxy服务器地址:192.168.1.150,然后加19000端口。使用redis-cli命令连接,如下:

#在某台已安装redis实例的服务器上面测试:
实战Centos系统部署Codis集群服务

通过上图,我们可以很明显的看到连接codis集群是ok的。

10、codis集群压测

我们现在对codis集群做一些压力测试,同时在dashboard上观察键值对的情况。如下:

./redis-benchmark -h 192.168.1.150 -p 19000 -c 1000 -d 1000 -t set -n 100000 -r 100000

上述命令的意思是,使用redis-benchmark压力测试命令连接codis集群,同时并发10000个(-c),测试set操作(-t),每个测试数据集是100字节(-d),请求数是100000(-n),使用使用随机数插入数值(-r)

11、数据迁移

安全和透明的数据迁移是 Codis 提供的一个重要的功能, 也是 Codis 区别于 Twemproxy 等静态的分布式 Redis 解决方案的地方
数据迁移的最小单位是 key, 我们在 codis redis 中添加了一些指令, 实现基于key的迁移, 如 SLOTSMGRT等 (命令列表), 每次会将特定 slot 一个随机的 key 发送给另外一个 codis redis 实例, 这个命令会确认对方已经接收, 同时删除本地的这个 k-v 键值, 返回这个 slot 的剩余 key 的数量, 整个操作是原子的.

在 codis-config 管理工具中, 每次迁移任务的最小单位是 slot
如: 将slot id 为 [0-340] 的slot的数据, 迁移到 server group 2上, --delay 参数表示每迁移一个 key 后 sleep 的毫秒数, 默认是 0, 用于限速.

#codis dashboard上面查看每个组中的数据状态,
实战Centos系统部署Codis集群服务

#可以看出刚刚我们做过压测之后,每个redis组处理的key基本一致,然后我们把group_1中slot上的数据迁移到group_2上,--delay 参数表示每迁移一个 key 后 sleep 的毫秒数, 默认是 0, 用于限速.

$ bin/codis-config slot migrate 0 511 2 --delay=10

实战Centos系统部署Codis集群服务

/opt/codis/bin/codis-config -c /opt/codis/config.ini slot migrate 0 340 2 --delay=10

#查看codis dashboard上,group状态:
实战Centos系统部署Codis集群服务

#再次刷新,3s后
实战Centos系统部署Codis集群服务

#对比group中两次的key变化,我们可以看出group_1中的slot数据正在向group_2迁移。

迁移的过程对于上层业务来说是安全且透明的, 数据不会丢失, 上层不会中止服务.

注意, 迁移的过程中打断是可以的, 但是如果中断了一个正在迁移某个slot的任务, 下次需要先迁移掉正处于迁移状态的 slot, 否则无法继续 (即迁移程序会检查同一时刻只能有一个 slot 处于迁移状态).

Auto Rebalance

Codis 支持动态的根据实例内存, 自动对slot进行迁移, 以均衡数据分布.

$ bin/codis-config slot rebalance

要求:

所有的codis-server都必须设置了maxmemory参数
所有的 slots 都应该处于 online 状态, 即没有迁移任务正在执行
所有 server group 都必须有 Master
五、Codis集群架构模拟故障测试

Server group实现主从切换,当同一个组中的某一台redis实例停止的时候,组中的其它redis实例自动切换为master角色,提供服务。

需要安装codis-ha插件,codis-ha可以安装在任意节点即可,只需要在一个节点上面安装。(本实验安装在linux-node2上)

go get github.com/ngaut/codis-ha
[root@linux-node2 ~]# cd /opt/codis/src/github.com/ngaut/
[root@linux-node2 ngaut]# cp -r codis-ha /opt/
[root@linux-node2 ngaut]# cd /opt/codis-ha/
[root@linux-node2 codis-ha]# go build
1、启动codis-ha服务
nohup $codis_ha_home/codis-ha -codis-config=192.168.1.150:18087 -log-level=info -productName=test &> /opt/codis-ha/codis-ha.log

注:-codis-config后跟dashboard所在服务器ip

重新启动codis-proxy服务

注:(以150机器配置为例,其余codis-proxy只需要修改下名称即可)

先停掉codis-proxy

[root@linux-node3 ~]# /opt/codis/bin/codis-config -c /opt/codis/config.ini proxy offline codis_proxy_3

#不同的机器只需要更改codis_proxy即可(本实验之重启了一台codis-proxy,且codis-ha服务已生效)

重新启动codis-proxy

nohup /opt/codis/bin/codis-proxy -c /opt/codis/config.ini --log-level=error -L /opt/codis/log/proxy.log --cpu=1 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000 &

设置codis-proxy状态为online

[root@linux-node3 ~]# /opt/codis/bin/codis-config -c /opt/codis/config.ini proxy online codis_proxy_3

注:如果重启一台codis-proxy之后codis-ha服务没生效,需要重启三台codis-proxy

停止任意节点的zookeeper,检查codis-proxy,dashboard是否正常>

以zookeeper状态为leader那台服务器测试(linux-node2)

查看zookeeper状态确认是否为leader

[root@linux-node2 ~]# /opt/zookeeper/bin/zkServer.sh status

停止linux-node2上面的zookeeper节点,让其他zookeeper节点自动选择leader节点并提供服务

[root@linux-node2 ~]# /opt/zookeeper/bin/zkServer.sh stop

实战Centos系统部署Codis集群服务

#随机检测其他节点的zookeeper状态,检测到linux-node2的zookeeper节点已经被选为leader,开始提供服务

实战Centos系统部署Codis集群服务

#重启刷新codis dashboard可以看到dashboard是正常的。

检测redis客户端是否能正常访问codis-proxy

以linux-node3为例:

[root@linux-node3 ~]# cd /opt/codis/src/github.com/CodisLabs/codis/extern/redis-2.8.21/src/

#新建scripts目录,存放redis常用命令

[root@linux-node3 src]# mkdir -p /opt/codis/scripts/
[root@linux-node3 src]# cp redis-cli redis-server redis-benchmark redis-check-dump /opt/codis/scripts/

实战Centos系统部署Codis集群服务

从上面可以看出我之前set的两个key都能正常get到

停止任意group中的redis master实例,检查redis slave是否自动切换为master模拟linux-node1(192.168.1.148)上面的redis-master 6379端口挂掉
实战Centos系统部署Codis集群服务

登录到codis-ha所在的节点(linux-node2)查看codis-ha日志,打印如下
实战Centos系统部署Codis集群服务

打开dashboard界面,可以看到如下:
实战Centos系统部署Codis集群服务

从图中可以看到group_3的salve节点已经自动切换到master状态

客户端写入数据,检查切换后的redis master实例是否有新key增加

#linux-nod3新增key
实战Centos系统部署Codis集群服务

重新刷新dashboard界面,查看key变化
实战Centos系统部署Codis集群服务

#恢复linux-node1上的redis实例的6379端口

[root@linux-node1 ~]# /opt/codis/bin/codis-server /opt/codis/redis_conf/6379.conf &
[root@linux-node1 ~]# ps -ef | grep -v grep | grep codis-server
root     16620 13759  0 Aug27 pts/0    00:04:52 /opt/codis/bin/codis-server *:6380
root     27574 13759  2 19:40 pts/0    00:00:00 /opt/codis/bin/codis-server *:6379

刷新dashboard界面查看group中redis实例状态变化
实战Centos系统部署Codis集群服务

可以看到linux-node1上面的端口为6379的redis实例已经启动并自动成为group_3中的slave

备注:假如当maste挂掉是,redis-ha检测自动将slave切换为master,但是master恢复后,如果状态仍为offline,可以把这个redis节点从group中移出,再重新添加。

2、报错解决:
/opt /bin/zkCli.sh
delete /zk/codis/db_test/dashboard

#重启codis dashboard

nohup /usr/local/codis/bin/codis-config -c /usr/local/codis/config.ini dashbo
ard &

十款优秀Vim插件帮你打造完美IDE

阅读(247)评论(0)

如果你稍微写过一点代码,就能知道“集成开发环境”(IDE)是多么的便利。不管是Java、C还是Python,当IDE会帮你检查语法、后台编译,或者自动导入你需要的库时,写代码就变得容易许多。另外,如果你工作在Linux上,你也会知道Vim在进行文本编辑的时候是多么的方便。所以,你可能会想从Vim中也获取这些IDE特性。

十款优秀Vim插件帮你打造完美IDE

事实上,很少有方法可以帮你做到。有些人可能会想到试着把Vim打造成C语言IDE的,比如c.vim;也有把Vim集成到Eclipse里的 Eclim 。但是我想要告诉你的是一个更加通用的,只用插件实现的方案。你肯定不想因为安装了太多的面板和特性而让你的编辑器变得臃肿不堪。只用插件实现的方案可以 让你只选择那些你想要集成到Vim的特性。这样做的额外的一个好处是,这个IDE不是专门针对某一种语言的,可以让你写任何类型的代码。下面就来看一下我 的 把IDE特性带进Vim的前10款插件 吧。

先来个福利: Pathogen

首先,可能不是所有人都熟悉Vim的插件,并知道该怎么安装这些插件。所以,我推荐的第一个插件就是Pathogen,因为这个插件会让你更容易安装其他插件。如果你要安装另外的没有在这里列出来的插件,用Pathogen会变得非常简单。它的官方页面的文档写的非常好,去下载安装一个吧。接下来插件的安装也会变得容易很多。

1. SuperTab

我们习惯于IDE的第一个原因就是它的自动补全功能。所以,我喜欢这个非常方便的,给了Tab键“超能力”的 SuperTab 插件。

十款优秀Vim插件帮你打造完美IDE

2. Syntastic

十款优秀Vim插件帮你打造完美IDE

如果你需要使用一种以上的语言进行编程,有时候是非常容易混淆不同语言之间的语法的。幸运的是,syntastic 会帮你检查,然后告诉你是否应该加上圆括号或者方括号,或者告诉你在某个地方,你忘了一个分号。

3. Auto Pairs

另外一件让程序员们抓狂的事是:我是不是少加了最后一个括号?!每个人都讨厌用手指去数那些隔的非常远的括号。为了处理这个问题,我用 Auto Pairs 插件,这个插件会自动插入和格式化方括号和圆括号。

4. NERD Commenter

如果你在找一个可以支持多种程序语言的注释代码的快捷键,你可以试试 NERD Commenter。即使你不是程序员,我也非常非常推荐这款插件,因为它会让你在注释bash脚本或者其他任何东西的时候都会变得非常高效。

5. Snipmate

任何一个程序员都知道,好的码农写代码,杰出的码神重用代码。snipmate可以容易的插入代码片段到你的文件里面,大大的减少了你敲键盘的次数。它默认的包含了很多各种语言的代码片段,你也可以非常容易的添加你自己的。

6. NERDTree

十款优秀Vim插件帮你打造完美IDE

管理一个大的项目时,把代码分散到不同的文件里面是非常好的主意。也是一个基本的编码原则。NERDTree 是一个不错的可以直接在Vim里使用的文件浏览器,它可以让你随时想到所有的文件。

7. MiniBufferExplorer

十款优秀Vim插件帮你打造完美IDE

为了打造一个文件浏览器,支持同时打开多个文件,没有什么比一个好的缓冲区管理器更重要了。MiniBufferExplorer 就可以非常漂亮和高效地完成这个工作。它甚至为你的缓冲区设置了不同的颜色和切换快捷键。

8. Tag List

十款优秀Vim插件帮你打造完美IDE

当你同时有多个文件打开时,很容易忘了你都在这些文件里添加了什么。为了防止你忘记,Tag List 这个代码查看器将会用一种漂亮简洁的格式展示其中的的变量和函数。

9. undotree

十款优秀Vim插件帮你打造完美IDE

对于我们之中那些喜欢undo,redo然后又undo某些更改,然后依据这些来查看整个编辑完成过程的人来说, undotree 是一个不错插件,可以以一棵树的形式看到你的undo和redo历史。这个功能跟代码完全没有关系,所以这是我非常喜欢的一个插件。

10. gdbmgr

最后,但并非不重要,每个人都在某个时刻需要一个调试器。如果你喜欢gdb,那么gbdmgr就是为你准备的,因为它集成了那个著名的调试器到Vim中。

总结一下,不管你是不是一个疯狂的coder,能有一些额外的Vim功能在手总是非常方便的。像我在简介里说到的,如果你不需要,你不用安装这里所有的这些插件。或者你想要安装另外的也行,这些其实只是一个基础入门级的插件。

Linux中这些杀毒软件你听说过吗?

阅读(286)评论(0)

你的想法是对的!但是,Linux 为全球超过 70%的 Web 服务器提供支持。黑客极有动机来制造强大的病毒来渗透这些服务器安全系统。尽管它不像 Windows 那样简单,但是考虑到 Linux 的默认安全设置,这也不是没有可能。

脚本的意外执行会感染您的系统,这正是自动化防病毒系统可以提供帮助的地方。它可以始终监视您的系统活动,并在可能引起问题之前阻止任何恶意活动!

现在,让我们来看看有哪些适用于 Linux 的最佳防病毒系统!

01

Avast Antivirus

Linux中这些杀毒软件你听说过吗?

这是全球知名的防病毒软件之一!它目前可用于企业,并且是一款付费软件。

Avast 是整个列表中最好的病毒库之一,如果您打算购买防病毒软件来保护服务器安全,那将是一项不错的投资。

您只需从他们的官方网站下载该软件包并运行它,即可在系统上安装 Avast。

02

Chkrootkit

Linux中这些杀毒软件你听说过吗?

Chkrootkit 工具由 Pangea Informatica 开发,是一种轻量级的便携式防病毒程序。

它允许在 Linux 系统上检测 rootkit,同时易于使用和快速,需要时可以从命令行轻松运行它。Chkrootkit 还提供了一次管理和解决多个错误的功能。

03

ESET NOD32 Antivirus 4

Linux中这些杀毒软件你听说过吗?

通常,已经有一些测试将 ESET NOD32 Antivirus 4 作为 Linux 或 Ubuntu 用户的最佳防病毒选择。但是,这是该软件的付费版本,它提供了诸如深层恶意软件和间谍软件检测以及网络安全之类的功能。

ESET NOD 32 Antivirus 4 通过自动更新为用户提供家庭和行业级别的保护。如果性能值得,您可以使用免费的限时试用版来自己评估。

04

F-PROT

Linux中这些杀毒软件你听说过吗?

Linux 上的 F-PROT 提供可同时满足行业和家庭需求的服务,借助对 32 位和 64 位体系结构的支持,它可以保护用户免受超过 2100 万种威胁及其变种的威胁。

它由 FRISK Software International 开发,是免费且可移植的。它允许扫描内部驱动器和驱动程序,也可以扫描木马,宏病毒和引导扇区病毒。

05

Panda Cloud Cleaner

Linux中这些杀毒软件你听说过吗?

Linux 用户讨厌系统上不必要的软件占用资源,例如在后台 24×7 运行的防病毒软件就是这样一种程序。

为此,您可以考虑Panda Cloud Cleaner,该软件可以按使用进行下载,然后从系统中删除。下载软件包后,只需通过chmod 命令授予文件执行权限,然后运行文件即可。

06

Rootkit Hunter

Linux中这些杀毒软件你听说过吗?

Rootkit Hunter 由 Michael Boelen 最初开发的一种防病毒工具,可通过命令行使用,并利用程序的后门和本地漏洞来检测和消除病毒和木马软件。

它提供 Rootkit 检测,效率快速且易于使用。它提供了对 SHA-1 的支持,以比较和检测恶意软件。此外,Rootkit Hunter 还提供了极大的可移植性。

07

ClamAV

Linux中这些杀毒软件你听说过吗?

ClamAV 由 Cisco Systems 开发,是一个免费的开源防病毒程序,几乎可以在每个 Linux 发行版的存储库中使用。初学者更喜欢 ClamTK,而 ClamAV 借助其命令行界面为高级用户提供更好的控制。

它允许扫描单个文件,目录和驱动器,并且提供了由防病毒软件提供的最好的恶意软件检测之一。

08

Firetools

Linux中这些杀毒软件你听说过吗?

尽管大多数防病毒软件都可以轻松检测并处理病毒和恶意软件,但是您如何处理恶意 Web 脚本?答案是 Firetools。Firetools 由 Firejail 安全沙箱背后的人才开发,是针对 Linux 用户的沙箱 GUI 工具。

它允许用户在隔离的环境中运行脚本和软件,以验证其是否安全而不损害任何其他数据。Firetools 是开源的,与其他防病毒扫描程序一起使用时,可使您的计算机比以往任何时候都更加安全。

09

Comodo

Linux中这些杀毒软件你听说过吗?

由 Comodo Cybersecurity 开发的 Comodo 防病毒软件是免费的,易于使用和设置的,并提供实时保护。

Comodo 为用户提供了跨平台支持,并且适用于 32 位和 64 位体系结构。它具有按需扫描和反垃圾邮件、反恶意软件工具、内存防火墙等多种功能。

10

Sophos

Linux中这些杀毒软件你听说过吗?

Sophos 防病毒软件由 Sophos 小组开发,被广泛认为是 Linux 用户可用的最佳免费防病毒程序。

它为用户提供按需扫描和实时扫描选项。虽然它是基于 Linux 的防病毒软件,但它也可以有效地检测和删除其他操作系统的病毒,是满足防病毒需求的最佳轻量级解决方案。

如何在 Windows 11 中为 Linux 安装 Windows 子系统

阅读(583)评论(0)

微软首先通过 2016 年在 Windows 10 周年更新中引入的 Windows Subsystem for Linux (WSL) 提供了一定程度的 Linux 兼容性,该实用程序的初始版本并不完美。 WSL 2 在 2019 年 6 月改变了这一点,通过操作系统的内置 Hyper-V 管理程序将完整的 Linux 内核直接整合到 Windows 10 中。

安装 WSL 曾经是一个复杂的过程,需要手动启用各种服务、下载实用程序并在没有 Windows 太多帮助的情况下进行安装。 然而,随着 Windows 10 的更高版本,这种情况发生了变化,并且 Windows 11 继续使在轻量级虚拟机环境中开始使用各种 Linux 发行版变得容易。 以下是在 Windows 10 和 Windows 11 中开始使用适用于 Linux 的 Windows 子系统的方法。

如何在 Windows 11 中安装适用于 Linux 的 Windows 子系统

1. 以系统管理员身份启动 PowerShell 或命令提示符。 通过从“开始”菜单搜索“PowerShell”或“命令提示符”最容易实现。 无论您选择哪个选项,都不要只是按“Enter”启动命令行,因为 Windows 不会让您以普通用户身份安装 WSL。 相反,您应该从搜索结果中单击“以管理员身份运行”。

2. 输入以下命令:

1
wsl --install

假设您以管理员身份启动了 PowerShell(如我们的示例中所示)或命令提示符,该命令应自动启用 WSL 所依赖的服务、下载实用程序并安装它运行所需的一切,而无需任何进一步输入。 默认情况下,它还下载并安装 Ubuntu,这是一种流行的 Linux 发行版,可以在从单板计算机到企业级服务器的所有设备中找到。

3. 重新启动您的计算机。 应该会出现一条通知,告诉您 WSL 已安装并且可以在您重新启动计算机后使用。 您不必立即重新启动系统,但如果您不这样做,WSL 会提醒您下次尝试使用该实用程序执行任何操作时需要重新启动系统。 所以方便时尽快重启。

WSL 将在您重新启动后自行安装。

4. 在 WSL 提示时输入用户名和密码。 这些将仅是您的 WSL 凭据。

如果您被告知“请求的操作需要提升”,该怎么办

如果您输入“wsl –install”并看到错误消息,那是因为您没有以管理员身份运行 PowerShell 或命令提示符,如果您想安装 WSL,则需要这样做。 有关如何以管理员身份运行应用程序的说明,请参阅第一步。

如何在 Windows 11 中安装不同的 Linux 发行版

Ubuntu 是与适用于 Linux 的 Windows 子系统一起安装的默认 Linux 发行版,但它并不是与 Microsoft 功能兼容的唯一 Linux“风格”。 有两种方法可以安装具有自己默认用户界面、预安装实用程序和其他功能的替代 Linux 发行版:通过命令行和通过 Microsoft Store。

选项 1:命令行

命令行(即命令提示符或 PowerShell)是安装当今一些较流行的 Linux 发行版的最便捷方式。 Microsoft 不允许以这种方式安装每个发行版,可能是因为公司无法提供内置支持的发行版太多,但有几种流行的发行版可用。

1. 输入以下命令:

1
wsl --list --online

命令的“wsl”部分表示我们使用的是适用于 Linux 的 Windows 子系统,“list”是支持的 Linux 发行版列表,“online”说明符表示 Microsoft 提供的发行版,而不是我们已有的发行版 在我们的计算机上运行。 此命令应返回可通过命令行安装的发行版列表。

2. 输入以下命令安装新发行版:

1
wsl --install -<Distro>

此命令告诉适用于 Linux 的 Windows 子系统安装通过上一个命令列出的发行版之一。 在撰写本文时,这包括从 Debian(一个以稳定性引以为豪的发行版并提供构建 Ubuntu 等发行版的基础)到黑客最喜欢的 Offensive Security 的 Kali Linux 的所有内容。

选项 2:微软商店

任何对命令行不太熟悉的人仍然可以通过 Microsoft Store 安装 Linux 发行版。 这比命令行需要更多的摆弄,主要是因为它涉及图形用户界面而不是基于文本的系统,但对于以前通过中央分发平台安装软件的任何人来说,这应该是一个熟悉的过程。

1. 打开微软商店。 在新安装的 Windows 11 上,该应用程序会自动固定到“开始”菜单和任务栏,但如果您已将其从这些默认位置删除,则可以通过从“开始”菜单搜索“商店”轻松启动。

2. 搜索“Linux”。 在撰写本文时,Linux 发行版在 Microsoft Store 中没有专门的部分,但搜索“Linux”将通过此点击式界面显示可用的发行版。 例如,有多个版本的 Ubuntu 可供下载,以及诸如 openSUSE Leap 之类的发行版。

3. 单击您感兴趣的发行版,然后单击“安装”。 只要您已经创建了 Microsoft 帐户,Microsoft Store 就应该处理剩下的过程。 完成后,您将拥有一个可通过适用于 Linux 的 Windows 子系统访问的新发行版,并且还有机会开始学习如何使用命令行。

如何在 Windows 11 中使用基于 GUI 的 Linux 软件

WSL 最初提供对 Linux 命令行界面的访问,这对于有经验的用户来说可能没问题,但不太可能使新用户更容易访问操作系统。 (并不是说让人们相信他们使用免费和开源的操作系统而不是 Windows 更好,这不一定符合 Microsoft 的最大利益。)这种情况已经改变,现在可以在 Windows 中使用 Linux 图形用户界面 (GUI) 应用程序 .

1. 使用以下命令更新 WSL:

1
wsl --update

这将更新适用于 Linux 的 Windows 子系统,以便您可以通过该实用程序使用 GUI 应用程序。 请注意,Microsoft 仅通过 WSL 2 提供此功能; 该实用程序的第一次迭代仍然仅限于与 Windows 本身明显分开的非基于图形的界面。

2.通过键入重新启动 WSL

1
wsl --shutdown

3. 为您的 GPU 安装适当的驱动程序。 Microsoft 链接到为 Intel、AMD 和 Nvidia GPU 安装 WSL 的 GPU 驱动程序的说明。 按照这些说明操作,确保您的独立显卡(或 CPU 中内置的集成 GPU)针对运行基于图形的 Linux 软件以及 Windows 本身进行了优化。

4. 安装您要使用的软件。 Linux 发行版提供了各种包管理器,可用于通过命令行安装软件;有些还提供类似于 Microsoft Store 的中央分发平台,可以在其中找到 Linux 应用程序。您选择哪种安装方法并不重要,但您必须安装一些东西。否则,您将受限于发行版内置的任何内容。

5. 启动应用程序,然后像任何其他 Windows 应用程序一样与其交互。 Microsoft 设计了 WSL 2 对 GUI 应用程序的支持,以类似于基本的 Windows 体验。一旦软件启动(通常通过在终端仿真器中输入特定于程序的命令),它就可以与使用屏幕控件进行交互、固定到开始菜单、添加到任务栏,或者像典型的 Windows 程序一样对待。

这些是使用适用于 Linux 的 Windows 子系统所需的第一步。习惯以命令行为中心的工具和 Linux 的特性可能需要一段时间,但此功能使协调使用基于 Linux 和 Windows 的软件比以往任何时候都更容易。

 

 

Linux 系统是运行在虚拟机上还是物理机上

阅读(408)评论(0)

除了本机开发以外,我们平时使用 Linux 大部分是通过 ssh 连接到远程服务器上的,比如系统部署、运维等工作。

Linux 系统是运行在虚拟机上还是物理机上

在当前虚拟化非常成熟的环境下,我们所部署的大部分系统都是运行在虚拟机中的。但是也有部分是在物理机上。那么,怎样区分我们的系统是运行在虚拟机上,还是物理机上呢?

下面我们来详细讨论下这个问题。

有几个命令可以用来区分系统运行环境是在虚拟机还是物理机。

1,使用 dmidecode 命令

区分虚拟机和物理机,最简单的方法是使用 dmidecode 命令。如下所示:

sudo dmidecode -s system-manufacturer

如果是物理机,你会看到机器制造商的名称,比如 Dell,Lenovo 等;

如果是虚拟机,你会看到一些类似于 QEMU, innotek Gmbh(for VirtualBox)等的输出信息。

dmidecode 命令用于查看计算机的 DMI 信息,该信息以人类可读的方式输出。

DMI 是桌面管理界面(Desktop Management Interface)的缩写,是几乎所有系统制造商都遵守的标准。DMI 框架用于管理和跟踪桌面、笔记本电脑或服务器计算机中的组件。

由于有了 DMI,我们可以获得有关系统硬件、系统制造商和设备序列号的信息,而使用 dmidecode(DMI Decode)命令,可以获取这些信息。另外,使用 -s system-manufacturer 也可获取制造商的详细信息。

如果系统环境是物理机,那么可以看到制造商的信息,比如:

$ sudo dmidecode -s system-manufacturer
Dell Inc.

相反,如果是虚拟机,可以将虚拟机的信息打印出来,如下所示:

$ dmidecode -s system-manufacturer
QEMU

这个命令用起来比较便捷。关于 dmidecode 命令的详细信息,大家也可以查看 man 手册。

如果想要查看 Linux 版本的信息,可以使用 uname 命令。因为 dmidecode 命令查看的是硬件信息,对于软件信息来说不适用。

2,使用 virt-what

区分虚拟机和物理机的另外一个方法是使用 virt-what

基本上,可以将其理解为是一个 shell 脚本,可以作为命令安装在大多数 Linux 发行版中。安装命令如下:

sudo apt install virt-what

如果系统运行在一个物理机上,virt-what 命令将不会返回任何结果;相反,如果是运行在虚拟机上,将会输出虚拟机的一些信息,如下所示:

$ virt-what 
kvm

以上就是本次分享全部内容,欢迎讨论。

如何在 Linux 中更新 Flatpak 软件包

阅读(301)评论(0)

但这种更新通常是针对默认的 ​​包管理器​​​。例如,​​更新 Ubuntu​​ 往往意味着更新所有的 APT 软件包。然而,还有其他的打包格式,如 Snap 和 Flatpak。Snap 应用程序会自动更新,但 Flatpak 不会。

那么你如何更新 Flatpak 软件包呢?好吧,你可以用这个命令来更新所有已安装和可更新的 Flatpak 包:

flatpak update

这很简单。但让我再讨论一下关于更新 Flatpak 的一些事情,比如说:

  • 更新所有或特定的 Flatpak 包
  • 通过软件中心更新 Flatpak 包

让我们先从终端的方法开始。

方法 1:使用终端来更新 Flatpak 包

首先让我从最实用的方法开始,你也应该从这个方法开始。

更新每一个过时的 Flatpak 包

更新现有的 Flatpak 包的整个目录是很容易的。

输入给定的命令,就可以得到过期包的列表:

flatpak update

如何在 Linux 中更新 Flatpak 软件包

update flatpak packages in linux

你只需输入 ​​Y​​ 并按下回车键,就能搞定每一个更新。

更新特定的 Flatpak 包

要更新特定的软件包,你需要可以更新的软件包的列表。你用的是你之前看到的那个命令。

flatpak update

如何在 Linux 中更新 Flatpak 软件包

从输出中复制你要更新的软件包的名称。在以下命令中使用软件包的名称:

flatpak update package_name

例如,如果你想更新 Telegram,下面的命令可以完成这项工作:

flatpak update org.telegram.desktop

如何在 Linux 中更新 Flatpak 软件包

update specific package in flatpak

这就完成了。

方法 2:从软件中心更新 Flatpak 应用

有 Flatpak 内置支持的发行版会在软件中心提供 Flatpak 应用的更新。Fedora 和 Linux Mint 就是这样的发行版。

但如果你使用的是 Ubuntu,你就需要在 GNOME 软件中心添加 Flatpak 支持:

sudo apt install gnome-software-plugin-flatpak

完成后,你将在 Ubuntu 中拥有两个软件中心。这是因为默认的软件中心不是 GNOME 的,而是 Snap Store。

从系统菜单中打开这个新的软件中心:

如何在 Linux 中更新 Flatpak 软件包

open software center in ubuntu

进入“更新Update”页面,你会发现过时的软件包列表。这包括 APT 和 Flatpak 软件包。

如何在 Linux 中更新 Flatpak 软件包

update flatpak from software center

在这里,你可以一次更新所有的软件包,或者你可以有选择地更新什么。

总结

许多 Linux 桌面用户往往忘记更新 Flatpak 软件包,因为它们不包括在定期的系统更新中。

由于 Flatpak 是一个沙盒式的打包解决方案,你可能不会面临任何与过时的软件包有关的问题,但你肯定会错过新的功能和修复。

这就是为什么我建议每隔几周运行一次 Flatpak 更新命令。

我希望你喜欢这个快速的 Flatpak 小技巧。

登录

忘记密码 ?