Linux lsof命令詳解

lsof(List Open Files) 用于查看你進程開打的文件,打開文件的進程,進程打開的端口(TCP、UDP),找回/恢復刪除的文件。是十分方便的系統監視工具,因為lsof命令需要訪問核心內存和各種文件,所以需要root用戶執行。

在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件(lsof強大原因)。所以如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP) 套接字等,系統在后臺都為該應用程序分配了一個文件描述符,無論這個文件的本質如何,該文件描述符為應用程序與基礎操作系統之間的交互提供了通用接口。因 為應用程序打開文件的描述符列表提供了大量關于這個應用程序本身的信息,因此通過lsof工具能夠查看這個列表對系統監測以及排錯將是很有幫助的。?

選項

 1 -a:列出打開文件存在的進程;
 2 -c<進程名>:列出指定進程所打開的文件;
 3 -g:列出GID號進程詳情;
 4 -d<文件號>:列出占用該文件號的進程;
 5 +d<目錄>:列出目錄下被打開的文件;
 6 +D<目錄>:遞歸列出目錄下被打開的文件;
 7 -n<目錄>:列出使用NFS的文件;
 8 -i<條件>:列出符合條件的進程。(46、協議、:端口、 @ip )
 9 -p<進程號>:列出指定進程號所打開的文件;
10 -u:列出UID號進程詳情;
11 -h:顯示幫助信息;
12 -v:顯示版本信息。

實例

 1 lsof
 2 command     PID USER   FD      type             DEVICE     SIZE       NODE NAME
 3 init          1 root  cwd       DIR                8,2     4096          2 /
 4 init          1 root  rtd       DIR                8,2     4096          2 /
 5 init          1 root  txt       REG                8,2    43496    6121706 /sbin/init
 6 init          1 root  mem       REG                8,2   143600    7823908 /lib64/ld-2.5.so
 7 init          1 root  mem       REG                8,2  1722304    7823915 /lib64/libc-2.5.so
 8 init          1 root  mem       REG                8,2    23360    7823919 /lib64/libdl-2.5.so
 9 init          1 root  mem       REG                8,2    95464    7824116 /lib64/libselinux.so.1
10 init          1 root  mem       REG                8,2   247496    7823947 /lib64/libsepol.so.1
11 init          1 root   10u     FIFO               0,17                1233 /dev/initctl
12 migration     2 root  cwd       DIR                8,2     4096          2 /
13 migration     2 root  rtd       DIR                8,2     4096          2 /
14 migration     2 root  txt   unknown                                        /proc/2/exe
15 ksoftirqd     3 root  cwd       DIR                8,2     4096          2 /
16 ksoftirqd     3 root  rtd       DIR                8,2     4096          2 /
17 ksoftirqd     3 root  txt   unknown                                        /proc/3/exe
18 migration     4 root  cwd       DIR                8,2     4096          2 /
19 migration     4 root  rtd       DIR                8,2     4096          2 /
20 migration     4 root  txt   unknown                                        /proc/4/exe
21 ksoftirqd     5 root  cwd       DIR                8,2     4096          2 /
22 ksoftirqd     5 root  rtd       DIR                8,2     4096          2 /
23 ksoftirqd     5 root  txt   unknown                                        /proc/5/exe
24 events/0      6 root  cwd       DIR                8,2     4096          2 /
25 events/0      6 root  rtd       DIR                8,2     4096          2 /
26 events/0      6 root  txt   unknown                                        /proc/6/exe
27 events/1      7 root  cwd       DIR                8,2     4096          2 /

