【BASH】回顾与知识点梳理(二十五)

【BASH】回顾与知识点梳理 二十五

    • 二十五. 特殊shell、PAM 模块、讯息传递和大量建置账号
      • 25.1 特殊shell
        • 特殊的 shell, /sbin/nologin
      • 25.2 PAM模块
      • 25.3 Linux 主机上的用户讯息传递
        • 查询使用者: w, who, last, lastlog
        • 使用者对谈: write, mesg, wall
        • 使用者邮件信箱: mail
      • 25.4 CentOS 7 环境下大量建置账号的方法
        • 一些账号相关的检查工具
          • pwck/grpck
          • pwconv
          • pwunconv
          • chpasswd
        • 大量建置账号模板(适用 passwd --stdin 选项)

该系列目录 --> 【BASH】回顾与知识点梳理(目录)

二十五. 特殊shell、PAM 模块、讯息传递和大量建置账号

25.1 特殊shell

我们前面一直谈到的大多是一般身份用户与系统管理员 (root) 的相关操作, 而且大多是讨论关于可登入系统的账号来说。那么换个角度想,如果我今天想要建立的, 是一个『仅能使用 mail server 相关邮件服务的账号,而该账号并不能登入 Linux 主机』呢?如果不能给予该账号一个密码,那么该账号就无法使用系统的各项资源,当然也包括 mail 的资源, 而如果给予一个密码,那么该账号就可能可以登入 Linux 主机啊!呵呵~伤脑筋吧~ 所以,底下让我们来谈一谈这些有趣的话题啰!

特殊的 shell, /sbin/nologin

在一开头的 passwd 文件结构里面我们就谈过系统账号这玩意儿,这玩意儿的 shell 就是使用/sbin/nologin ,重点在于系统账号是不需要登入的!所以我们就给他这个无法登入的合法 shell。 使用了这个 shell 的用户即使有了密码,你想要登入时他也无法登入,因为会出现如下的讯息喔:

This account is currently not available.

我们所谓的『无法登入』指的仅是:『这个使用者无法使用 bash 或其他 shell 来登入系统』而已,并不是说这个账号就无法使用其他的系统资源喔! 举例来说,各个系统账号,打印作业由lp这个账号在管理, WWW 服务由 apache 这个账号在管理, 他们都可以进行系统程序的工作,但是『就是无法登入主机取得互动的 shell』而已啦!^_^

换个角度来想,如果我的 Linux 主机提供的是邮件服务,所以说,在这部 Linux 主机上面的账号,其实大部分都是用来收受主机的信件而已,并不需要登入主机的呢! 这个时候,我们就可以考虑让单纯使用 mail 的账号以 /sbin/nologin 做为他们的 shell , 这样,最起码当我的主机被尝试想要登入系统以取得 shell 环境时,可以拒绝该账号呢!

另外,如果我想要让某个具有 /sbin/nologin 的使用者知道,他们不能登入主机时, 其实我可以建立『/etc/nologin.txt 』这个文件, 并且在这个文件内说明不能登入的原因,那么下次当这个用户想要登入系统时, 屏幕上出现的就会是 /etc/nologin.txt 这个文件的内容,而不是预设的内容了!

当使用者尝试利用纯 mail 账号 (例如 myuser3) 时,利用 /etc/nologin.txt 告知用户不要利用该账号登入系统。
答:直接以 vim 编辑该文件,内容可以是这样:

[root@study ~]# vim /etc/nologin.txt
This account is system account or mail account.
Please DO NOT use this account to login my Linux server.

想要测试时,可以使用 myuser3 (此账号的 shell 是 /sbin/nologin) 来测试看看!

This account is system account or mail account.
Please DO NOT use this account to login my Linux server.

结果会发现与原本的默认讯息不一样喔! ^_^

25.2 PAM模块

此处参考 linux PAM模块简介

25.3 Linux 主机上的用户讯息传递

谈了这么多的账号问题,总是该要谈一谈,那么如何针对系统上面的用户进行查询吧? 想几个状态,如果你在 Linux 上面操作时,刚好有其他的用户也登入主机,你想要跟他对谈,该如何是好? 你想要知道某个账号的相关信息,该如何查阅?呼呼!底下我们就来聊一聊~

查询使用者: w, who, last, lastlog

如何查询一个用户的相关数据呢?这还不简单,我们之前就提过了 id, finger 等指令了,都可以让您了解到一个用户的相关信息啦!那么想要知道使用者到底啥时候登入呢? 最简单可以使用last检查啊!

