linux每日命令(30):Linux 用戶及用戶組相關文件、命令詳解

来源:https://www.cnblogs.com/huchong/archive/2018/11/29/10037533.html
-Advertisement-
Play Games

一. 用戶、用戶組概念及其文件結構詳解 Linux用戶只有兩個等級:root及非root。Linux中還有一部分用戶,如:apache、mysql、nobody、ftp等,這些也都是非root用戶,即普通用戶。Linux的許可權實際是上不同用戶所能訪問的文件的不同產生的假象。而這些假象的造成,還要涉及 ...


一. 用戶、用戶組概念及其文件結構詳解

Linux用戶只有兩個等級:root及非root。Linux中還有一部分用戶,如:apache、mysql、nobody、ftp等,這些也都是非root用戶,即普通用戶。Linux的許可權實際是上不同用戶所能訪問的文件的不同產生的假象。而這些假象的造成,還要涉及到另外一個概念:用戶組

  • 一個用戶至少要屬於一個用戶組
  • 一個用戶可以屬於多個用戶組

用戶組存在的原因主要還是方便分配許可權。而用戶本身和許可權的差別不是很大,各個用戶之間主要的不同是:

  • 是否擁有密碼
  • home目錄(普通用戶可以有一個以自己用戶名命名的home目錄,存放的地址是/home/username,root用戶的home目錄是:/root)
  • shell

像nobody這樣用來執行Nginx的工作進程的用戶,一般不分配密碼和shell,甚至連home目錄都沒有。

為什麼不分配密碼?如果設置了密碼,程式無法自動使用。由於不會有人使用這個用戶登錄系統,所以就沒有必要分配shell。(備註:其實嚴格上說是有分配shell,只是分配的shell是/sbin/nologin這個特殊的shell,沒有任何其他功能,主要功能是防止你登陸。)

所有用戶都可以通過查看/etc/passwd查看。以下為我的系統中的用戶信息:

