苏宁易购周四稍晚发布关于终止回购公司股份的公告,指因今年以来公司遇到阶段性的挑战和困难,为保证稳定经营,结合资金需求优先将资金用于投入公司日常经营上。

今年1月苏宁决定使用自有资金回购总金额5-10亿元的公司股份,但迄今尚未实施本次股份回购。

苏宁公告还称,董事会选举黄明端为公司第七届董事会董事长,并聘任任峻为公司总裁。

苏宁股价今日收涨10%报5.8元人民币,过去三个月股价累计下跌23.5%。过去一年该股股价接近腰斩,累计跌幅47.8%。

Referenced from:https://cn.reuters.com/article/suningstock-buyback-0729-thur-idCNKBS2F003O?il=0

29日晚间,苏宁易购发布公告称,苏宁易购新一届董事会产生,由阿里提名的前大润发董事长黄明端任苏宁易购新董事长。

董事会聘任任峻为公司总裁,公司零售业务线总裁侯恩龙不再履行总裁职责;同时修改公司章程第七条为“总裁为公司的法定代表人”。这意味着,苏宁易购董事长和总裁均易人。这也标志苏宁易购作为独立主体,进入了全新的发展时代。

新任董事长黄明端在履新讲话中首先对政府的支持和帮助、战略投资人和产业投资人的信任表达了感谢,并对苏宁易购创始人张近东对公司发展所做的重要贡献表示敬意。

“易购遇到的问题,要靠各方通力合作来解决;易购眼前的机遇,要靠大家齐心协力去争取。”在当日董事会上,黄明端进一步明确,苏宁易购战略方向是“聚焦零售”三大战略路径是:做好零售服务商、做强供应链、做优经营质量。

同日,苏宁易购公告称,选举黄明端、冼汉迪、曹群和张康阳为非独立董事。此外,董事徐宏因个人原因,申请辞去董事职务、董事会战略委员会委员职务;淘宝中国提名的刘鹏获选非独立董事候选人。

Referenced from:https://news.stcn.com/sd/202107/t20210730_3490673.html

股东淘宝中国提名的黄明端当选公司第七届董事会董事长,新新零售基金二期提名的冼汉迪、曹群,以及张近东之子张康阳担任非独立董事。此外,公司董事徐宏因个人原因,申请辞去公司第七届董事会董事职务,同时辞去董事会战略委员会委员职务。股东淘宝中国提名刘鹏为公司第七届董事会非独立董事候选人。

  新一届董事会还通过公司聘任任峻为公司总裁,公司零售业务线总裁侯恩龙先生自本次董事会决议日不再履行公司总裁职责。

  除了人事变动,当晚,苏宁易购还宣布终止回购公司股份,公司表示将根据资金需求优先将资金投入公司日常经营。

Referenced from:http://www.ce.cn/cysc/zgjd/kx/202107/30/t20210730_36763016.shtml

任峻、张康阳2名非独立董事由张近东提名;徐宏、黄明端2名非独立董事由淘宝中国提名;冼汉迪、曹群2名非独立董事由江苏新新零售创新基金二期(有限合伙)提名。

换言之,苏宁系董事及阿里系董事均为2名,苏宁系已失去其在苏宁易购董事会的绝对话语权。

此外,临时股东大会同时通过《关于改选公司第七届董事会专门委员会的议案》,这也意味着黄明端将任苏宁易购第七届董事会战略委员会主任委员。

值得注意的是,该职位此前由董事长张近东兼任,7月12日,张近东辞去苏宁易购董事长、董事任职的同时,也辞去董事会战略委员会主任委员职务。

苏宁易购曾在2013年公布的苏宁云商董事会战略委员会工作细则中披露,公司董事长为战略委员会固有委员,且战略委员会设主任委员一名,主任委员由公司董事长担任。

工作细则显示,战略委员会的主要职责权限包括对公司的中长期发展战略规划、经营目标、发展方针进行研究并提出建议等。

据腾讯《潜望》报道,阿里巴巴副总裁,天猫进出口事业群总裁刘鹏(奥文)有较大概率出任苏宁易购
CEO,负责苏宁自营业务。刘鹏于2015年初加入阿里巴巴,任天猫进出口事业部总经理,2019 年升任天猫进出口事业群总裁。

