分类 Ubuntu 下的文章

“Ubuntu是以桌面应用为主的Linux发行版,基于Debian。Ubuntu有三个正式版本,包括桌面版、服务器版及用于物联网设备和机器人的Core版。从17.10版本开始,Ubuntu以GNOME为默认桌面环境。 Ubuntu是著名的Linux发行版之一,也是目前最多用户的Linux版本。 ”

sudo nmcli radio wifi off

也可以简化为

sudo nmcli r wifi off

查看wifi的开关状态

nmcli r wifi 

enabled

查看命令用法

nmcli r help

用法:nmcli radio { 命令 | help }

命令 := { all | wifi | wwan }

all | wifi | wwan [ on | off ]

查看nmcli 用法

nmcli help

Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
-a, --ask ask for missing parameters
-c, --colors auto|yes|no whether to use colors in output
-e, --escape yes|no escape columns separators in values
-f, --fields <field,...>|all|common specify fields to output
-g, --get-values <field,...>|all|common shortcut for -m tabular -t -f
-h, --help print this help
-m, --mode tabular|multiline output mode
-o, --overview overview mode
-p, --pretty pretty output
-s, --show-secrets allow displaying passwords
-t, --terse terse output
-v, --version show program version
-w, --wait <seconds> set timeout waiting for finishing operations

OBJECT
g[eneral] NetworkManager's general status and operations
n[etworking] overall networking control
r[adio] NetworkManager radio switches
c[onnection] NetworkManager's connections
d[evice] devices managed by NetworkManager
a[gent] NetworkManager secret agent or polkit agent
m[onitor] monitor NetworkManager changes

要关闭所有网络

nmcli n help

用法:nmcli networking { 命令 | help }

命令 := { [ on | off | connectivity ] }

on

off

connectivity [check]

完全启用/禁用网络

nmcli networking off

仅用于WiFi

nmcli radio wifi off

在两种情况下都on可以重新启用。

首先使用查到无线网卡的名字

ifconfig -a

wlp0s20f3

iwlist 常用命令:
查询帮助信息

iwlist --help 

Usage: iwlist [interface] scanning [essid NNN] [last]

          [interface] frequency 
          [interface] channel 
          [interface] bitrate 
          [interface] rate 
          [interface] encryption 
          [interface] keys 
          [interface] power 
          [interface] txpower 
          [interface] retry 
          [interface] ap 
          [interface] accesspoints 
          [interface] peers 
          [interface] event 
          [interface] auth 
          [interface] wpakeys 
          [interface] genie 
          [interface] modulation 

查询版本信息

 iwlist --version 

iwlist Wireless-Tools version 30

      Compatible with Wireless Extension v11 to v22.

Kernel Currently compiled with Wireless Extension v22.

wlp0s20f3 Recommend Wireless Extension v21 or later,

      Currently compiled with Wireless Extension v22.

搜索wifi热点网络

iwlist wlp0s20f3 scan 

wlp0s20f3 Scan completed :

      Cell 01 - Address: CC:F9:57:D0:F5:85
                Channel:6
                Frequency:2.437 GHz (Channel 6)
                Quality=53/70  Signal level=-57 dBm  
                Encryption key:on
                ESSID:"xxxxxxxxxxxxxxxx"
                Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                          9 Mb/s; 12 Mb/s; 18 Mb/s
                Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
                Mode:Master

查询频道信息

iwlist wlp0s20f3 frequen

wlp0s20f3 32 channels in total; available frequencies :

      Channel 01 : 2.412 GHz
      Channel 02 : 2.417 GHz
      Channel 03 : 2.422 GHz
      Channel 04 : 2.427 GHz
      Channel 05 : 2.432 GHz
      Channel 06 : 2.437 GHz
      Channel 07 : 2.442 GHz
      Channel 08 : 2.447 GHz
      Channel 09 : 2.452 GHz
      Channel 10 : 2.457 GHz
      Channel 11 : 2.462 GHz
      Channel 12 : 2.467 GHz
      Channel 13 : 2.472 GHz
      Channel 36 : 5.18 GHz
      Channel 40 : 5.2 GHz
      Channel 44 : 5.22 GHz
      Channel 48 : 5.24 GHz
      Channel 52 : 5.26 GHz
      Channel 56 : 5.28 GHz
      Channel 60 : 5.3 GHz
      Channel 64 : 5.32 GHz
      Channel 100 : 5.5 GHz
      Channel 104 : 5.52 GHz
      Channel 108 : 5.54 GHz
      Channel 112 : 5.56 GHz
      Channel 116 : 5.58 GHz
      Channel 120 : 5.6 GHz
      Channel 124 : 5.62 GHz
      Channel 128 : 5.64 GHz
      Channel 132 : 5.66 GHz
      Channel 136 : 5.68 GHz
      Channel 140 : 5.7 GHz
      Current Frequency:2.437 GHz (Channel 6)
 

查询连接速度

iwlist wlp0s20f3 rate 

wlp0s20f3 unknown bit-rate information.

      Current Bit Rate:39 Mb/s
    

查询热点信息

iwlist wlp0s20f3 ap 

wlp0s20f3 Interface doesn't have a list of Peers/Access-Points
查询重接次数

