【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.pswp.cn/news/38032.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38032.shtml
英文地址,請注明出處:http://en.pswp.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 一、發展現狀與規模 如上圖…