每行顯示一個打開的文件,若不指定條件默認將顯示所有進程打開的所有文件。lsof輸出各列信息的意義如下: ?
COMMAND:進程的名稱?
PID:進程標識符?
USER:進程所有者?
FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等?
TYPE:文件類型,如DIR、REG等?
DEVICE:指定磁盤的名稱?
SIZE:文件的大小?
NODE:索引節點(文件在磁盤上的標識)?
NAME:打開文件的確切名稱?
其中FD 列中的文件描述符cwd?值表示應用程序的當前工作目錄,這是該應用程序啟動的目錄,除非它本身對這個目錄進行更改。txt 類型的文件是程序代碼,如應用程序二進制文件本身或共享庫,如上列表中顯示的 /sbin/init 程序。其次數值表示應用程序的文件描述符,這是打開該文件時返回的一個整數。如上的最后一行文件/dev/initctl,其文件描述符為 10。u 表示該文件被打開并處于讀取/寫入模式,而不是只讀(R) 或只寫 (w) 模式。同時還有大寫 的W 表示該應用程序具有對整個文件的寫鎖。該文件描述符用于確保每次只能打開一個應用程序實例。初始打開每個應用程序時,都具有三個文件描述符,0、1、2, 分別表示標準輸入、輸出和錯誤流。所以大多數應用程序所打開的文件的 FD 都是從 3 開始。 ?
Type :?文件和目錄分別稱為 REG 和 DIR(在 Solaris 中,稱為 VREG 和 VDIR)。而CHR 和 BLK,分別表示字符和塊設備; 或者 UNIX、FIFO 和 IPv4,分別表示 UNIX 域套接字、先進先出 (FIFO) 隊列和網際協議 (IP) 套接字。

 1 文件描述符列表:
 2 
 3 cwd:表示current work dirctory,即:應用程序的當前工作目錄,這是該應用程序啟動的目錄,除非它本身對這個目錄進行更改
 4 txt:該類型的文件是程序代碼,如應用程序二進制文件本身或共享庫,如上列表中顯示的 /sbin/init 程序
 5 lnn:library references (AIX);
 6 er:FD information error (see NAME column);
 7 jld:jail directory (FreeBSD);
 8 ltx:shared library text (code and data);
 9 mxx :hex memory-mapped type number xx.
10 m86:DOS Merge mapped file;
11 mem:memory-mapped file;
12 mmap:memory-mapped device;
13 pd:parent directory;
14 rtd:root directory;
15 tr:kernel trace file (OpenBSD);
16 v86  VP/ix mapped file;
17 0:表示標準輸出
18 1:表示標準輸入
19 2:表示標準錯誤
20 
21 一般在標準輸出、標準錯誤、標準輸入后還跟著文件狀態模式:
22 
23 u:表示該文件被打開并處于讀取/寫入模式。
24 r:表示該文件被打開并處于只讀模式。
25 w:表示該文件被打開并處于。
26 空格:表示該文件的狀態模式為unknow,且沒有鎖定。
27 -:表示該文件的狀態模式為unknow,且被鎖定。
28 
29 同時在文件狀態模式后面,還跟著相關的鎖:
30 
31 N:for a Solaris NFS lock of unknown type;
32 r:for read lock on part of the file;
33 R:for a read lock on the entire file;
34 wfor a write lock on part of the file;(文件的部分寫鎖)
35 W:for a write lock on the entire file;(整個文件的寫鎖)
36 u:for a read and write lock of any length;
37 U:for a lock of unknown type;
38 x:for an SCO OpenServer Xenix lock on part      of the file;
39 X:for an SCO OpenServer Xenix lock on the      entire file;
40 space:if there is no lock.
 1 文件類型:
 2 
 3 DIR:表示目錄。
 4 CHR:表示字符類型。
 5 BLK:塊設備類型。
 6 UNIX: UNIX 域套接字。
 7 FIFO:先進先出 (FIFO) 隊列。
 8 IPv4:網際協議 (IP) 套接字。
 9 DEVICE:指定磁盤的名稱
10 SIZE:文件的大小
11 NODE:索引節點(文件在磁盤上的標識)
12 NAME:打開文件的確切名稱

常用參數

lsof語法格式是:
lsof [options] filename

 1 lsof abc.txt 顯示開啟文件abc.txt的進程
 2 lsof -c abc 顯示出以字母 abc 開頭進程現在打開的文件
 3 lsof -p 1234 列出進程號為1234的進程所打開的文件
 4 lsof -g gname/gid 顯示歸屬gname或gid的進程情況
 5 lsof -u uname/uid 顯示歸屬uname或uid的進程情況
 6 lsof +d /usr/local/ 顯示目錄下被進程開啟的文件
 7 lsof +D /usr/local/ 同上,但是會搜索目錄下的目錄,時間較長
 8 lsof -d 4 顯示使用fd為4的進程
 9 lsof -i 用以顯示符合條件的進程情況