那如果你想要知道目前已登入在系统上面的用户呢?可以透过 w 或 who 来查询喔!如下范例所示:

[root@study ~]# w
01:49:18 up 25 days, 3:34, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
dmtsai tty2 07Jul15 12days 0.03s 0.03s -bash
dmtsai pts/0 172.16.200.254 00:18 6.00s 0.31s 0.11s sshd: dmtsai [priv]
# 第一行显示目前的时间、开机 (up) 多久,几个用户在系统上平均负载等;
# 第二行只是各个项目的说明,
# 第三行以后,每行代表一个使用者。如上所示,dmtsai 登入并取得终端机名 tty2 之意。
[root@study ~]# who
dmtsai tty2 2015-07-07 23:07
dmtsai pts/0 2015-07-22 00:18 (192.168.1.100)

另外,如果您想要知道每个账号的最近登入的时间,则可以使用 lastlog 这个指令喔! lastlog 会去读取 /var/log/lastlog 文件,结果将数据输出如下表:

[root@study ~]# lastlog
Username Port From Latest
root pts/0 Wed Jul 22 00:26:08 +0800 2015
bin **Never logged in**
....(中间省略)....
dmtsai pts/1 192.168.1.100 Wed Jul 22 01:08:07 +0800 2015
vbird1 pts/0 Wed Jul 22 01:32:17 +0800 2015
pro3 **Never logged in**
....(以下省略)....

这样就能够知道每个账号的最近登入的时间啰~

使用者对谈: write, mesg, wall

那么我是否可以跟系统上面的用户谈天说地呢?当然可以啦!利用 write 这个指令即可。 write 可以直接将讯息传给接收者啰!举例来说,我们的 Linux 目前有 vbird1 与 root 两个人在在线, 我的 root 要跟 vbird1 讲话,可以这样做:

[root@study ~]# write 使用者账号 [用户所在终端接口]
[root@study ~]# who
vbird1 tty3 2015-07-22 01:55 <==有看到 vbird1 在在线
root tty4 2015-07-22 01:56 
[root@study ~]# write vbird1 pts/2
Hello, there:
Please don't do anything wrong... <==这两行是 root 写的信息!
# 结束时,请按下 [crtl]-d 来结束输入。此时在 vbird1 的画面中,会出现:
Message from root@study.centos.vbird on tty4 at 01:57 ...
Hello, there:
Please don't do anything wrong...
EOF

怪怪~立刻会有讯息响应给 vbird1 !不过…当时 vbird1 正在查资料,哇! 这些讯息会立刻打断vbird1 原本的工作喔!所以,如果 vbird1 这个人不想要接受任何讯息,直接下达这个动作:

[vbird1@study ~]$ mesg n
[vbird1@study ~]$ mesg
is n

不过,这个 mesg 的功能对 root 传送来的讯息没有抵挡的能力!所以如果是 root 传送讯息, vbird1 还是得要收下。 但是如果 root 的 mesg 是 n 的,那么 vbird1 写给 root 的信息会变这样:

[vbird1@study ~]$ write root
write: root has messages disabled

了解乎?如果想要解开的话,再次下达『 mesg y 』就好啦!想要知道目前的 mesg 状态,直接下达『 mesg 』即可!瞭呼? 相对于 write 是仅针对一个使用者来传『简讯』,我们还可以『对所有系统上面的用户传送简讯 (广播)』哩~ 如何下达?用wall即可啊!他的语法也是很简单的喔!

[root@study ~]# wall "I will shutdown my linux server..."

然后你就会发现所有的人都会收到这个简讯呢!连发送者自己也会收到耶!

使用者邮件信箱: mail

使用 wall, write 毕竟要等到使用者在在线才能够进行,有没有其他方式来联络啊? 不是说每个Linux 主机上面的用户都具有一个 mailbox 吗? 我们可否寄信给使用者啊!呵呵!当然可以啊!我们可以寄、收 mailbox 内的信件呢! 一般来说, mailbox 都会放置在/var/spool/mail 里面,一个账号一个 mailbox (文件)。 举例来说,我的 vbird1 就具有 /var/spool/mail/vbird1 这个 mailbox 喔!