Referenced from:https://www.sohu.com/a/480298785_100001551

查看网站访问日志的时候发现了百度的spider

61.146.178.35 - - [30/Jul/2021:08:13:16 +0800] "HEAD / HTTP/1.1" 301 181 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
61.146.178.35 - - [30/Jul/2021:08:13:16 +0800] "HEAD / HTTP/1.1" 200 3481 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"

不明白,为什么只HEAD了一下,难道是有缓存。。也有可能是假spider。

查了一下IP,显示是
61.146.178.35 ASN归属地 广东省梅州市电信

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">

 PS:清除浏览器中的缓存,它和其它几句合起来用,就可以使你再次进入曾经访问过的页面时,ie浏览器必须从服务端下载最新的内容,达到刷新的效果。
Referenced from:https://blog.csdn.net/xiaocen99/article/details/72809117

http head method 使用

HTTP HEAD 方法 请求资源的头部信息, 并且这些头部与 HTTP GET 方法请求时返回的一致. 该请求方法的一个使用场景是在下载一个大文件前先获取其大小再决定是否要下载, 以此可以节约带宽资源.

HEAD 方法的响应不应包含响应正文. 即使包含了正文也必须忽略掉. 虽然描述正文信息的 entity headers, 例如 Content-Length 可能会包含在响应中, 但它们并不是用来描述 HEAD 响应本身的, 而是用来描述同样情况下的 GET 请求应该返回的响应.

如果 HEAD 请求的结果显示在上一次 GET 请求后缓存的资源已经过期了, 即使没有发出GET请求,缓存也会失效
Referenced from:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/HEAD

GET: 请求指定的页面信息,并返回实体主体。

HEAD: 只请求页面的首部。

POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。

PUT: 从客户端向服务器传送的数据取代指定的文档的内容。

DELETE: 请求服务器删除指定的页面。

OPTIONS: 允许客户端查看服务器的性能。

TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。

PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。

MOVE: 请求服务器将指定的页面移至另一个网络地址。

COPY: 请求服务器将指定的页面拷贝至另一个网络地址。

LINK: 请求服务器建立链接关系。

UNLINK: 断开链接关系。

WRAPPED: 允许客户端发送经过封装的请求。

Extension-mothed:在不改动协议的前提下,可增加另外的方法。

官方定义

HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息体。一个HEAD请求的响应中,HTTP头中包含的元信息应该和一个GET请求的响应消息相同。这种方法可以用来获取请求中隐含的元信息,而不用传输实体本身。也经常用来测试超链接的有效性、可用性和最近的修改。

一个HEAD请求的响应可被缓存,也就是说,响应中的信息可能用来更新之前缓存的实体。如果当前实体跟缓存实体的阈值不同(可通过Content-Length、Content-MD5、ETag或Last-Modified的变化来表明),那么这个缓存就被视为过期了。

简而言之

HEAD请求常常被忽略,但是能提供很多有用的信息,特别是在有限的速度和带宽下。主要有以下特点:

1、只请求资源的首部;

2、检查超链接的有效性;

3、检查网页是否被修改;

4、多用于自动搜索机器人获取网页的标志信息,获取rss种子信息,或者传递安全认证信息等

HEAD方法:它与GET方法几乎是一样的,对于HEAD请求的回应部分来说,它的HTTP头部中包含的信息与通过GET请求所得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得到Request-URI所标识的资源的信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。
Referenced from:https://www.jianshu.com/p/49ebc4a78474

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

序号方法描述
1GET请求指定的页面信息,并返回实体主体。
2HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4PUT从客户端向服务器传送的数据取代指定的文档的内容。
5DELETE请求服务器删除指定的页面。
6CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7OPTIONS允许客户端查看服务器的性能。
8TRACE回显服务器收到的请求,主要用于测试或诊断。
9PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。

journalctl usage..
journalctl 用法
journalctl 查看所有日志,基本上就是狂刷

journalctl --no-pager 等于 cat syslog.txt的效果。

journalctl -k

 查看内核日志(不显示应用日志)

加上--no-pager参数就直接输出到标准输出了。

journalctl -k --no-pager 