10 lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
11   46 --> IPv4 or IPv6
12   protocol --> TCP or UDP
13   hostname --> Internet host name
14   hostaddr --> IPv4地址
15   service --> /etc/service中的 service name (可以不止一個)
16   port --> 端口號 (可以不止一個)

實例

復制代碼
lsof `which httpd` //那個進程在使用apache的可執行文件
lsof /etc/passwd //那個進程在占用/etc/passwd
lsof /dev/hda6 //那個進程在占用hda6
lsof /dev/cdrom //那個進程在占用光驅
lsof -c sendmail //查看sendmail進程的文件使用情況
lsof -c courier -u ^zahn //顯示出那些文件被以courier打頭的進程打開,但是并不屬于用戶zahn
lsof -p 30297 //顯示那些文件被pid為30297的進程打開
lsof -D /tmp 顯示所有在/tmp文件夾中打開的instance和文件的進程。但是symbol文件并不在列lsof -u1000 //查看uid是100的用戶的進程的文件使用情況
lsof -utony //查看用戶tony的進程的文件使用情況
lsof -u^tony //查看不是用戶tony的進程的文件使用情況(^是取反的意思)
lsof -i //顯示所有打開的端口
lsof -i:80 //顯示所有打開80端口的進程
lsof -i -U //顯示所有打開的端口和UNIX domain文件
lsof -i UDP@[url]www.akadia.com:123 //顯示那些進程打開了到www.akadia.com的UDP的123(ntp)端口的鏈接
lsof -i tcp@ohaha.ks.edu.tw:ftp -r //不斷查看目前ftp連接的情況(-r,lsof會永遠不斷的執行,直到收到中斷信號,+r,lsof會一直執行,直到沒有檔案被顯示,缺省是15s刷新)
lsof -i tcp@ohaha.ks.edu.tw:ftp -n //lsof -n 不將IP轉換為hostname,缺省是不加上-n參數
復制代碼

查看打開22端口的所有進程

# lsof -i :22 
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME 
sshd    1409 root    3u  IPv6   5678       TCP *:ssh (LISTEN)  

查看所屬root用戶進程所打開的文件類型為txt的文件

復制代碼
# lsof -a -u root -d txt 
COMMAND    PID USER  FD      TYPE DEVICE    SIZE    NODE NAME 
init       1    root txt       REG    3,3   38432 1763452 /sbin/init 
mingetty  1632 root txt       REG    3,3   14366 1763337 /sbin/mingetty 
mingetty  1633 root txt       REG    3,3   14366 1763337 /sbin/mingetty 
mingetty  1634 root txt       REG    3,3   14366 1763337 /sbin/mingetty 
mingetty  1635 root txt       REG    3,3   14366 1763337 /sbin/mingetty 
mingetty  1636 root txt       REG    3,3   14366 1763337 /sbin/mingetty 
mingetty  1637 root txt       REG    3,3   14366 1763337 /sbin/mingetty 
kdm        1638 root txt       REG    3,3  132548 1428194 /usr/bin/kdm 
X          1670 root txt       REG    3,3 1716396 1428336 /usr/bin/Xorg 
kdm        1671 root txt       REG    3,3  132548 1428194 /usr/bin/kdm 
startkde  2427 root txt       REG    3,3  645408 1544195 /bin/bash  
復制代碼

查看某個進程使用某個文件描述符的情況

#lsof -d 6 |grep 6139

搜索某個地址打開的網絡連接

  如果想搜索IP地址為10.645.64.23的遠程連接主機的所有網絡連接,可以執行如下命令,該命令可以打開系統中該遠程知己所有打開的套接字。

lsof –i@10.65.64.23

尋找本地斷開的打開文件

  用戶經常遇到這種情況,當一個進程正在向一個文件寫數據時,該文件的目錄可能被移動。這就產生了一個非常大的問題。例如,用戶可能發現正在向/data寫數據,但是卻看不到文件增大,LSOF這個工具可以找到到這樣的錯誤。

lsof –a +L1 /data 

查找誰在使用文件系統