iwlist wlp0s20f3 retry     

wlp0s20f3 Fixed limit ; min limit:0

                        max limit:255
      Current mode:on
              short limit:7
               long limit:4

查询电源模式

iwlist wlp0s20f3 power

 

wlp0s20f3 Current mode:on
查询功耗

iwlist wlp0s20f3 txpower

wlp0s20f3 unknown transmit-power information.

      Current Tx-Power=22 dBm      (158 mW)

添加 WiFi 连接配置
wpa_passphrase {SSID} {PASSWORD} > /etc/wpa_supplicant/{SSID}.conf

其中 {SSID} 为无线网络的名称(即WiFi名称),{PASSWORD} 为 WiFi 密码。

连接无线网络
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/{SSID}.conf -B
看到 Successfully 字样就表示连接成功啦!

配置 DHCP 自动分配 IP
dhclient wlan06
查看是否连接成功
ifconfig

看到 wlan0 中已经有正常的 IP 地址了,说明网络连接已经建立。

验证能否正常上网
ping www.baidu.com -c 4

响应正常,说明可以正常上网了!

Referenced from:https://cloud.tencent.com/developer/article/1494772

Protobuf 的 proto3 与 proto2 的区别
update:2021-8-27
proto3 比 proto2 支持更多语言但 更简洁。去掉了一些复杂的语法和特性,更强调约定而弱化语法。如果是首次使用 Protobuf ,建议使用 proto3 。

在第一行非空白非注释行,必须写:

syntax = "proto3";

  • 字段规则移除了 “required”,并把 “optional” 改名为 “singular”

在 proto2 中 required 也是不推荐使用的。proto3 直接从语法层面上移除了 required 规则。其实可以做的更彻底,把所有字段规则描述都撤销,原来的 repeated 改为在类型或字段名后加一对中括号。这样是不是更简洁?

  • “repeated”字段默认采用 packed 编码;

在 proto2 中,需要明确使用 [packed=true] 来为字段指定比较紧凑的 packed 编码方式。

  • 语言增加 Go、Ruby、JavaNano 支持;
  • 移除了 default 选项;

在 proto2 中,可以使用 default 选项为某一字段指定默认值。在 proto3 中,字段的默认值只能根据字段类型由系统决定。也就是说,默认值全部是约定好的,而不再提供指定默认值的语法。

  • 在字段被设置为默认值的时候,该字段不会被序列化。这样可以节省空间,提高效率。

但这样就无法区分某字段是根本没赋值,还是赋值了默认值。这在 proto3 中问题不大,但在 proto2 中会有问题。

比如,在更新协议的时候使用 default 选项为某个字段指定了一个与原来不同的默认值,旧代码获取到的该字段的值会与新代码不一样。

另一个重约定而弱语法的例子是 Go 语言里的公共/私有对象。Go 语言约定,首字母大写的为公共对象,否则为私有对象。所以在 Go 语言中是没有 public、private 这样的语法的。

  • 枚举类型的第一个字段必须为 0 ;

这也是一个约定。

  • 移除了对分组的支持;

分组的功能完全可以用消息嵌套的方式来实现,并且更清晰。在 proto2 中已经把分组语法标注为『过期』了。这次也算清理垃圾了。

  • 移除了对扩展的支持,新增了 Any 类型;

Any 类型是用来替代 proto2 中的扩展的。目前还在开发中。

proto2 中的扩展特性很像 Swift 语言中的扩展。理解起来有点困难,使用起来更是会带来不少混乱。

相比之下,proto3 中新增的 Any 类型有点像 C/C++ 中的 void* ,好理解,使用起来逻辑也更清晰。

  • 增加了 JSON 映射特性;

语言的活力来自于与时俱进。当前,JSON 的流行有其充分的理由。很多『现代化』的语言都内置了对 JSON 的支持,比如 Go、PHP 等。而 C++ 这种看似保罗万象的学院派语言,因循守旧、故步自封,以致于现出了式微的苗头。
Referenced from:https://blog.csdn.net/huanggang982/article/details/77944174

示例文件main.proto

syntax = "proto3";
package main;

message Test {
    string comment = 1;
}

message Example {
    string name = 1;
    int32 age = 2;
    repeated Test t = 3;

    message Label {
        string source = 1;
    }
    repeated Label labels = 4;
}

示例文件main.txt

name: "Larry"
age: 99
t: [{comment: "hello"}, {comment: "world"}]
labels: [{source: "foo"}, {source: "bar"}]

protoc --encode编码

protoc --encode=main.Example main.proto < main.txt > main.bin

查看main.bin的内容

hexdump -C main.bin 

00000000 0a 05 4c 61 72 72 79 10 63 1a 07 0a 05 68 65 6c |..Larry.c....hel|
00000010 6c 6f 1a 07 0a 05 77 6f 72 6c 64 22 05 0a 03 66 |lo....world"...f|
00000020 6f 6f 22 05 0a 03 62 61 72 |oo"...bar|
00000029

protoc --decode编码

protoc --decode=main.Example main.proto < main.bin 

name: "Larry"
age: 99
t {
comment: "hello"
}
t {
comment: "world"
}
labels {
source: "foo"
}
labels {
source: "bar"
}