Jul 29 17:38:47 systemd[1]: systemd-journald.service: Unit entered failed state.
Jul 29 17:38:47 systemd[1]: systemd-journald.service: Failed with result 'signal'.
Jul 29 17:38:47 systemd[1]: systemd-journald.service: Service has no hold-off time, scheduling restart.
Jul 29 17:38:47 systemd[1]: Stopped Flush Journal to Persistent Storage.
Jul 29 17:38:47 systemd[1]: Stopping Flush Journal to Persistent Storage...
Jul 29 17:38:47 systemd[1]: Stopped Journal Service.
Jul 29 17:38:47 systemd[1]: Starting Journal Service...
Jul 29 17:38:47 systemd[1]: Started Journal Service.

查看系统本次启动的日志,基本上就是刷屏了。

journalctl -b
journalctl -b --no-pager 

查看指定程序的日志

journalctl /usr/sbin/sshd --no-pager

Jul 30 10:00:24 sshd[14609]: error: AuthorizedKeysCommand path is not absolute
Jul 30 10:00:24 sshd[14609]: Authentication refused: bad ownership or modes for directory /home/root
Jul 30 10:00:24 sshd[14609]: error: AuthorizedKeysCommand path is not absolute
Jul 30 10:00:24 sshd[14609]: Authentication refused: bad ownership or modes for directory /home/root
Jul 30 10:00:26 sshd[14609]: Accepted password for root from 192.168.5.64 port 52218 ssh2
Jul 30 10:00:26 sshd[14614]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
Jul 30 10:00:26 sshd[14614]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
Jul 30 10:56:45 sshd[16413]: error: AuthorizedKeysCommand path is not absolute
Jul 30 10:56:45 sshd[16413]: Authentication refused: bad ownership or modes for directory /home/root
Jul 30 10:56:45 sshd[16413]: error: AuthorizedKeysCommand path is not absolute
Jul 30 10:56:45 sshd[16413]: Authentication refused: bad ownership or modes for directory /home/root
Jul 30 10:56:47 sshd[16413]: Accepted password for root from 192.168.5.64 port 55484 ssh2
Jul 30 10:56:47 sshd[16418]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
Jul 30 10:56:47 sshd[16418]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
Jul 30 11:01:29 sshd[16585]: error: AuthorizedKeysCommand path is not absolute
Jul 30 11:01:29 sshd[16585]: error: AuthorizedKeysCommand path is not absolute
Jul 30 11:01:29 sshd[16585]: Accepted publickey for root from 192.168.5.64 port 55624 ssh2: RSA SHA256:Qji+sVx09n43QcM300pHJiiPWi4KzqulAMkLAaf1vXM
Jul 30 11:01:29 sshd[16587]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
Jul 30 11:01:29 sshd[16587]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
Jul 30 11:22:15 sshd[17223]: Accepted password for root from 192.168.5.44 port 64448 ssh2
Jul 30 11:22:15 sshd[17228]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
Jul 30 11:22:15 sshd[17228]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
Jul 30 11:33:52 sshd[17582]: Accepted password for root from 192.168.5.44 port 65228 ssh2
Jul 30 11:36:11 sshd[17696]: Accepted password for root from 192.168.5.44 port 65341 ssh2

journalctl /usr/bin/cv2x-daemon --no-pager

基本上就够用了。

按可执行文件的路径过滤
如果在参数中指定某个可执行文件(二进制文件或脚本文件),则 journalctl 会显示与该可执行文件相关的全部条目。比如可以显示 /usr/lib/systemd/systemd 程序产生的日志:

$ sudo journalctl /usr/lib/systemd/systemd

也可以显示 /usr/bin/bash 程序产生的日志:

$ sudo journalctl /usr/bin/bash

用json输出略吊。。

journalctl /usr/sbin/sshd --no-pager -o json