那么我该如何寄出信件呢?就直接使用 mail 这个指令即可!这个指令的用法很简单的,直接这样下达:『mail -s "邮件标题" username@localhost 』即可! 一般来说,如果是寄给本机上的使用者,基本上,连『 @localhost 』都不用写啦! 举例来说,我以 root 寄信给 vbird1 ,信件标题是『nice to meet you』,则:

[root@study ~]# mail -s "nice to meet you" vbird1
Hello, D.M. Tsai
Nice to meet you in the network.
You are so nice. byebye!
. <==这里很重要喔,结束时,最后一行输入小数点 . 即可!
EOT
[root@study ~]# <==出现提示字符,表示输入完毕了!

如此一来,你就已经寄出一封信给 vbird1 这位使用者啰,而且,该信件标题为: nice to meet you,信件内容就如同上面提到的。不过,你或许会觉得 mail 这个程序不好用~ 因为在信件编写的过程中,如果写错字而按下 Enter 进入次行,前一行的数据很难删除ㄟ! 那怎么办?没关系啦!我们使用数据流重导向啊!呵呵!利用那个小于的符号 ( < ) 就可以达到取代键盘输入的要求了。也就是说,你可以先用 vi 将信件内容编好, 然后再以 mail -s "nice to meet you" vbird1 < filename 来将文件内容传输即可。

  1. 请将你的家目录下的环境变量文件 (~/.bashrc) 寄给自己!
    答:mail -s “bashrc file content” dmtsai < ~/.bashrc

  2. 透过管线命令直接将 ls -al ~ 的内容传给 root 自己!
    答:ls -al ~ | mail -s “myfile” root

刚刚上面提到的是关于『寄信』的问题,那么如果是要收信呢?呵呵!同样的使用 mail 啊! 假设我以 vbird1 的身份登入主机,然后输入 mail 后,会得到什么?