在卸載文件系統時,如果該文件系統中有任何打開的文件,操作通常將會失敗。那么通過lsof可以找出那些進程在使用當前要卸載的文件系統,如下:

# lsof /GTES11/
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash 4208 root cwd DIR 3,1 4096 2 /GTES11/
vim 4230 root cwd DIR 3,1 4096 2 /GTES11/

在這個示例中,用戶root正在其/GTES11目錄中進行一些操作。一個 bash是實例正在運行,并且它當前的目錄為/GTES11,另一個則顯示的是vim正在編輯/GTES11下的文件。要成功地卸載/GTES11,應該在通知用戶以確保情況正常之后,中止這些進程。 這個示例說明了應用程序的當前工作目錄非常重要,因為它仍保持著文件資源,并且可以防止文件系統被卸載。這就是為什么大部分守護進程(后臺進程)將它們的目錄更改為根目錄、或服務特定的目錄(如 sendmail 示例中的 /var/spool/mqueue)的原因,以避免該守護進程阻止卸載不相關的文件系統。

恢復刪除的文件

當Linux計算機受到入侵時,常見的情況是日志文件被刪除,以掩蓋攻擊者的蹤跡。管理錯誤也可能導致意外刪除重要的文件,比如在清理舊日志時,意外地刪除了數據庫的活動事務日志。有時可以通過lsof來恢復這些文件。
當進程打開了某個文件時,只要該進程保持打開該文件,即使將其刪除,它依然存在于磁盤中。這意味著,進程并不知道文件已經被刪除,它仍然可以向打開該文件時提供給它的文件描述符進行讀取和寫入。除了該進程之外,這個文件是不可見的,因為已經刪除了其相應的目錄索引節點。
在/proc 目錄下,其中包含了反映內核和進程樹的各種文件。/proc目錄掛載的是在內存中所映射的一塊區域,所以這些文件和目錄并不存在于磁盤中,因此當我們對這些文件進行讀取和寫入時,實際上是在從內存中獲取相關信息。大多數與 lsof 相關的信息都存儲于以進程的 PID 命名的目錄中,即 /proc/1234 中包含的是 PID 為 1234 的進程的信息。每個進程目錄中存在著各種文件,它們可以使得應用程序簡單地了解進程的內存空間、文件描述符列表、指向磁盤上的文件的符號鏈接和其他系統信息。lsof 程序使用該信息和其他關于內核內部狀態的信息來產生其輸出。所以lsof 可以顯示進程的文件描述符和相關的文件名等信息。也就是我們通過訪問進程的文件描述符可以找到該文件的相關信息。
當系統中的某個文件被意外地刪除了,只要這個時候系統中還有進程正在訪問該文件,那么我們就可以通過lsof從/proc目錄下恢復該文件的內容。 假如由于誤操作將/var/log/messages文件刪除掉了,那么這時要將/var/log/messages文件恢復的方法如下:
首先使用lsof來查看當前是否有進程打開/var/logmessages文件,如下:

# lsof |grep /var/log/messages
syslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted)

從上面的信息可以看到 PID 1283(syslogd)打開文件的文件描述符為 2。同時還可以看到/var/log/messages已經標記被刪除了。因此我們可以在 /proc/1283/fd/2 (fd下的每個以數字命名的文件表示進程對應的文件描述符)中查看相應的信息,如下:

復制代碼
# head -n 10 /proc/1283/fd/2
Aug 4 13:50:15 holmes86 syslogd 1.4.1: restart.
Aug 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started.
Aug 4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8 (root@everestbuilder.linux-ren.org) (gcc version 4.2.0) #1 SMP Wed Jul 18 11:18:32 EDT 2007 Aug 4 13:50:15 holmes86 kernel: BIOS-provided physical RAM map: Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000000000 - 000000000009f000 (usable) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000100000 - 000000001f7d3800 (usable) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000001f7d3800 - 0000000020000000 (reserved) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000e0000000 - 00000000f0007000 (reserved) Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000f0008000 - 00000000f000c000 (reserved)
復制代碼

從上面的信息可以看出,查看 /proc/8663/fd/15 就可以得到所要恢復的數據。如果可以通過文件描述符查看相應的數據,那么就可以使用 I/O 重定向將其復制到文件中,如:

