【Linux相識相知】文件查找(locate/find)

来源:http://www.cnblogs.com/liubinsh/archive/2017/07/23/7223631.html
-Advertisement-
Play Games

Linux文件查找,詳細的介紹了locate和find命令的使用 ...


在用linux操作系統的時候,當我們忘記之前某個文件存儲的位置,但是知道其文件名或者模糊的知道其文件名,我們都可以通過文件查找工具來查找,linux提供兩種常用的查找工具,locate和find,在日常使用中後者比前者較前者功能更強大更具有實時性,下麵我們就這兩種工具來談一談她們的使用方法。

 

Locate

locate是基於實現構建好的索引庫(索引庫可以理解成文件路徑的集合),索引庫的位置放在/var/lib/mlocate/mlocate.db文件裡面,系統一般一天會自動更新一次,也可以使用updatedb手動更新,要註意的是,索引庫的構建過程需要遍歷整個文件系統,非常消耗系統資源。

locate的特點是查找的速度快,比find快很多,因為它只在查找索引庫,而find會遍歷整個文件系統的路徑。快的好處自然也給locate帶來的缺點,就是它並非是實時查找,意思就是你如果剛剛創建了一個文件,但是你忘記了其路徑,只記得其名稱,那麼這個時候就不建議使用locate,因為索引資料庫沒有更新,你使用locate查不到,除非你走運,定期更新的時間剛好在創建文件完文件之後,locate在匹配文件名的時候是模糊匹配。

下麵我們就來介紹一下locate的用法:

locate

NAME:通過文件名查找文件
SYNOPSIS:locate [OPTION]... PATTERN...
-b:只匹配路徑中的基名;
-c:輸出符合條件文件的數目
-r:使用基本正則表達式
--regex:使用擴展正則表達式
-i:忽略大小寫
-q:安靜模式,不會有任何輸出

舉例1:查找含有"passwd"的文件名

[root@localhost ~]# locate  passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
/usr/bin/grub2-mkpasswd-pbkdf2
......(省略)
/usr/share/doc/passwd-0.79/AUTHORS
/usr/share/doc/passwd-0.79/COPYING
/usr/share/doc/passwd-0.79/ChangeLog
/usr/share/doc/passwd-0.79/NEWS
/usr/share/vim/vim74/ftplugin/passwd.vim
/usr/share/vim/vim74/syntax/passwd.vim

我們會發現,非基名中存在passwd也會被匹配出來,我們可以使用"-b"選項來匹配:

[root@localhost ~]# locate -b  passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
/usr/bin/grub2-mkpasswd-pbkdf2
/usr/bin/kdepasswd
/usr/bin/kpasswd
/usr/bin/lppasswd
/usr/bin/passwd
/usr/bin/vncpasswd
......
/usr/share/man/zh_CN/man8/chpasswd.8.gz
/usr/share/man/zh_CN/man8/smbpasswd.8.gz
/usr/share/man/zh_TW/man8/chpasswd.8.gz
/usr/share/ruby/webrick/httpauth/htpasswd.rb
/usr/share/vim/vim74/ftplugin/passwd.vim
/usr/share/vim/vim74/syntax/passwd.vim
看輸出的顯示結果,只有基名中含有"passwd"的才會被匹配 舉例2:查找只有基名中含有"passwd"的文件名的數目
[root@localhost ~]# locate -bc  passwd
155

 舉例3:查找基名中只有"passwd"文件的文件

[root@localhost ~]# locate -br "\<passwd$"
/etc/passwd
/etc/pam.d/passwd
/usr/bin/passwd
/usr/share/bash-completion/completions/passwd

updatedb的配置文件在/etc/updatedb.conf

PRUNE_BIND_MOUNTS = "yes"
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs"
PRUNENAMES = ".git .hg .svn"
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp"

PRUNE_BIND_MOUNTS:表示是否限制搜索

PRUNEFS:所列的文件系統,查找的時候不進行查找

PRUNENAMES:所列的尾碼名不進行查找