[vbird1@study ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/vbird1": 1 message 1 new
>N 1 root Wed Jul 22 02:09 20/671 "nice to meet you"
& <==这里可以输入很多的指令,如果要查阅,输入 ? 即可!

在 mail 当中的提示字符是 & 符号喔,别搞错了~输入 mail 之后,我可以看到我有一封信件, 这封信件的前面那个>代表目前处理的信件,而在大于符号的右边那个 N 代表该封信件尚未读过,如果我想要知道这个 mail 内部的指令有哪些,可以在 & 之后输入『?』,就可以看到如下的画面:

& ?mail commands
type <message list> type messages
next goto and type next message
from <message list> give head lines of messages
headers print out active message headers
delete <message list> delete messages
undelete <message list> undelete messages
save <message list> folder append messages to folder and mark as saved
copy <message list> folder append messages to folder without marking them
write <message list> file append message texts to file, save attachments
preserve <message list> keep incoming messages in mailbox even if saved
Reply <message list> reply to message senders
reply <message list> reply to message senders and all recipients
mail addresses mail to specific recipients
file folder change to another folder
quit quit and apply changes to folder
xit quit and discard changes made to folder
! shell escape
cd <directory> chdir to directory or home if none given
list list names of all available commands

25.4 CentOS 7 环境下大量建置账号的方法

系统上面如果有一堆账号存在,你怎么判断某些账号是否存在一些问题?这时需要哪些软件的协助处理比较好? 另外,如果你跟鸟哥一样,在开学之初或期末之后,经常有需要大量建立账号、删除账号的需求时,那么是否要使用 useradd 一行一行指令去建立? 此外,如果还有需要使用到下一章会介绍到的 quota (磁盘配额) 时,那是否还要额外使用其他机制来建立这些限制值?既然已经学过shell script 了, 当然写支脚本让它将所有的动作做完最轻松吧!所以啰,底下我们就来聊一聊,如何检查账号以及建立这个脚本要怎么进行比较好?

一些账号相关的检查工具

先来检查看看用户的家目录、密码等数据有没有问题?这时会使用到的主要有 pwck 以及 pwconv / pwuconv 等,让我们来了解一下先!

pwck/grpck

pwck 这个指令在检查 /etc/passwd 这个账号配置文件内的信息,与实际的家目录是否存在等信息,还可以比对 /etc/passwd /etc/shadow 的信息是否一致,另外,如果 /etc/passwd 内的数据字段错误时,会提示使用者修订。 一般来说,我只是利用这个玩意儿来检查我的输入是否正确就是了。

[root@study ~]# pwck
user 'ftp': directory '/var/ftp' does not exist
user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
pwck: no changes

瞧!上面仅是告知我,这些账号并没有家目录,由于那些账号绝大部分都是系统账号,确实也不需要家目录的,所以,那是『正常的错误!』呵呵!不理他。 _。 相对应的群组检查可以使用 grpck 这个指令的啦!

pwconv

这个指令主要的目的是在『将 /etc/passwd 内的账号与密码,移动到 /etc/shadow 当中!』早期的 Unix 系统当中并没有 /etc/shadow 呢,所以,用户的登入密码早期是在 /etc/passwd 的第二栏,后来为了系统安全,才将密码数据移动到 /etc/shadow 内的。使用 pwconv 后,可以:

  • 比对 /etc/passwd 及 /etc/shadow ,若 /etc/passwd 内存在的账号并没有对应的 /etc/shadow 密码时,则pwconv 会去 /etc/login.defs 取用相关的密码数据,并建立该账号的 /etc/shadow 数据;
  • 若 /etc/passwd 内存在加密后的密码数据时,则 pwconv 会将该密码栏移动到 /etc/shadow 内,并将原本的/etc/passwd 内相对应的密码栏变成 x !

一般来说,如果您正常使用 useradd 增加使用者时,使用 pwconv 并不会有任何的动作,因为/etc/passwd 与 /etc/shadow 并不会有上述两点问题啊! ^_^。不过,如果手动设定账号,这个 pwconv 就很重要啰!

pwunconv

相对于 pwconv , pwunconv 则是『将 /etc/shadow 内的密码栏数据写回 /etc/passwd 当中, 并且删除 /etc/shadow 文件。这个指令说实在的,最好不要使用啦! 因为他会将你的 /etc/shadow 删除喔!如果你忘记备份,又不会使用 pwconv 的话,粉严重呢!

chpasswd

chpasswd 是个挺有趣的指令,他可以『读入未加密前的密码,并且经过加密后, 将加密后的密码写入 /etc/shadow 当中。』这个指令很常被使用在大量建置账号的情况中喔! 他可以由 Standard input 读入数据,每笔数据的格式是『 username:password 』。 举例来说,我的系统当中有个用户账号为vbird3 ,我想要更新他的密码 (update) , 假如他的密码是 abcdefg 的话,那么我可以这样做:

[root@study ~]# echo "vbird3:abcdefg" | chpasswd 

神奇吧!这样就可以更新了呢!在预设的情况中, chpasswd 会去读取 /etc/login.defs 文件内的加密机制,我们 CentOS 7.x 用的是 SHA512, 因此 chpasswd 就预设会使用 SHA512 来加密!如果你想要使用不同的加密机制,那就得要使用-c以及 -e 等方式来处理了! 不过从 CentOS 5.x 开始之后,passwd 已经默认加入了 --stdin 的选项,因此这个 chpasswd 就变得英雄无用武之地了! 不过,在其他非 Red Hat 衍生的 Linux 版本中,或许还是可以参考这个指令功能来大量建置账号喔!

大量建置账号模板(适用 passwd --stdin 选项)

由于 CentOS 7.x 的 passwd 已经提供了 --stdin 的功能,因此如果我们可以提供账号密码的话, 那么就能够很简单的建置起我们的账号密码了。底下鸟哥制作一个简单的 script 来执行新增用户的功能喔!

[root@study ~]# vim accountadd.sh
#!/bin/bash
# This shell script will create amount of linux login accounts for you.
# 1. check the "accountadd.txt" file exist? you must create that file manually.
# one account name one line in the "accountadd.txt" file.
# 2. use openssl to create users password.
# 3. User must change his password in his first login.
# 4. more options check the following url:
# http://linux.vbird.org/linux_basic/0410accountmanager.php#manual_amount
# 2015/07/22 VBird
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
# 0. userinput
usergroup="" # if your account need secondary group, add here.
pwmech="openssl" # "openssl" or "account" is needed.
homeperm="no" # if "yes" then I will modify home dir permission to 711
# 1. check the accountadd.txt file
action="${1}" # "create" is useradd and "delete" is userdel.
if [ ! -f accountadd.txt ]; then
echo "There is no accountadd.txt file, stop here."exit 1
fi
[ "${usergroup}" != "" ] && groupadd -r ${usergroup}
rm -f outputpw.txt
usernames=$(cat accountadd.txt)
for username in ${usernames}
docase ${action} in"create")[ "${usergroup}" != "" ] && usegrp=" -G ${usergroup} " || usegrp=""useradd ${usegrp} ${username} # 新增账号[ "${pwmech}" == "openssl" ] && usepw=$(openssl rand -base64 6) || usepw=${username}echo ${usepw} | passwd --stdin ${username} # 建立密码chage -d 0 ${username} # 强制登入修改密码[ "${homeperm}" == "yes" ] && chmod 711 /home/${username}echo "username=${username}, password=${usepw}" >> outputpw.txt;;"delete")echo "deleting ${username}"userdel -r ${username};;*)echo "Usage: $0 [create|delete]";;esac
done