cat /proc/1283/fd/2 > /var/log/messages

對于許多應用程序,尤其是日志文件和數據庫,這種恢復刪除文件的方法非常有用。

?

參考:http://blog.csdn.net/yuzhihui_no1/article/details/51767516

轉載于:https://www.cnblogs.com/muchengnanfeng/p/9554993.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389809.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389809.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389809.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

史密斯臥推:杠鈴史密斯下斜臥推、上斜機臥推、平板臥推動作圖解

史密斯臥推&#xff1a;杠鈴史密斯下斜臥推、上斜機臥推、平板臥推動作圖解 史密斯臥推&#xff08;smith press&#xff09;是固定器械上完成的臥推&#xff0c;對于初級健身者來說&#xff0c;自由臥推&#xff08;啞鈴臥推、杠鈴臥推&#xff09;還不能很好地把握平衡性&…

圖像特征 可視化_使用衛星圖像可視化建筑區域

圖像特征 可視化地理可視化/菲律賓/遙感 (GEOVISUALIZATION / PHILIPPINES / REMOTE-SENSING) Big data is incredible! The way Big Data manages to bring sciences and business domains to new levels is almost sort of magical. It allows us to tap into a variety of a…

ELK入門01—Elasticsearch安裝

1. 安裝 首先從官網下載安裝包此處我們選擇2.4.6這個版本,然后下載tar壓縮包下載以后直接解壓&#xff0c;就算安裝完成了 tar zxvf elasticsearch-2.4.6.tar.gz 2. 配置 編輯elasticsearch配置文件 # 進入安裝目錄 cd elasticsearch-2.4.6 # 編輯配置文件 vi ./config/elastic…

375. 猜數字大小 II

375. 猜數字大小 II 我們正在玩一個猜數游戲&#xff0c;游戲規則如下&#xff1a; 我從 1 到 n 之間選擇一個數字。你來猜我選了哪個數字。如果你猜到正確的數字&#xff0c;就會 贏得游戲 。如果你猜錯了&#xff0c;那么我會告訴你&#xff0c;我選的數字比你的 更大或者更…

hdu_2048 錯排問題

錯排問題本質上就是一個動態規劃問題&#xff0c;其狀態轉移方程為&#xff1a; 記d[n]為n個人錯排情況的總數。 那么策略可以描述為&#xff1a;分析第n個人錯排的可能情況&#xff1a; 1&#xff09;前n-1個人滿足錯排的情況&#xff0c;那么第n個人加入后還要錯排意味著第n個…

海量數據尋找最頻繁的數據_在數據中尋找什么

海量數據尋找最頻繁的數據Some activities are instinctive. A baby doesn’t need to be taught how to suckle. Most people can use an escalator, operate an elevator, and open a door instinctively. The same isn’t true of playing a guitar, driving a car, or anal…

OSChina 周四亂彈 —— 要成立復仇者聯盟了,來報名

2019獨角獸企業重金招聘Python工程師標準>>> Osc亂彈歌單&#xff08;2018&#xff09;請戳&#xff08;這里&#xff09; 【今日歌曲】 Devoes &#xff1a;分享吳若希的單曲《越難越愛 (Love Is Not Easy / TVB劇集《使徒行者》片尾曲)》: 《越難越愛 (Love Is No…

2023. 連接后等于目標字符串的字符串對

2023. 連接后等于目標字符串的字符串對 給你一個 數字 字符串數組 nums 和一個 數字 字符串 target &#xff0c;請你返回 nums[i] nums[j] &#xff08;兩個字符串連接&#xff09;結果等于 target 的下標 (i, j) &#xff08;需滿足 i ! j&#xff09;的數目。 示例 1&…

webapi 找到了與請求匹配的多個操作(ajax報500,4的錯誤)

1、ajax報500,4的錯誤&#xff0c;然而多次驗證自己的后臺方法沒錯。然后跟蹤到如下圖的錯誤信息&#xff01; 2、因為兩個函數都是無參的&#xff0c;返回值也一樣。如下圖 3&#xff0c;我給第一個函數加了一個參數后&#xff0c;就不報錯了&#xff0c;所以我想&#xff0c;…

可視化 nlp_使用nlp可視化尤利西斯