PRUNEPATHS:所列的文件路徑下的文件不進行查找

實時性檢測

[root@localhost etc]# touch mypasswd
[root@localhost etc]# 
[root@localhost etc]# locate mypasswd
[root@localhost etc]# 
[root@localhost etc]# updatedb
[root@localhost etc]# 
[root@localhost etc]# locate mypasswd
/etc/mypasswd

在etc下我們創建mypasswd,立馬使用locate命令查找並不能查找,使用updatedb之後更新之後索引資料庫之後就可以查找到了。

 

find

通過直面意思我們就知道find就是“查找”的意思,find的是一個實時查找命令,它會在查找的時候會遍歷指定起始路徑下文件系統層級結構完成文件查找,所以其缺點就是查找的速度要比locate慢。

下麵我們就要介紹一下find的使用方法:

NAME:遞歸地在層次目錄中處理文件
SYNOPSIS:find  [OPTIONS]  [查找起始路徑]  [查找條件]  [處理動作]
查找路徑:可以指定搜索目標的其實路徑,預設為當前目錄
查找條件:可以指定查找標準,可以根據文件名、大小、類型、從屬關係、許可權等匹配
處理動作:對符合查找條件的文件做出操作,比如刪除等,預設行為為至標準輸出

find的選項不常用,瞭解可使用man find來查看,下麵主要來說明一下查找條件和處理動作,find的狀態返回值為布爾值,查找的到則返回"0",查找不到則返回大於"0"的數字。

查找條件:

1.根據文件名查找

-name  "pattern"
-iname "pattern"   #支持的通配符的模式,i為不區分大小寫
-regex "pattern"   #基於正則表達式模式查找文件,註意這裡匹配的不是文件本身,而是包含這個文件路徑

舉例:

[root@localhost etc]# find /etc/ -name "passwd"    #搜索/etc目錄下含有passwd的文件
/etc/pam.d/passwd
/etc/passwd
[root@localhost etc]# find /etc/ -iname "passwd"   #搜索/etc目錄下含有passwd的文件,忽略字元大小寫
/etc/pam.d/passwd
/etc/passwd
/etc/Passwd
[root@localhost etc]# find /etc/ -iname "passwd[0-9]"  #搜索/etc目錄下含有passwd且後面還有0-9任意一個數字的文件
/etc/passwd1
[root@localhost etc]# find /etc/ -regex '/etc/passwd.?'  #搜索/etc目錄下含基名以passwd開頭且後面可以有任意字元也可以沒有的文件
/etc/passwd
/etc/passwd-
/etc/passwd1

 

2.根據文件從屬關係查找

-user USERNAME:查找屬主為指定用戶的文件
-group GROUPNAME:查找屬組為指定組的文件
-uid UID:查找屬主為指定UID的文件
-gid GID:查找屬組為指定的GID的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件

舉例:

[root@localhost ~]# find /tmp/ -user frank -ls   #輸出tmp下屬主是frank的文件,-ls後面再講
9336543    0 drwx------   2 frank    frank          27 7月 16 04:46 /tmp/kde-frank
9357728    4 -rw-rw-r--   1 frank    frank         132 7月 16 04:46 /tmp/kde-frank/xauth-1000-_0
9357736    0 drwx------   2 frank    frank          34 7月 16 04:47 /tmp/akonadi-frank.yFqCJF
9357758    0 srwxrwxr-x   1 frank    frank           0 7月 16 04:46 /tmp/akonadi-frank.yFqCJF/akonadiserver.socket
27750615    0 drwx------   2 frank    frank           6 7月 16 04:47 /tmp/.esd-1000
[root@localhost ~]# find /tmp/ -group frank -ls  #輸出/tmp目錄下屬組是frank的文件
9336543    0 drwx------   2 frank    frank          27 7月 16 04:46 /tmp/kde-frank
9357728    4 -rw-rw-r--   1 frank    frank         132 7月 16 04:46 /tmp/kde-frank/xauth-1000-_0
9357736    0 drwx------   2 frank    frank          34 7月 16 04:47 /tmp/akonadi-frank.yFqCJF
9357758    0 srwxrwxr-x   1 frank    frank           0 7月 16 04:46 /tmp/akonadi-frank.yFqCJF/akonadiserver.socket
27750615    0 drwx------   2 frank    frank           6 7月 16 04:47 /tmp/.esd-1000
[root@localhost ~]# find /tmp/ -uid 1000 #顯示/tmp下uid為1000的文件
/tmp/kde-frank
/tmp/kde-frank/xauth-1000-_0
/tmp/akonadi-frank.yFqCJF
/tmp/akonadi-frank.yFqCJF/akonadiserver.socket
/tmp/.esd-1000
[root@localhost ~]# find /tmp/ -nouser  -ls  #顯示/tmp下沒有屬主的文件,如果一個用戶創建一個文件之後,用戶被刪除,則顯示為原來的uid和gid,不會顯示屬組合屬主
375722    0 -rw-rw-r--   1 1003     1003            0 7月 23 00:08 /tmp/mygrp.txt

 