{ "__CURSOR" : "s=1f967cdb38644934b6add6dca6147120;i=ab550;b=81a1ae5398824daea9b502bf3ddfc092;m=2488403b14;t=5c84eebbadaf5;x=3e575c4f570ffd13", "__REALTIME_TIMESTAMP" : "1627616171449077", "__MONOTONIC_TIMESTAMP" : "156904733460", "_BOOT_ID" : "81a1ae5398824daea9b502bf3ddfc092", "_TRANSPORT" : "syslog", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "df9d1eef11ee45fd92b407191b390e56", "_HOSTNAME" : "imx6qsabresd", "PRIORITY" : "6", "SYSLOG_FACILITY" : "4", "SYSLOG_IDENTIFIER" : "sshd", "_COMM" : "sshd", "_EXE" : "/usr/sbin/sshd", "_CMDLINE" : "sshd: root [priv]", "_SYSTEMD_SLICE" : "system-sshd.slice", "SYSLOG_PID" : "17696", "MESSAGE" : "Accepted password for root from 192.168.5.44 port 65341 ssh2", "_PID" : "17696", "_SYSTEMD_CGROUP" : "/system.slice/system-sshd.slice/sshd@57-192.168.5.242:22-192.168.5.44:65341.service", "_SYSTEMD_UNIT" : "sshd@57-192.168.5.242:22-192.168.5.44:65341.service", "_SOURCE_REALTIME_TIMESTAMP" : "1627616171448199" }

journalctl /usr/sbin/sshd --no-pager -o json-pretty

{

"__CURSOR" : "s=1f967cdb38644934b6add6dca6147120;i=ab550;b=81a1ae5398824daea9b502bf3ddfc092;m=2488403b14;t=5c84eebbadaf5;x=3e575c4f570ffd13",
"__REALTIME_TIMESTAMP" : "1627616171449077",
"__MONOTONIC_TIMESTAMP" : "156904733460",
"_BOOT_ID" : "81a1ae5398824daea9b502bf3ddfc092",
"_TRANSPORT" : "syslog",
"_UID" : "0",
"_GID" : "0",
"_CAP_EFFECTIVE" : "3fffffffff",
"_MACHINE_ID" : "df9d1eef11ee45fd92b407191b390e56",
"_HOSTNAME" : "imx6qsabresd",
"PRIORITY" : "6",
"SYSLOG_FACILITY" : "4",
"SYSLOG_IDENTIFIER" : "sshd",
"_COMM" : "sshd",
"_EXE" : "/usr/sbin/sshd",
"_CMDLINE" : "sshd: root [priv]",
"_SYSTEMD_SLICE" : "system-sshd.slice",
"SYSLOG_PID" : "17696",
"MESSAGE" : "Accepted password for root from 192.168.5.44 port 65341 ssh2",
"_PID" : "17696",
"_SYSTEMD_CGROUP" : "/system.slice/system-sshd.slice/sshd@57-192.168.5.242:22-192.168.5.44:65341.service",
"_SYSTEMD_UNIT" : "sshd@57-192.168.5.242:22-192.168.5.44:65341.service",
"_SOURCE_REALTIME_TIMESTAMP" : "1627616171448199"

}

查看了一下帮助文件,支持的格式还不少。

 -o --output=STRING       Change journal output mode (short, short-iso,
                                    short-precise, short-monotonic, verbose,
                                    export, json, json-pretty, json-sse, cat)
                               

不知道json-sse是什么东西,试试。

journalctl /usr/sbin/sshd --no-pager -o json-sse

data: { "__CURSOR" : "s=1f967cdb38644934b6add6dca6147120;i=ab550;b=81a1ae5398824daea9b502bf3ddfc092;m=2488403b14;t=5c84eebbadaf5;x=3e575c4f570ffd13", "__REALTIME_TIMESTAMP" : "1627616171449077", "__MONOTONIC_TIMESTAMP" : "156904733460", "_BOOT_ID" : "81a1ae5398824daea9b502bf3ddfc092", "_TRANSPORT" : "syslog", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "df9d1eef11ee45fd92b407191b390e56", "_HOSTNAME" : "imx6qsabresd", "PRIORITY" : "6", "SYSLOG_FACILITY" : "4", "SYSLOG_IDENTIFIER" : "sshd", "_COMM" : "sshd", "_EXE" : "/usr/sbin/sshd", "_CMDLINE" : "sshd: root [priv]", "_SYSTEMD_SLICE" : "system-sshd.slice", "SYSLOG_PID" : "17696", "MESSAGE" : "Accepted password for root from 192.168.5.44 port 65341 ssh2", "_PID" : "17696", "_SYSTEMD_CGROUP" : "/system.slice/system-sshd.slice/sshd@57-192.168.5.242:22-192.168.5.44:65341.service", "_SYSTEMD_UNIT" : "sshd@57-192.168.5.242:22-192.168.5.44:65341.service", "_SOURCE_REALTIME_TIMESTAMP" : "1627616171448199"}