[hc@localhost ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
gluster:x:996:993:GlusterFS daemons:/var/run/gluster:/sbin/nologin
saslauth:x:995:76:Saslauthd user:/run/saslauthd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
unbound:x:993:988:Unbound DNS resolver:/etc/unbound:/sbin/nologin
chrony:x:992:987::/var/lib/chrony:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:991:985:User for geoclue:/var/lib/geoclue:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
sssd:x:990:984:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:989:983::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
hc:x:1000:1000:hc:/home/hc:/bin/bash
nginx:x:988:982:nginx user:/var/cache/nginx:/sbin/nologin
redis:x:987:981:Redis Database Server:/var/lib/redis:/sbin/nologin
uwsgi:x:986:980:uWSGI daemon user:/run/uwsgi:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
mongod:x:985:979:mongod:/var/lib/mongo:/bin/false

文件的每一行代表著一個用戶,每一行由冒號":"分割成7個欄位,其結構如下:

用戶名:密碼:UID:GID:用戶全名:home目錄:shell

UID:

  • UID 0 root用戶
  • UID 1~999 是占坑用戶,即一些無法登錄的用戶(以前是系統是1~499,最近剛改)
  • UID 1000 以上是正常的可登錄用戶

GID:前面說了一個用戶可以屬於多個用戶組,但這裡只有一個,表示的是專職用戶組,即一個用戶只有一個專職用戶組,其屬於其他用戶組的關聯關係存儲在/etc/group 文件中。

其中比較特殊的是密碼欄位,統一由x代替了,看/etc/passwd就知道一開始Linux是將密碼存在這個文件里的,由於考慮到/etc/passwd可以被所有人查看,所以將統一存儲到/etc/shadow文件(只有root許可權可以訪問)中,具體數據如下:

[hc@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[hc@localhost ~]$ sudo cat /etc/shadow
[sudo] password for hc: 
root:$6$yknGgCVbJAppRylr$SY.X4RUN.6dIG8fT9ofTu03/lcUzcfn4pNNeUWwkakZlH4oNF45h8eDYNxsJhz3Gm6/5ovsdJzdJMCZkKDQzs0::0:99999:7:::
bin:*:17632:0:99999:7:::
daemon:*:17632:0:99999:7:::
adm:*:17632:0:99999:7:::
lp:*:17632:0:99999:7:::
sync:*:17632:0:99999:7:::
shutdown:*:17632:0:99999:7:::
halt:*:17632:0:99999:7:::
mail:*:17632:0:99999:7:::
operator:*:17632:0:99999:7:::
games:*:17632:0:99999:7:::
ftp:*:17632:0:99999:7:::
nobody:*:17632:0:99999:7:::
systemd-network:!!:17861::::::
dbus:!!:17861::::::
polkitd:!!:17861::::::
libstoragemgmt:!!:17861::::::
rpc:!!:17861:0:99999:7:::
colord:!!:17861::::::
gluster:!!:17861::::::
saslauth:!!:17861::::::
abrt:!!:17861::::::
setroubleshoot:!!:17861::::::
rtkit:!!:17861::::::
pulse:!!:17861::::::
rpcuser:!!:17861::::::
nfsnobody:!!:17861::::::
unbound:!!:17861::::::
chrony:!!:17861::::::
qemu:!!:17861::::::
radvd:!!:17861::::::
tss:!!:17861::::::
usbmuxd:!!:17861::::::
geoclue:!!:17861::::::
ntp:!!:17861::::::
sssd:!!:17861::::::
gdm:!!:17861::::::
gnome-initial-setup:!!:17861::::::
sshd:!!:17861::::::
avahi:!!:17861::::::
postfix:!!:17861::::::
tcpdump:!!:17861::::::
hc:$6$h7GHf6NOXJgamNHh$gwsxvkU88Puv5Nt5bn14Wj7UsU0DclLoXMi/99sr36lqn4osb6oKRF/AdCszGAjsYeUl6PX66u/SSJ5MhYsMT0::0:99999:7:::
nginx:!!:17861::::::
redis:!!:17861::::::
uwsgi:!!:17861::::::
mysql:!!:17861::::::
mongod:!!:17862::::::

其結構如下:

用:分割,從左往右依次為

  • 賬戶名:賬戶名與/etc/passwd裡面的賬戶名是一一對應的關係。
  • 密碼:這裡可以看到3類,分別是奇奇怪怪的字元串、*和!!其中,奇奇怪怪的字元串就是加密過的密碼文件。*代表帳號被鎖定(即),!!表示這個密碼已經過期了。奇奇怪怪的字元串是以$6$開頭的,表明是用SHA-512加密的,$1$ 表明是用MD5加密的、$2$ 是用Blowfish加密的、$5$是用 SHA-256加密的。
  • 修改日期:這個是表明上一次修改密碼的日期與1970-1-1相距的天數密碼不可改的天數:假如這個數字是8,則8天內不可改密碼,如果是0,則隨時可以改。
  • 密碼需要修改的期限:如果是99999則永遠不用改。如果是其其他數字比如12345,那麼必須在距離1970-1-1的12345天內修改密碼,否則密碼失效。
  • 修改期限前N天發出警告:比如你在第五條規定今年6月20號規定密碼必須被修改,系統會從距離6-20號的N天前向對應的用戶發出警告。
  • 密碼過期的寬限:假設這個數字被設定為M,那麼帳號過期的M天內修改密碼是可以修改的,改了之後賬戶可以繼續使用。
  • 帳號失效日期:假設這個日期為X,與第三條一樣,X表示的日期依然是1970-1-1相距的天數,過了X之後,帳號失效。
  • 保留:被保留項,暫時還沒有被用上。

再來看看/etc/group文件:

[hc@localhost ~]$ cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:998:
printadmin:x:997:
cgred:x:996:
libstoragemgmt:x:995:
rpc:x:32:
colord:x:994:
dip:x:40:
gluster:x:993:
ssh_keys:x:992:
saslauth:x:76:
abrt:x:173:
setroubleshoot:x:991:
rtkit:x:172:
pulse-access:x:990:
pulse-rt:x:989:
pulse:x:171:
rpcuser:x:29:
nfsnobody:x:65534:
unbound:x:988:
chrony:x:987:
kvm:x:36:qemu
qemu:x:107:
radvd:x:75:
tss:x:59:
libvirt:x:986:
usbmuxd:x:113:
geoclue:x:985:
ntp:x:38:
sssd:x:984:
gdm:x:42:
gnome-initial-setup:x:983:
sshd:x:74:
avahi:x:70:
slocate:x:21:
postdrop:x:90:
postfix:x:89:
tcpdump:x:72:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
hc:x:1000:hc
nginx:x:982:
redis:x:981:
uwsgi:x:980:
mysql:x:27:
mongod:x:979:

其結構如下:

組名:用戶組密碼:GID:用戶組內的用戶名

正常的使用中很少會用到用戶組密碼,其存儲在/etc/gshadow中。

用戶組文件比較特特殊的是“”用戶組內的用戶名”,其實就是這個組下的用戶列表,每個用戶之間用逗號“,”分割;本欄位可以為空;如果欄位為空表示用戶組為GID的用戶名

普通用戶的許可權非常的低,就連在系統里安裝軟體的許可權都沒有,很多時候可以臨時給普通用戶以特權,就是sudo(在命令前添加sudo)。比如:

sudo cat /etc/shadow

完成後需要您輸入root的密碼,這樣 就可以假借root身份了,centos預設普通用戶是沒有sudo許可權的,這與主要以桌面版為主的Ubuntu和Fedora不同,如需給予用戶root特權,就需要更改/etc/sudoers文件,修改內容。

比如我為了給hc用戶增加sudo特權,就用root許可權,修改/etc/sudoers文件,在root下麵加入了hc用戶

修改前

## Allow root to run any commands anywhere 
root    ALL=(ALL)     ALL

修改後效果如下

## Allow root to run any commands anywhere 
root    ALL=(ALL)   ALL
hc      ALL=(ALL)       ALL

如果要給某個用戶組添加sudo特權則為:(與給用戶不同的是多了一個%)

## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL

另外一種方式是添加不需要輸入root密碼即有root許可權的用戶,添加方法如下:

%wheel  ALL=(ALL)   NOPASSWD: ALL

另外還可以設定到底有哪些執行許可權,具體的規則如下:(具體可看sudoers配置文件詳解

授權用戶 主機=[(切換到哪些用戶或用戶組)] [是否需要密碼驗證] 命令1,[(切換到哪些用戶或用戶組)] [是否需要密碼驗證] [命令2],[(切換到哪些用戶或用戶組)] [是否需要密碼驗證] [命令3]......

另外預設情況下第一次使用sudo時,需要輸入root密碼,如果5分鐘內再次執行sudo則無需再輸入密碼,超過5分鐘則要重新輸入。這個時間也是可以進行配置的,在sudoers中添加如下內容即可:

Defaults:用戶名 timestamp_timeout=20

其中單位是分鐘,如果設為0,則表示每次都要輸入密碼。

講解了這麼多,接下來學習下常用的shell命令

二. 常用的用戶、用戶組shell命令

用戶相關命令

useradd

功能:

用來創建用戶

語法 :

useradd 選項 用戶名

選項:

選項 描述
-d 目錄 指定用戶主目錄,如果此目錄不存在,則同時使用-m選項,可以創建主目錄,也是用戶登入時的啟始目錄
-g 用戶組 指定用戶所屬的群組
-G 用戶組 指定用戶所屬的附加群組
-u 用戶號 指定用戶id
-e 指定帳號的有效期限
-f 指定在密碼過期後多少天即關閉該帳號
-m 自動建立用戶的登入目錄
-M 不要自動建立用戶的登入目錄
-n 取消建立以用戶名稱為名的群組
-r 建立系統帳號
-s Shell文件 指定用戶登入後所使用的shell

示例1:

useradd –d /home/sam -m sam

添加了一個用戶sam,並且他的主目錄為/home/sam,沒有主目錄的時候自動創建。(/home為預設的用戶主目錄所在的父目錄)

示例2:

sudo useradd username -m -s /sbin/nologin -d /home/username -g groupname

其中:

-s /sbin/nologin 設置不能登陸
-d 設置用戶主目錄
-g 用戶組
-m 創建用戶目錄

示例3:

useradd -s /bin/sh -g group –G adm,root gem

添加一個用戶gem,使用的Shell是/bin/sh,主用戶組為group,附加組為adm,root。

userdel

功能:

用來刪除用戶

語法:

userdel 選項 用戶名

-r 把用戶的主目錄一起刪除。

usermod

功能:

用來修改用戶

語法:

usermod 選項 用戶名

示例:

usermod -s /bin/ksh -d /home/z –g developer sam

將sam用戶的Shell改為/bin/ksh,主目錄改為/home/z,用戶組為developer。

passwd

功能:

用來修改用戶口令

語法:

passwd 選項 用戶名

選項:

選項 描述
-l 鎖定口令,即禁用賬號。
-u 口令解鎖。
-d 使賬號無口令。
-f 強迫用戶下次登錄時修改口令。

示例1: 修改用戶密碼

$ passwd

Old password:******
New password:*******
Re-enter new password:*******

假設當前用戶是sam,則上面的命令修改該用戶自己的口令。

如果是超級用戶,可以用下列形式指定任何用戶的口令:

# passwd sam

New password:*******
Re-enter new password:*******

示例2:

# passwd -d sam

說明:

將用戶sam的口令刪除,這樣用戶sam下一次登錄時,系統就不再詢問口令。

示例3:

# passwd -l sam

說明:

鎖定sam用戶,使其不能登錄。

用戶組相關命令

groupadd

功能:

創建用戶組

語法:

groupadd 選項 用戶組

參數:

選項 描述
-g 指定新用戶組的組標識號(GID)。
-o 一般與-g選項同時使用,表示新用戶組的GID可以與系統已有用戶組的GID相同。

示例1:

groupadd group1

說明:
此命令向系統中增加了一個新組group1,新組的組標識號是在當前已有的最大組標識號的基礎上加1。

示例2:

groupadd -g 101 group2

說明:
此命令向系統中增加了一個新組group2,同時指定新組的組標識號是101。

groupdel

功能:

用於刪除群組。需要從系統上刪除群組時,可用groupdel(group delete)指令來完成這項工作。倘若該群組中仍包括某些用戶,則必須先刪除這些用戶後,方能刪除群組。

語法:

groupdel [群組名稱]

示例:

groupdel group2

groupmod

功能:

用於更改一個組在系統上的定義

語法:

groupmod [-g <群組識別碼> <-o>][-n <新群組名稱>][群組名稱]

選項:

選項 描述
-g --gid GID 修改組的GID號
-n --new-name NEW_GROUP 更改組的組名
-o 與-g配置使用,可以設定不唯一的組ID值
-h --help 獲得groupmod命令的使用幫助信息

例子:

假設已存在組testbed,gid為4000

示例:

groupmod -n testbed-new testbed 

將testbed組名更改為testnbed-new

groupmod -g 5000 testbed-new

將testbed-new組的組ID更改為5

三. 綜合示例

1.建立兩個用戶組group1和group2,以及三個用戶dennis、daniel、abigale,並且將前2個用戶分配在group1用戶組下,後一個分配在group2用戶組下,並給dennis設置密碼

輸出:

[root@localhost ~]# groupadd group1
[root@localhost ~]# groupadd group2
[root@localhost ~]# useradd -g group1 dennis
[root@localhost ~]# useradd -g group1 daniel
[root@localhost ~]# useradd -g group2 abigale
[root@localhost ~]# passwd dennis
Changing password for user dennis.
New password: 
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost ~]# tail -3  /etc/passwd
dennis:x:1000:1000::/home/dennis:/bin/bash
daniel:x:1001:1000::/home/daniel:/bin/bash
abigale:x:1002:1001::/home/abigale:/bin/bash
[root@localhost ~]# tail -3  /etc/group
docker:x:995:root
group1:x:1000:
group2:x:1001:
[root@localhost ~]# cd /home/
[root@localhost home]# ll
total 0
drwx------. 2 abigale group2  62 Nov 29 00:36 abigale
drwx------. 2 daniel  group1  62 Nov 29 00:36 daniel
drwx------. 2 dennis  group1  62 Nov 29 00:36 dennis

2.改變abigale的用戶組由group2變為group1

輸出:

[root@localhost home]# usermod -g group1 abigale
[root@localhost home]# ll
total 0
drwx------. 2 abigale group1  62 Nov 29 00:36 abigale
drwx------. 2 daniel  group1  62 Nov 29 00:36 daniel
drwx------. 2 dennis  group1  62 Nov 29 00:36 dennis
[root@localhost home]# tail -3  /etc/passwd
dennis:x:1000:1000::/home/dennis:/bin/bash
daniel:x:1001:1000::/home/daniel:/bin/bash
abigale:x:1002:1000::/home/abigale:/bin/bash

參考文章:
https://www.cnblogs.com/duhuo/p/5892513.html
https://blog.csdn.net/chanrayli/article/details/78998941


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言:因windows10的更新,最近很多朋友會遇到mstsc遠程連接桌面報錯: windows10企業版解決方式: 按“win+R”,運行 gpedit.msc, 找:“電腦配置”->“管理模板”->“系統”->“憑據分配”,這裡面有個“加密 Oracle 修正”,按圖修改即可; windows ...
  • 【轉載】 Windows Subsystem for Linux -- Pico Process Overview Overview This post discusses pico processes, the foundation of WSL. It explains how pico pro ...
  • Zabbix簡介 Zabbix是一個高度集成的企業級開源網路監控解決方案,與Cacti、nagios類似,提供分散式監控以及集中的web管理界面。zabbix具備常見商業監控軟體所具備的功能,例如主機性能監控,網路設備性能監控,資料庫性能監控,ftp等通用協議的監控,能夠靈活利用可定製警告機制,允許 ...
  • 基於linux 4.20 rc3源碼分析 1 .掃描所有PCI設備並檢測,填充設備結構體 其中pci_setup_device(dev)函數對掛載在該匯流排上所有的設備進行檢測並獲取相關數據,並設備信息進行填充。對於有些需特殊處理的設備也進行了特殊處理,達到儘量相容新老設備的目的。 1.1查詢設備廠商 ...
  • 目錄相關: 文件屬性: stat命令: vim 查看文件內容 more命令 echo命令 特殊符號 移動命令 刪除命令 查找命令 管道命令 head,tail命令 sed sed sed是一種流編輯器,它是文本處理中非常中的工具,能夠完美的配合正則表達式使用,功能不同凡響。處理時,把當前處理的行存儲 ...
  • 微服務架構中我們使用了必須的四個組件, `config gateway auth` 其中 依賴 ,`auth gateway auth` 這樣就確定了四個組件的啟動順序為 , 既然有依賴,那就肯定會使用 參數,但是這個參數只會判斷容器啟動沒有,並不會去判斷容器是否能用,就像你創建了一個nginx鏡像 ...
  • 1 linux的分頁機制 1.1 四級分頁機制 前面我們提到Linux內核僅使用了較少的分段機制,但是卻對分頁機制的依賴性很強,其使用一種適合32位和64位結構的通用分頁模型,該模型使用四級分頁機制,即 頁全局目錄(Page Global Directory) 頁上級目錄(Page Upper Di ...
  • linux 安裝 powershell Intro powershell 已經推出了一個 Powershell Core, 版本號對應 Powershell 6.x,可以跨平臺,支持 Linux 和 mac. 這使得對於熟練使用 Powershell 進行開發運維的一些開發者來說無疑是個福音。 今天 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...