3.根據文件類型查找

-type TYPE
TYPE可以為以下:
f:普通文件
d:目錄文件
l:符號鏈接
b:塊設備文件
c:字元設備文件
p:管道文件
s:套接字文件

舉例:

[root@localhost ~]# find /dev/ -type b  #查找dev目錄下的塊設備文件
/dev/dm-2
/dev/dm-1
/dev/dm-0
/dev/sr0
/dev/sda2
/dev/sda1
/dev/sda

 

4.根據文件大小查找

一般格式為   -size  [+|-]#UNIT     UNIT常用單位為:k,M,G

-size  #UNIT:匹配的大小範圍是#及大於#-1的文件

舉例:匹配3K的大小,大於2K及小於等於3K的都會被匹配

[root@localhost ~]# ll -h
總用量 16K
-rw-------. 1 root root 2.1K 7月  16 04:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 2.1K 7月  16 04:45 initial-setup-ks.cfg
-rw-r--r--. 1 root root  555 7月  19 10:04 TEST
-rw-------. 1 root root 3.0K 7月  23 00:23 test.txt
[root@localhost ~]# find  -size 3k -ls
27734414    4 -rw-------   1 root     root         2094 7月 16 04:45 ./anaconda-ks.cfg
27734452    4 -rw-r--r--   1 root     root         2142 7月 16 04:45 ./initial-setup-ks.cfg
25795843    4 -rw-------   1 root     root         3070 7月 23 00:23 ./test.txt

-size -#UNIT:匹配的範圍是文件大小大於0且小於等於#-1的文件

舉例:

[root@localhost ~]# find  -size -3k -ls
25165889    0 dr-xr-x---   6 root     root          261 7月 23 00:23 .
27728080    4 -rw-r--r--   1 root     root           18 12月 29  2013 ./.bash_logout
27728081    4 -rw-r--r--   1 root     root          176 12月 29  2013 ./.bash_profile
27728082    4 -rw-r--r--   1 root     root          176 12月 29  2013 ./.bashrc
27728083    4 -rw-r--r--   1 root     root          100 12月 29  2013 ./.cshrc
27728084    4 -rw-r--r--   1 root     root          129 12月 29  2013 ./.tcshrc
1327848    0 drwx------   3 root     root           25 7月 16 04:45 ./.dbus
9336529    0 drwx------   2 root     root           48 7月 16 04:45 ./.dbus/session-bus
9336530    4 -rw-r--r--   1 root     root          462 7月 16 04:45 ./.dbus/session-bus/6155eeadc72c4d45b9ead1cf2a8c65a0-9
....(省略)

-size +#UNIT:匹配的是大於#的文件