可視化 nlpMy data science experience has, thus far, been focused on natural language processing (NLP), and the following post is neither the first nor last which will include the novel Ulysses, by James Joyce, as its primary target for NLP and literary elu…

區分'方法'和'函數'

區分方法: 1在類中的叫方法,在類外面的叫函數 2在名字前加 對象名. 的叫方法, 在名字前加 類名. 或 只寫名字的 叫函數 通過代碼進行區分: 1 from types import MethodType,FunctionType 2 def check(arg): 3 if isinstance(arg,MethodType)#判斷第一個參數是否是第二個參數…

520. 檢測大寫字母

520. 檢測大寫字母 我們定義&#xff0c;在以下情況時&#xff0c;單詞的大寫用法是正確的&#xff1a; 全部字母都是大寫&#xff0c;比如 “USA” 。單詞中所有字母都不是大寫&#xff0c;比如 “leetcode” 。如果單詞不只含有一個字母&#xff0c;只有首字母大寫&#xf…

Java 打包 FatJar 方法小結

在函數計算(Aliyun FC)中發布一個 Java 函數&#xff0c;往往需要將函數打包成一個 all-in-one 的 zip 包或者 jar 包。Java 中這種打包 all-in-one 的技術常稱之為 Fatjar 技術。本文小結一下 Java 里打包 FatJar 的若干種方法。 什么是 FatJar FatJar 又稱作 uber-Jar&#x…

常見問題及解決方案(前端篇)

一、jquery validate 默認校驗規則序號 規則 描述1 requiredtrue 必須輸入的字段。2 remote "check.php" 使用 ajax 方法調用 check.php 驗證輸入值。3 emailtrue 必須輸入正確格式的電子郵件。4 urltrue 必須輸入正確格式的網址。5 datetrue 必須輸入正確格式的日期…

本地搜索文件太慢怎么辦?用Everything搜索秒出結果(附安裝包)

每次用電腦本地的搜索都慢的一批&#xff0c;后來發現了一個搜索利器 基本上搜索任何文件都不用等待。 并且頁面非常簡潔&#xff0c;也沒有任何廣告&#xff0c;用起來非常舒服。 軟件官網如下&#xff1a; voidtools 官網提供三個版本&#xff0c;用起來差別不大。 網盤鏈…

2024. 考試的最大困擾度

2024. 考試的最大困擾度 一位老師正在出一場由 n 道判斷題構成的考試&#xff0c;每道題的答案為 true &#xff08;用 ‘T’ 表示&#xff09;或者 false &#xff08;用 ‘F’ 表示&#xff09;。老師想增加學生對自己做出答案的不確定性&#xff0c;方法是 最大化 有 連續相…

小程序入口傳參:關于帶參數的小程序掃碼進入的方法

1.使用場景 1.醫院場景&#xff1a;比如每個醫生一個id&#xff0c;通過帶參數二維碼&#xff0c;掃碼二維碼就直接進入小程序醫生頁面 2.餐廳場景&#xff1a;比如每個菜一個二維碼&#xff0c;通過掃碼這個菜的二維碼&#xff0c;進入小程序后&#xff0c;可以直接點這道菜&a…

python的power bi轉換基礎

I’ve been having a great time playing around with Power BI, one of the most incredible things in the tool is the array of possibilities you have to transform your data.我在玩Power BI方面玩得很開心&#xff0c;該工具中最令人難以置信的事情之一就是您必須轉換數…

感想3-對于業務邏輯復用、模板復用的一些思考(未完)

內容概覽&#xff1a; 業務邏輯復用的目的基于現有場景&#xff0c;如何抽象出初步可復用邏輯復用業務邏輯會不會產生過度設計的問題業務邏輯復用的目的 我對于業務邏輯復用的理解是忽略實際業務內容&#xff0c;從交互流程、交互邏輯的角度去歸納、總結&#xff0c;提出通用的…

Git的一些總結

.git 目錄結構 |── HEAD|── branches // 分支|── config // 配置|── description // 項目的描述|── hooks // 鉤子| |── pre-commit.sample| |── pre-push.sample| └── ...|── info| └── exclude // 類似.gitignore 用于排除文件|── objects // 存儲了…