linux socket 设置缓冲区大小时内核会翻倍
示例代码:

#include <sys/socket.h>
#include <stdio.h>

int main(int argc, char **argv)
{
 int sockfd, sendbuff;
 socklen_t optlen;

 sockfd = socket(AF_INET, SOCK_DGRAM, 0);
 if(sockfd == -1)
     printf("Error");

 int res = 0;

 // Get buffer size
 optlen = sizeof(sendbuff);
 res = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen);

 if(res == -1)
     printf("Error getsockopt one");
 else
     printf("send buffer size = %d\n", sendbuff);

 // Set buffer size
 sendbuff = 98304;

 printf("sets the send buffer to %d\n", sendbuff);
 res = setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, sizeof(sendbuff));

 if(res == -1)
     printf("Error setsockopt");


 // Get buffer size
 optlen = sizeof(sendbuff);
 res = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen);

 if(res == -1)
     printf("Error getsockopt two");
 else
     printf("send buffer size = %d\n", sendbuff);

 return 0;
}

运行结果:

send buffer size = 129024
sets the send buffer to 98304
new send buffer size = 196608

官方手册说明

SO_SNDBUFSets or gets the maximum socket send buffer in bytes. The ker-nel doubles this value (to allow space for bookkeeping overhead) when it is set using setsockopt(), and this doubled value is returned by getsockopt(). The default value is set by the wmem_default sysctl and the maximum allowed value is set by the wmem_max sysctl. The minimum (doubled) value for this option is 2048.

编译结果

./protoc --version

libprotoc 3.17.3

git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
mkdir x64
cd x64
../configure --prefix=$(pwd)/install
make
make install

运行编译好的程序

./install/bin/protoc --version

libprotoc 3.17.3
查看所有库文件

tree install/lib/

install/lib/
├── libprotobuf.a
├── libprotobuf.la
├── libprotobuf-lite.a
├── libprotobuf-lite.la
├── libprotobuf-lite.so -> libprotobuf-lite.so.28.0.3
├── libprotobuf-lite.so.28 -> libprotobuf-lite.so.28.0.3
├── libprotobuf-lite.so.28.0.3
├── libprotobuf.so -> libprotobuf.so.28.0.3
├── libprotobuf.so.28 -> libprotobuf.so.28.0.3
├── libprotobuf.so.28.0.3
├── libprotoc.a
├── libprotoc.la
├── libprotoc.so -> libprotoc.so.28.0.3
├── libprotoc.so.28 -> libprotoc.so.28.0.3
├── libprotoc.so.28.0.3
└── pkgconfig

├── protobuf-lite.pc
└── protobuf.pc

编译arm版本protobuf库

cd ../
mkdir arm
cd arm/
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=$(pwd)/install --host=arm-linux
make -j8
make install
file ./install/bin/protoc 

./install/bin/protoc: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=cea786b94a0b64b866983c8b4541df34e9cc7c1d, with debug_info, not stripped

protobuf/arm$ tree ./install/lib/

./install/lib/
├── libprotobuf.a
├── libprotobuf.la
├── libprotobuf-lite.a
├── libprotobuf-lite.la
├── libprotobuf-lite.so -> libprotobuf-lite.so.28.0.3
├── libprotobuf-lite.so.28 -> libprotobuf-lite.so.28.0.3
├── libprotobuf-lite.so.28.0.3
├── libprotobuf.so -> libprotobuf.so.28.0.3
├── libprotobuf.so.28 -> libprotobuf.so.28.0.3
├── libprotobuf.so.28.0.3
├── libprotoc.a
├── libprotoc.la
├── libprotoc.so -> libprotoc.so.28.0.3
├── libprotoc.so.28 -> libprotoc.so.28.0.3
├── libprotoc.so.28.0.3
└── pkgconfig

├── protobuf-lite.pc
└── protobuf.pc

使用git 直接git clone github的库,不会报googletest 相关的警告,自动下载好了。如果自己在github.com protobuf release哪儿下载的放在,编译时候会报一个没有googletest的警告。好烦。。

configure: WARNING: no configuration information is in third_party/googletest