[root@localhost ~]# ll -ah    
總用量 52K
dr-xr-x---.  6 root root  261 7月  23 00:23 .
dr-xr-xr-x. 17 root root  233 7月  16 04:44 ..
-rw-------.  1 root root 2.1K 7月  16 04:45 anaconda-ks.cfg
-rw-------.  1 root root 4.8K 7月  19 10:14 .bash_history
-rw-r--r--.  1 root root   18 12月 29 2013 .bash_logout
-rw-r--r--.  1 root root  176 12月 29 2013 .bash_profile
-rw-r--r--.  1 root root  176 12月 29 2013 .bashrc
drwx------.  4 root root   31 7月  16 04:46 .cache
drwxr-xr-x.  3 root root   40 7月  16 04:46 .config
-rw-r--r--.  1 root root  100 12月 29 2013 .cshrc
drwx------.  3 root root   25 7月  16 04:45 .dbus
-rw-r--r--.  1 root root 2.1K 7月  16 04:45 initial-setup-ks.cfg
drwxr-xr-x.  3 root root  123 7月  16 04:45 .kde
-rw-r--r--.  1 root root  129 12月 29 2013 .tcshrc
-rw-r--r--.  1 root root  555 7月  19 10:04 TEST
-rw-------.  1 root root 3.0K 7月  23 00:23 test.txt
-rw-------.  1 root root 6.4K 7月  23 00:23 .viminfo
[root@localhost ~]# find -size +3k      #匹配大於3k的文件
./.config/Trolltech.conf
./.bash_history
./.viminfo

 

5.根據時間戳查找

可根據天或者分鐘查找

根據天:
-atime n:對文件的最近一次訪問是在 n*24 小時之前
-mtime n:對文件數據的最近一次修改是在 n*24 小時之前
-ctime n:對文件狀態的最近一次修改是在 n*24 小時之前,當元數據修改時
根據分鐘:
-amin n:對文件的最近一次訪問是在n分鐘之前
-mmin n:對文件數據的最近一次修改是在n分鐘之前
-cmin n:對文件狀態的最近一次修改是在n分鐘之前,當元數據修改時

同時也支持 "-atime  [+|-]#"

情景1:find -atime 1 :如下圖,如果現在時間是0:56分,那麼查找1天前訪問過的文件為哪些,查找的就是2017-7-21-0:56(不包含)到2017-7-21-00:56(包含)分訪問的文件,

情景2:find  -atime -1:使用"-",查找的是1天之內,如下圖,如果現在是0:56,則不包括2017-7-22-0:56

 

情景3:find -atime +1:使用符號"+",表示的是查找1+1之前訪問過的文件,如果現在0:56,則2017-7-21-00:56(包括00:56)之前訪問過的文件才會被匹配

 

其他的ctime、mtime和分鐘的查找類似,這裡就不再敖述了。測試可以使用touch命令修改時間戳的方式來嘗試

touch -t 201707210130  mytime.txt 

 

 6.根據許可權查找

格式:-perm [/|-]mode
mode:精確匹配許可權
/mode:任何一類用戶(u,g,o)的許可權中的任何一位(r,w,x)符合條件即滿足,9位許可權之間存在“或”關係
-mode:每一類用戶(u,g,o)的許可權每一位同時符合條件即滿足;9位許可權之間存在“與”關係

 舉例1:精確匹配/tmp/myper目錄下許可權是411的文件

[root@localhost ~]# find /tmp/myper/ -perm 422 -ls
654578    0 -r---w--w-   1 root     root            0 7月 23 07:32 /tmp/myper/myper2

 舉例2:匹配/tmp/myper其他用戶有執行許可權的文件

[root@localhost ~]# find /tmp/myper/ -perm /001 -ls
18772160    0 drwxr-xr-x   2 root     root           62 7月 23 07:38 /tmp/myper/
654577    0 -rw---x--x   1 root     root            0 7月 23 07:32 /tmp/myper/myper1
654579    0 ---xr-xr-x   1 root     root            0 7月 23 07:32 /tmp/myper/myper3
654580    0 -rwxr-xr-x   1 root     root            0 7月 23 07:32 /tmp/myper/myper4

 舉例3:匹配/tmp/myper下user許可權至少可讀,group和others許可權至少可以執行的文件