接下来只要建立 accountadd.txt 这个文件即可!鸟哥建立这个文件里面共有 5 行,你可以自行建立该文件!内容每一行一个账号。 而是否需要修改密码?是否与账号相同的信息等等,你可以自由选择!若使用 openssl 自动猜密码时,用户的密码请由 outputpw.txt 去捞~鸟哥最常作的方法,就是将该文件打印出来,用裁纸机一个账号一条,交给同学即可!

[root@study ~]# vim accountadd.txt
std01
std02
std03
std04
std05
[root@study ~]# sh accountadd.sh create
Changing password for user std01.
passwd: all authentication tokens updated successfully.
....(后面省略)....

该系列目录 --> 【BASH】回顾与知识点梳理(目录)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/38032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3组件库

Vue组件库 ViteVue3TypescriptTSX 1、项目搭建 1.1、创建项目&#xff08;yarn&#xff09; D:\WebstromProject>yarn create vite yarn create v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh pa…

UNIAPP中开发企业微信小程序

概述 需求为使用uni-app开发企业微信小程序。希望可以借助现成的uni-app框架&#xff0c;快速开发。遇到的问题是uni-app引入jweixin-1.2.0.js提示异常: Reason: TypeError: Cannot read properties of undefined (reading ‘title’)。本文中描述了如何解决该问题&#xff0c…

IntelliJIDEA安装lombok插件

写在前面&#xff1a; 当我们创建POJO类时&#xff0c;都会毫不犹豫的让开发工具对域变量生成set&#xff0c;get方法&#xff0c;虽然不是我们自己手动添加&#xff0c;但每个类都要做重复的生成操作&#xff0c;而且当变量名或者是修饰符改变了&#xff0c;我们就要删除set&…

大数据量模糊查询优化(流去重,流分批,建树操作)

大数据量模糊查询优化&#xff08;流去重&#xff0c;流分批&#xff0c;建树操作&#xff09; 前言一、java8 流是什么二、本次优化涉及操作1.流去重2.流分批3.hutool树工具类建树4.全部代码 总结 前言 有时候会进行大数据量查询后的建树操作&#xff0c;如果直接使用sql语句…

K8S之存储卷

K8S之存储卷 一、emptyDir emptyDir&#xff1a;可实现Pod中的容器之间共享目录数据&#xff0c;但emptyDir存储卷没有持久化数据的能力&#xff0c;存储卷会随着Pod生命周期结束而一起删除二、hostPath hostPath&#xff1a;将Node节点上的目录/文件挂载到Pod容器的指定目录…

TypeScript 关于对【泛型】的定义使用解读

目录 概念导读泛型函数多个泛型参数泛型约束泛型别名泛型接口泛型类总结&#xff1a; 概念导读 泛型&#xff08;Generics&#xff09;是指在定义函数、接口或类的时候&#xff0c;不预先指定具体的类型&#xff0c;而在使用的时候再指定类型的一种特性。使用泛型 可以复用类型…

Oracle切割字符串的方法,SQL语句完成。

Oracle用正则的方式循环切割字符串 需求&#xff1a;有一个这样子的 Str “‘CNJ-520-180500000001|CNJ-520-181200000001|CNJ-520-190300000001|CNJ-520-190100000001|CNJ-520-181200000002’” &#xff0c;然后我需要拿到每一个单号&#xff0c;每一个单号都要走一遍固定的…

“MongoDB基础知识【超详细】

"探索MongoDB的无边之境&#xff1a;沉浸式数据库之旅" 欢迎来到MongoDB的精彩世界&#xff01;在这个博客中&#xff0c;我们将带您进入一个充满创新和无限潜力的数据库领域。无论您是开发者、数据工程师还是技术爱好者&#xff0c;MongoDB都将为您带来一场令人心动…

如何实现安全上网