[root@localhost ~]# find /tmp/myper/ -perm -411 -ls
18772160    0 drwxr-xr-x   2 root     root           62 7月 23 07:38 /tmp/myper/
654577    0 -rw---x--x   1 root     root            0 7月 23 07:32 /tmp/myper/myper1
654580    0 -rwxr-xr-x   1 root     root            0 7月 23 07:32 /tmp/myper/myper4

 

 處理動作:

-print:輸出至標準輸出,預設選項
-ls:類似對查到的文件執行"ls -l"命令
-delete:刪除查到的文件
-fls /PATE/TO/SOMEFILE:把查到的所有文件的長格式信息保存至指定的文件
-ok COMMAND {} \; :對查到的每個文件執行由COMMAND表示的命令,每次操作都由用戶確認
-exec COMMAND {} \; :對查到的每個文件執行由COMMAND表示的命令,無需用戶確認

find傳遞查到的文件路徑至後面的命令時,是先查找所有符合條件的路徑,並一次性傳遞給後面的命令的,但是有些命令不能接受過長的參數,此時命令會執行失敗,可以使用以下方法:

find  | xargs COMMAND

xargs可以讀取標準輸出的內容,並以空白字元或者斷行字元作為分隔符,分隔為arguments,然後一一傳遞給COMMAND執行

舉例:查看符合條件文件的文件元數據

[root@localhost ~]# find /tmp/myper/ -perm -411  |    stat
stat: 缺少操作數
Try 'stat --help' for more information.
[root@localhost ~]# find /tmp/myper/ -perm -411  |  xargs  stat
  文件:"/tmp/myper/"
  大小:62            塊:0          IO 塊:4096   目錄
設備:fd00h/64768d    Inode:18772160    硬鏈接:2
許可權:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:user_tmp_t:s0
最近訪問:2017-07-23 07:38:40.570675351 +0800
最近更改:2017-07-23 07:38:33.192894947 +0800
最近改動:2017-07-23 07:38:33.192894947 +0800
創建時間:-
  文件:"/tmp/myper/myper1"
  大小:7             塊:8          IO 塊:4096   普通文件
設備:fd00h/64768d    Inode:654577      硬鏈接:1
許可權:(0611/-rw---x--x)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:user_tmp_t:s0
最近訪問:2017-07-23 07:58:31.699745976 +0800
最近更改:2017-07-23 07:57:38.304747287 +0800
最近改動:2017-07-23 07:57:38.304747287 +0800
創建時間:-
  文件:"/tmp/myper/myper4"
  大小:7             塊:8          IO 塊:4096   普通文件
設備:fd00h/64768d    Inode:654580      硬鏈接:1
許可權:(0755/-rwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:user_tmp_t:s0
最近訪問:2017-07-23 07:58:31.699745976 +0800
最近更改:2017-07-23 07:57:53.229457221 +0800
最近改動:2017-07-23 07:57:53.229457221 +0800
創建時間:-

 

 擴展小特性:

在查找的時候多個條件之間的關係: 與:-a  ,預設的關係 或:-o   ,滿足一個條件即可 非:-not或者!  ,條件取反 有以下表達式: !A -a !B = !(A -o B) !A -o !B = !(A -a B)

 

小練習: 練習1:找出/tmp目錄下屬主為非root的所有文件
find /tmp/  -not -user root  -ls
View Code

 練習2:找出/tmp目錄下文件名中不包含fstab字元串的文件

find /tmp/ -not -name fstab
View Code

 練習3:找出/tmp目錄下屬主為非root,而且文件名不包含fstab字元串的文件

find /tmp/ ! \( -user root -o -name fstab \)
View Code

 練習4:查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄

find  /var/ -user root -a -group mail -ls
View Code

 練習5:查找/usr目錄下不屬於用戶root, bin或hadoop的所有文件或目錄;用兩種方法

find /usr/ -not -user root -a -not -user bin -a -not -user hadoop
find /usr/ -not \( -user root -o -user bin -o -user hadoop \) 
View Code

 練習6:查找/etc目錄下最近一周內其內容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄

find /etc/ -mtime 7  -a  -not -user root -a -not -user hadoop 
View Code

 練習7:查找當前系統上沒有屬或屬組,且最近一周內曾被訪問過的文件或目錄

find  /  \( -nouser -o -nogroup \)  -atime  -7 
View Code

 練習8:查找/etc目錄下大於1M且類型為普通文件的所有文件

find /etc/ -size +1M  -type f  -exec ls -lh {} \;
View Code

 練習9:查找/etc目錄下所有用戶都沒有寫許可權的文件

find /etc/  -not  -perm  /222
View Code

 練習10:查找/etc目錄至少有一類用戶沒有執行許可權的文件

find /etc/ -not  -perm  -111
View Code

 練習11:查找/etc/init.d/目錄下,所有用戶都有執行許可權,且其它用戶有寫許可權的所有文件

find /etc/init.d/  -perm  -113 
View Code

 


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

-Advertisement-
Play Games
更多相關文章
  • 前言 因為比賽的限制是使用Hadoop2.7.2,估在此文章下麵的也是使用Hadoop2.7.2,具體下載地址為 "Hadoop2.7.2" 開始的準備 目前在我的實驗室上有三台Linux主機,因為需要參加一個關於spark數據分析的比賽,所以眼見那幾台伺服器沒有人用,我們團隊就拿來配置成集群。具體 ...
  • 一.環境: centos release 6.9 python 2.7.13 二.安裝工具bypy sudo pip install bypy 三.使用bypy 3.1 授權 3.2 上傳文件 bypy upload (在某個文件夾下就會將文件夾下的內容全部上傳到雲端) 3.3 下載文件 bypy ...
  • 把當前文件夾的文件名用","連接成一行,或者將多行轉變為一行 將行逆序輸出 刪除 開頭的註釋行 去掉每行開頭4個字元 對文件第一列進行統計 對文件第四列用":"切割成兩列並將最後一列結果+1,然後輸出全部列 對文件第二列求均值 實現DNA序列反向互補 某一行插入另外一個文件的內容 對一個文件按照第一 ...
  • 用戶和用戶組及許可權管理: 一:基本概念 linux是一個多任務(multi-task)多用戶(multi-user)的操作系統,每個用戶和用戶組都有自己的ID號UID GID,每個用戶都有自己的家目錄不能隨意訪問其他用戶的家目錄,管理員root除外。 用戶的分類:(以centos7.x為例) 管理員 ...
  • 常說Linux上有文本處理的三劍客,grep、sed和awk,本文就grep做出詳細的描述,並引出正則表達式。 grep 舉例1:匹配/etc/passwd下有frank的行 舉例2:匹配/etc/passwd下有frank的行,忽略大小寫 舉例3:匹配/etc/passwd下不能被bash匹配的行 ...
  • 已經那麼多年工作下來了,結果裝linux還是那麼 的費勁! 裝的是純凈版Ubuntu16.04版本,17.04怕不穩定就沒裝, 裝了發現VmwareTools是暗的,以前也遇到過這個問題,但是真的忘記了怎麼解決了。 弄了半天其實關鍵就是一句話,找到你Vmware的安裝目錄,裡面有個linux.iso ...
  • 度過了難熬的考試月時期之後,最近和小伙伴一起參加的的比賽進入了緊張的準備時期。在進行工作的時候,發現有很多基礎的知識點,自己不是很清楚以及瞭解,所以在想,要不就邊學習的時候邊寫下學習日記,以供自己後來不懂的時候查看,同時以希望自己的一些所得能幫助到其他人。共勉之~ ...
  • CentOS 6.7/Linux下設置IP地址 1:臨時修改: 1.1:修改IP地址 # ifconfig eth0 192.168.2.104 1.2:修改網關地址 # route add default gw 192.168.2.1 dev eth0 1.3:修改DNS # echo "name ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...