l 场景描述 政府、军工、科研等涉密单位或企业往往要比其他组织更早接触高精尖的技术与产品&#xff0c;相对应的数据保密性要求更高。常规的内外网物理隔离手段&#xff0c;已经满足不了这些涉密单位的保密需求&#xff0c;发展到现在&#xff0c;需求已经演变成既要保证网络…

记一次Kafka重复消费解决过程

起因&#xff1a;车联网项目开发&#xff0c;车辆发生故障需要给三个系统推送消息&#xff0c;故障上报较为频繁&#xff0c;所以为了不阻塞主流程&#xff0c;采用了使用kafka。消费方负责推送并保存推送记录&#xff0c;但在一次压测中发现&#xff0c;实际只发生了10次故障&…

“深入探究JVM内部机制:理解Java虚拟机的工作原理“

标题&#xff1a;深入探究JVM内部机制&#xff1a;理解Java虚拟机的工作原理 摘要&#xff1a;本文将深入探究Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;帮助读者理解JVM的工作原理。我们将介绍JVM的组成部分、类加载过程、内存管理和垃圾回收机制&#xf…

带你了解ChatGPT

目录 什么是ChatGPT 从ChatGPT角度看聊天机器人的历史 聊天机器人的早期历史 ChatGPT的出现 ChatGPT和其他聊天机器人的比较 总结 ChatGPT相比其他聊天机器人的优势在哪里 1. 自然语言处理能力更强 2. 编程能力高&#xff0c;应用领域广泛 3. 可以满足个性化需求 4.…

Golang实现完整聊天室(内附源码)

项目github地址&#xff1a; 由于我们项目的需要&#xff0c;我就研究了一下关于websocket的相关内容&#xff0c;去实现一个聊天室的功能。 经过几天的探索&#xff0c;现在使用Gin框架实现了一个完整的聊天室消息实时通知系统。有什么不完善的地方还请大佬指正。 用到的技术…

使用自己的数据利用pytorch搭建全连接神经网络进行回归预测

使用自己的数据利用pytorch搭建全连接神经网络进行回归预测 1、导入库2、数据准备3、数据拆分4、数据标准化5、数据转换6、模型搭建7、模型训练8、模型预测9、完整代码 1、导入库 引入必要的库&#xff0c;包括PyTorch、Pandas等。 import numpy as np import pandas as pd f…

tp6 RabbitMQ

1、composer 安装 AMQP 扩展 composer require php-amqplib/php-amqplib 2、RabbitMQ 配置 在 config 目录下创建 rabbitmq.php 文件 <?php return [host>,port>5672,user>,password>,vhost>,exchange_name > ,queue_name > ,route_key > ,cons…

中国生产了5.07亿台,库存高达近4亿台?国产手机彻底卖不动了?

统计数据显示今年上半年中国的手机产量达到5.07亿台&#xff0c;国内市场手机出货量仅有1.24亿台&#xff0c;都出现了下滑&#xff0c;那么中国手机的产量比销量多出了3.83亿台&#xff0c;这些手机都成为了库存&#xff1f; 中国手机市场确实不如早年那么辉煌&#xff0c;201…

【FAQ】安防监控视频EasyCVR平台分发的FLV视频流在VLC中无法播放

众所周知&#xff0c;TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入&#xff0c;包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上&#xff0c;视频监控…

P12-Retentive NetWork-RetNet挑战Transformer

论文地址:https://arxiv.org/abs/2307.08621 目录 Abstract 一.Introduction 二.Retentive Networks 2.1Retention 2.2Gated Multi-Scale Retention 2.3Overall Architecture of Retention Networks 2.4Relation to and Differences from Previous Methods 三.Experime…

Codeforces Round 892 (Div. 2)(VP)

A //b里放最小值&#xff0c;其他值放c。如果最大值最小值&#xff0c;则无解。 void solve() {int n; cin >> n;vi a(n); liter(x, a) cin >> x; sort(all(a));if (a[0] a[n - 1]){print(-1); return;}vi b, c;for (int i 0; i < sz(a); i){if (a[i] a[0])…

小米基于 Flink 的实时计算资源治理实践

摘要&#xff1a;本文整理自小米高级软件工程师张蛟&#xff0c;在 Flink Forward Asia 2022 生产实践专场的分享。本篇内容主要分为四个部分&#xff1a; 发展现状与规模框架层治理实践平台层治理实践未来规划与展望 点击查看原文视频 & 演讲PPT 一、发展现状与规模 如上图…