[Linux] Linux文件系統基本管理

目錄

識別文件系統和設備

Linux 中設備

Linux 文件系統

查看設備和文件系統

lsblk命令

df命令

du命令

案例:查看根文件系統中哪個文件占用了最大空間

環境準備

查找過程

掛載和卸載文件系統

環境準備

掛載文件系統

卸載文件系統

卸載失敗處理

lsof 命令

fuser 命令

案例:Linux 掛載 NTFS 格式U盤

案例:Linux 掛載 exfat 格式U盤

案例:構建基于 ISO 文件的yum倉庫

查找系統中文件

locate

find

根據文件 name 查找

根據文件 type 查找

根據文件 owner 查找

根據文件 perm 查找

根據文件 size 查找

根據文件 time 查找

根據文件硬鏈接數和 inum 查找

多條件表達式

action


識別文件系統和設備

Linux 中設備

在Linux中,對存儲設備的訪問由特殊類型文件-塊設備(block)提供。掛載塊設備前,必須先使用文件系統對其進行格式化。

塊設備文件與其他的設備文件一起存儲在/dev目錄中。設備文件是由操作系統自動創建的。

常見的不同類型接口塊設備:

  • 接口:SATA/SAS/USB/SCSI,名稱:/dev/sda、/dev/sdb …

  • 接口:virtio-blk,虛擬機磁盤,名稱:/dev/vda、/dev/vdb …

  • 接口:NVMe SSD,名稱:/dev/nvme0n1、/dev/nvme1n1…

  • 接口:SD/MMC/eMMC,名稱:/dev/mmcblk0,/dev/mmcblk1 …

通常,不會將整個存儲設備格式化為一個文件系統中,而是將硬盤驅動器劃分為多個邏輯存儲單元, 這些單元稱為分區。各種分區使用不同的文件系統進行格式化或用于不同的用途。 例如,一個分區可以包含用戶目錄,而另一個分區可以包含系統數據和日志。 如果用戶用數據填充主目錄分區,則系統分區可能仍然有可用空間。

  • /dev/sda第一個分區為/dev/sda1,第二個分區為/dev/sda2,以此類推。

  • /dev/nvme0n1p1,/dev/nvme0n1p2

  • /dev/vda1,/dev/vda2

  • /dev/xvda1,/dev/xvda2

Linux 文件系統

文件系統是操作系統用于明確存儲設備或分區上的文件的方法和數據結構,即在存儲設備上組織文件的方法。

Linux服務器上的文件是按文件系統層次結構訪問的。

管理文件系統需要:

  • 確定存儲設備的空間使用情況以及文件系統層次結構中受影響的目錄。

  • 存儲設備發生故障,而您需要知道哪些文件系統存在風險。

要讓文件系統的內容在文件系統層次結構中可用,必須將它掛載到一個空目錄上,該目錄被稱為掛載點

查看設備和文件系統

lsblk命令

查看塊設備使用情況

lsblk

  • NAME:塊設備名。

  • MAJ:MIN:主要(MAJ)和次要(MIN)設備號。

  • RM:指明設備是否是可移動設備。注意,在本例中設備sdb和srO的RM值等于1,這說明他們是可移動設備。

  • SIZE:本欄列出設備的容量大小信息。例如298.1G表明該設備大小298.1GB,而1K表明該設備大小為1KB。

  • RO:該項表明設備是否為只讀。在本案例中,所有設備的RO值為0,表明他們不是只讀的。

  • TYPE:本欄顯示塊設備是否是磁盤或磁盤上的一個分區。在本例中,Sda和sdb是磁盤,而sr0是只讀存儲(rom)。

  • MOUNTPOINT:本欄指出設備掛載的掛載點。

df命令

查看文件系統使用情況

df

df -hT
#-h:友好顯示單位。-T:顯示文件系統類型

查看單個文件系統

df -hT /boot

查看文件或目錄存儲在哪個設備

df /tmp

du命令

查看目錄和文件占用磁盤空間大小

#查看/boot目錄及其子目錄占用空間
du /boot

#只查看/boot目錄占用大小
du -s /boot
#-h:人性化方式顯示size

案例:查看根文件系統中哪個文件占用了最大空間

環境準備

創建一個大小為4GB的文件,用0填充該文件

dd if=/dev/zero of=/usr/share/doc/bigfille-4G bs=1M count=4096

查找過程
du -sk /* | sort -n

一個個目錄查下去

du -sk /usr/* | sort -n

du -sk /usr/* | sort -n
du -sk /usr/share/* | sort -n
du -sk /usr/share/doc/* | sort -n

方法二:

find / -size +100M 2>/dev/null

掛載和卸載文件系統

環境準備
# 虛擬機添加一塊硬盤/dev/sdb
[root@rocky8 ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb ? ?8:16 ? 0  20G ?0 disk # 格式化文件系統
[root@rocky8 ~]# mkfs.xfs /dev/sdb 
meta-data=/dev/sdb ? ? ? ? ? ? ?isize=512 ? ?agcount=4, agsize=1310656 blks= ? ? ? ? ? ? ? ? ? ? ? sectsz=512 ? attr=2, projid32bit=1= ? ? ? ? ? ? ? ? ? ? ? crc=1 ? ? ? ?finobt=0, sparse=0
data ? ? = ? ? ? ? ? ? ? ? ? ? ? bsize=4096 ? blocks=5242624, imaxpct=25= ? ? ? ? ? ? ? ? ? ? ? sunit=0 ? ? ?swidth=0 blks
naming ? =version 2 ? ? ? ? ? ? ?bsize=4096 ? ascii-ci=0 ftype=1
log ? ? ?=internal log ? ? ? ? ? bsize=4096 ? blocks=2560, version=2= ? ? ? ? ? ? ? ? ? ? ? sectsz=512 ? sunit=0 blks, lazy-count=1
realtime =none ? ? ? ? ? ? ? ? ? extsz=4096 ? blocks=0, rtextents=0
掛載文件系統

當需要適用文件系統的時候,通過mount命令掛載。

mount 命令語法:

mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint

選項說明:

  • -t vfstype,指明文件系統類型。

  • -o options,指明掛載選項。

  • device,指明要掛載的具有文件系統的設備,可以通過UUID=、、LABEL=、PARTLABEL=、PARTUUID=等方式指明。例如,/dev/sdb,UUID="f20547b2-df53-46e5-b526-a8744be26231" 。

  • mountpoint,指明掛載點位置。

# 創建掛載點
[root@rocky8 ~]# mkdir /data# 顯示系統中所有文件系統
[root@rocky8 ~]# blkid# 顯示系統中特定文件系統
[root@rocky8 ~]# blkid /dev/sdb
/dev/sdb: UUID="f20547b2-df53-46e5-b526-a8744be26231" TYPE="xfs"# 掛載設備并驗證
[root@rocky8 ~]# mount /dev/sdb /data
# 或者
[root@rocky8 ~]# mount UUID="f20547b2-df53-46e5-b526-a8744be26231" /data# 驗證
[root@rocky8 ~]# df -h /data
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        20G   33M   20G   1% /data# 創建文件測試
[root@rocky8 ~]# touch /data/file-{00..09}
[root@rocky8 ~]# ls /data
file-00  file-02  file-04  file-06  file-08
file-01  file-03  file-05  file-07  file-09

查看系統當前所有掛載,可以看到掛載的詳細信息。

[root@rocky8 ~]# mount
......
/dev/nvme0n1p1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/mapper/rl-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
......
# 括號中屬性,是文件系統當前支持的功能。[root@rocky8 ~]# mount |grep ^/dev
/dev/mapper/rl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/nvme0n1p1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/mapper/rl-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
卸載文件系統

當文件系統不使用的時候,通過 umount 命令卸載。

umount命令語法:

umount device | dir

可以通過指定設備或者掛載點,卸載文件系統。

示例:

[root@rocky8 ~]# umount /dev/sdb
# 或者
[root@rocky8 ~]# umount /data
[root@rocky8 ~]# df -h /data
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/rl-root   50G  4.3G   46G   9% /
卸載失敗處理
[root@rocky8 ~]# mount /dev/sdb /data
[root@rocky8 ~]# cd /data
[root@rocky8 data]# ls
file-00  file-02  file-04  file-06  file-08
file-01  file-03  file-05  file-07  file-09# 提示掛載點正在忙碌
[root@rocky8 data]# umount /dev/sdb
umount: /data: target is busy.(In some cases useful info about processes that usethe device is found by lsof(8) or fuser(1))
lsof 命令

lsof,list open files,用于查看系統打開的文件。

lsof 命令語法:

lsof [options] [names]

常用選項:

  • -i,查看打開的 Internet 文件。例如 -i @10.1.8.20:22-i :80

  • -p pid,根據進程PID查找特定進程打開的文件。

  • -u uid,根據用戶 uid查找特定用戶打開的文件。

  • names,是文件或者文件系統設備。

# 新開窗口查看哪個進程在使用掛載點
[root@rocky8 ~]# lsof /data
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    1508 root  cwd    DIR   8,17      156   64 /data
fuser 命令

fuser,用于識別進程打開的文件。

fuser 命令語法:

fuser [-fMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME...

常用選項:

  • -k,殺死這些正在訪問這些文件的進程。除非使用-signal修改信號,否則將發送SIGKILL信號。

  • -signal,指定發送的信號(signal 使用特定信號替換),缺省信號SIGKILL。

  • -i,交互模式殺死進程。

  • -l,列出所有已知的信號名稱。

  • -m,列出文件系統被哪些程序使用。

  • -n,空間,選擇不同的名字空間,可是file,udp,tcp。默認是file,也就是文件。

  • -4,僅查詢IPV4套接字

  • -6,僅查詢IPV6套接字。

  • -u,指定用戶名。

# 新開窗口查看哪個進程在使用掛載點
[root@rocky8 ~]# fuser -m /data
/data:                1508c

終止進程,再次卸載

# 返回家目錄,再次卸載
[root@rocky8 data]# cd 
[root@rocky8 ~]# umount /data
案例:Linux 掛載 NTFS 格式U盤

思路:默認情況下 Linux不識別NTFS格式文件系統,需要安裝相應的模塊進行識別。

  1. 安裝 epel 倉庫

  2. 安裝 ntfs-3g (該軟件包由epel倉庫提供)

  3. 掛載

案例:Linux 掛載 exfat 格式U盤

思路:默認情況下 Linux 不識別 exfat 格式文件系統,需要安裝相應的模塊進行識別。

# 安裝軟件
dnf install -y git pkg-config fuse-devel gcc make autoconf automake
git clone https://github.com/relan/exfat.git
cd exfat
autoreconf --install
./configure
make && make installmount.exfat-fuse /dev/spec /mnt/exfat
案例:構建基于 ISO 文件的yum倉庫

思路:

  1. 掛載 ISO 文件

  2. 創建倉庫指向 ISO 文件中倉庫

  3. 測試

# 1. 掛載 ISO 文件
[root@rocky8 ~]# mkdir /dvd
[root@rocky8 ~]# mount /dev/sr0 /dvd
mount: /dvd: WARNING: device write-protected, mounted read-only.# 2. 創建倉庫指向 ISO 文件中倉庫
#  備份
[root@rocky8 ~]# mkdir /etc/yum.repos.d/old
[root@rocky8 ~]# mv /etc/yum.repos.d/*repo /etc/yum.repos.d/old[root@rocky8 ~]# cat << 'EOF' >  /etc/yum.repos.d/dvd.repo
[BaseOS]
name=rocky 8 BaseOS from dvd
baseurl=file:///dvd/BaseOS
enable=1
gpgcheck=0[AppStream]
name=rocky 8 AppStream from dvd
baseurl=file:///dvd/AppStream
enable=1
gpgcheck=0
EOF# 3. 測試
[root@rocky8 ~]# dnf repolist
repo id &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; repo name
AppStream &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rocky 8 AppStream from dvd
BaseOS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  rocky 8 BaseOS from dvd
[root@rocky8 ~]# dnf clean all
35 files removed
[root@rocky8 ~]# dnf makecache 
rocky 8 AppStream from dvd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;192 MB/s | 9.1 MB &nbsp; &nbsp; 00:00 &nbsp; &nbsp;
rocky 8 BaseOS from dvd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 163 MB/s | 2.7 MB &nbsp; &nbsp; 00:00 &nbsp; &nbsp;
Metadata cache created.# 安裝軟件包
[root@rocky8 ~]# dnf install -y httpd 

查找系統中文件

locate

locate 命令根據文件名及其路徑,在 mlocate 數據庫中查找文件,并返回結果。數據庫中存放文件和文件路徑信息。

常規用戶查找時,返回的結果僅包含用戶有讀取權限的目錄樹中匹配項。

查找文件前,需要root用戶手動執行updatedb命令更新mlocate數據庫。

[root@rocky8 ~]# updatedb

locate命令語法:

locate [OPTION]... [PATTERN]...

常用選項:

  • -b, --basename

  • -i, --ignore-case

  • -c, --count

  • -r, --regexp

示例:

[root@rocky8 ~]# yum install -y httpd
# 安裝后,未跟新數據庫,所以檢索不到
[root@rocky8 ~]# locate httpd.conf# 更新后查找
[root@rocky8 ~]# updatedb
[root@rocky8 ~]# locate httpd.conf
/etc/httpd/conf/httpd.conf
/usr/lib/tmpfiles.d/httpd.conf# -b選項 查找
[root@rocky8 ~]# locate -b httpd# 擴展
[root@rocky8 ~]# basename /usr/share/doc
doc
[root@rocky8 ~]# dirname /usr/share/doc
/usr/share# -i選項 忽略大小寫
[root@rocky8 ~]# locate PASSWD
/etc/PASSWD
[root@rocky8 ~]# locate -i PASSWD# -c選項 返回找到的數量
[root@rocky8 ~]# locate -b -c PASSWD
34# -r選項 正則表達式匹配查找
[root@rocky8 ~]# locate -r 'http.*conf'
find

find 命令在本地文件系統中執行實時查找文件。使用find命令的用戶對文件夾必須有讀取和執行權限。

語法:

find [path] [expression] [action]
  • path,是查詢路徑,如果沒有指定文件夾,將會查找當前目錄及子目錄。

  • expression,是查詢條件表達式。

  • action,是找到文件后采取的動作。

根據文件 name 查找
[root@rocky8 ~]# touch /etc/PASSWD[root@rocky8 ~]# find /etc/ -name passwd
/etc/pam.d/passwd
/etc/passwd[root@rocky8 ~]# find /etc/ -name '*passwd*'
/etc/security/opasswd
/etc/pam.d/passwd
/etc/passwd
/etc/passwd-[root@rocky8 ~]# find /etc/ -iname passwd
/etc/pam.d/passwd
/etc/passwd
/etc/PASSWD
根據文件 type 查找

-type 根據文件類型查找,支持文件類型:

  • b,block (buffered) special。

  • c,character (unbuffered) special。

  • d,directory。

  • p,named pipe (FIFO)。

  • f,regular file。

  • l,symbolic link。

  • s,socket。

根據文件 owner 查找
  • -user、-uid,屬于特定用戶。
[root@rocky8 ~]# id demisse
uid=1000(demisse) gid=1000(demisse) groups=1000(demisse)
[root@rocky8 ~]# find / -user demisse
[root@rocky8 ~]# find / -uid 1000
  • -group、-gid,屬于特定組
[root@rocky8 ~]# grep wheel /etc/group
wheel:x:10:
[root@rocky8 ~]# find / -group wheel
[root@rocky8 ~]# find / -gid 10
  • -nouser,不屬于任何用戶;-nogroup,不屬于任何組
# 查找系統中不屬于任何用戶或者不屬于任何組的文件
[root@rocky8 ~]# find / -nouser -o -nogroup
根據文件 perm 查找
# 準備文件
[root@rocky8 ~]# mkdir lab
[root@rocky8 ~]# cd lab
[root@rocky8 lab]# touch file-{1..3}
[root@rocky8 lab]# ls -l file*
-rwxr--r--. 1 root root 0 Dec 24 20:28 file-1
-rw-r--r--. 1 root root 0 Dec 24 20:28 file-2
-rw-r--r--. 1 root root 0 Dec 24 20:28 file-3
  • -perm mode,查找文件權限為mode的文件。
[root@rocky8 lab]# chmod 764 file-1
# 查找文件權限為764的文件
[root@rocky8 lab]# find -perm 764 | xargs ls -l
-rwxrw-r--. 1 root root 0 Dec 24 20:28 ./file-1
  • -perm -mode,例如:mode為764,則ugo必須同時滿足的最小權限:user至少為7、group至少為6、other為4。
[root@rocky8 lab]# chmod 777 file-1
[root@rocky8 lab]# chmod 764 file-2
[root@rocky8 lab]# chmod 760 file-3
[root@rocky8 lab]# find . -perm -764 | xargs ls -l
-rwxrwxrwx. 1 root root 0 Dec 24 20:28 ./file-1
-rwxrw-r--. 1 root root 0 Dec 24 20:28 ./file-2# 0作為通配符,表示不匹配對應權限位。
# 查找系統中具有suid權限的文件
[root@rocky8 lab]# find / -perm -4000# 查找系統中同時具有特殊權限的文件:suid和sgid
[root@rocky8 lab]# find / -perm -6000 2>/dev/null |xargs ls -l
-rwsr-sr-x. 1 abrt abrt 15344 Oct &nbsp;2 &nbsp;2020 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
  • -perm /mode,例如mode為764,則ugo只要有一個滿足即可:user至少為7、group至少為6、other至少為4。
[root@rocky8 lab]# chmod a=- file-1
[root@rocky8 lab]# chmod uo=-,g=rwx file-2
[root@rocky8 lab]# chmod ug=-,o=r file-3[root@rocky8 lab]# find . -name 'file-*' -perm /764| xargs ls -l
----rwx---. 1 root root 0 Dec 24 20:28 ./file-2
-------r--. 1 root root 0 Dec 24 20:28 ./file-3# 查找系統中具有特殊權限的文件:suid、sgid、sticky
[root@rocky8 lab]# find / -perm /7000# 查找系統中具有特殊權限的文件:suid或者sgid
[root@rocky8 lab]# find / -perm /6000
  • -readable -writable -executable,文件具有可讀、可寫、可執行。
根據文件 size 查找

單位 c(字節)、k(KiB)、M(MiB)、G(GiB)

# 大小等于10M
[root@rocky8 ~]# find -size 10M# 大小大于10G
[root@rocky8 ~]# find -size +10G# 大小小于10k
[root@rocky8 ~]# find -size -10k# 大小等于1M
[root@rocky8 ~]# find -size 1M
# 注意:size會取整為1個單位,所以find -size 1M結果包含小于1M的文件。
# 可以使用1024k取代1M
[root@rocky8 ~]# find -size 1024k
根據文件 time 查找
  • -amin, -cmin, -mmin 單位1分鐘。

  • -atime, -ctime, -mtime 單位24小時。

  • -newer file,比file新的文件。

# 10分鐘前(正好10分鐘)
[root@rocky8 ~]# find -amin 10# 10分鐘以前(大于10分鐘)
[root@rocky8 ~]# find -amin +10# 10分鐘以內(小于10分鐘)
[root@rocky8 ~]# find -amin -10
根據文件硬鏈接數和 inum 查找
# 硬鏈接數等于、大于、小于3的文件
[root@rocky8 ~]# find -links 3
[root@rocky8 ~]# find -links +3
[root@rocky8 ~]# find -links -3# inode為67160130的文件
[root@rocky8 ~]# ls -i /etc/fstab
67160130 /etc/fstab
[root@rocky8 ~]# find / -inum 67160130| xargs ls -i
67160130 /etc/fstab
多條件表達式
  • 邏輯與: expr1 -a expr2 或者 expr1 expr2
[root@rocky8 lab]# find . -name 'file-*' -perm /764
  • 邏輯或:expr1 -o expr2
# 查找系統中不屬于任何用戶或者不屬于任何組的文件
[root@rocky8 ~]# find / -nouser -o -nogroup# 例如
[root@rocky8 ~]# find / -perm /7000
# 等效與
[root@rocky8 ~]# find / -perm -4000 -o -perm -2000 -o -perm -1000
  • 邏輯非:! expr
[root@rocky8 ~]# find / ! -size -200M 2>/dev/null
/proc/kcore
/proc/59432/task/59432/fd/5
/proc/59432/task/59432/fdinfo/5
/proc/59432/fd/6
/proc/59432/fdinfo/6
[root@rocky8 ~]# ls -lh /proc/kcore
-r--------. 1 root root 128T Dec 24 22:00 /proc/kcore
action
  • -delete,查出找到的文件。
[root@rocky8 ~]# find / -name PASSWD
/etc/PASSWD[root@rocky8 ~]# find / -name PASSWD -delete
[root@rocky8 ~]# find / -name PASSWD
  • -ls,相當于 ls -dils 查看找到的文件。
[root@rocky8 ~]# find /etc/ -name passwd
/etc/pam.d/passwd
/etc/passwd[root@rocky8 ~]# find /etc/ -name passwd -ls
67584593 &nbsp; &nbsp;4 -rw-r--r-- &nbsp; 1 root &nbsp; &nbsp; root &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;188 Apr &nbsp;1 &nbsp;2020 /etc/pam.d/passwd
69030856 &nbsp; &nbsp;4 -rw-r--r-- &nbsp; 1 root &nbsp; &nbsp; root &nbsp; &nbsp; &nbsp; &nbsp; 2315 Dec 24 19:59 /etc/passwd
  • -exec command \;,找到文件后,執行相應的command。
[root@rocky8 ~]# find /etc/ -name passwd -exec echo haha \;
haha
haha
  • -exec command {} \;,找到文件后,可以在命令中對文件操作。
[root@rocky8 ~]# find / -inum 67160130
/etc/fstab
# 將inode為67160130的所有文件復制到當前目錄
[root@rocky8 ~]# mkdir findfiles
[root@rocky8 ~]# find / -inum 67160130 -exec cp -a {} ./findfiles \;
[root@rocky8 ~]# ls findfiles/fstab
fstab

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

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

相關文章

如何在 Ubuntu 24.04 Server 或 Desktop 上安裝 XFCE

在 Ubuntu 24.04 上更改當前桌面環境或添加新的桌面環境并不是一項艱巨的任務。大多數流行的 Linux 桌面環境,包括 XFCE,都可以通過默認的 Ubuntu 24.04 LTS 系統倉庫安裝。在本教程中,我們將學習如何使用 Tasksel 工具在 Ubuntu Linux 上安裝和配置 XFCE。 訪問終端并運行…

linux下用c++11寫一個UDP回顯程序

需求&#xff1a;1&#xff09;從2個UDP端口接收數據&#xff0c;并在同樣的端口回顯。echo2&#xff09;多個處理線程&#xff0c;多個發送線程&#xff1b;3&#xff09;使用條件變量喚醒&#xff1b;#include <stack> #include <mutex> #include <atomic>…

MySQL 深分頁優化與條件分頁:把 OFFSET 換成“游標”,再用覆蓋索引抄近路

MySQL 深分頁優化與條件分頁:把 OFFSET 換成“游標”,再用覆蓋索引抄近路 這不是“玄學調優”,而是可復制的方案。本文用可復現的 DDL/造數腳本,演示為什么 OFFSET 越大越慢,如何用 條件游標(Keyset Pagination) 替換它,并配上 覆蓋索引。還會教你看 EXPLAIN/EXPLAIN A…

Unity 繩子插件 ObjRope 使用簡記

Unity 繩子插件&#xff0c;是一個基于物理的、高度逼真且可交互的繩索模擬解決方案。 其性能良好&#xff0c;能夠運行在小游戲平臺。 一、插件基本 插件資源商店地址&#xff1a; Obi Rope | Physics | Unity Asset Store 官方文檔&#xff08;手冊&#xff09;&#xff…

demo 通訊錄 + 城市選擇器 (字母索引左右聯動 ListItemGroup+AlphabetIndexer)筆記

一、城市選擇器實現筆記1. 雙層 for 循環渲染數據結構interface BKCityContent {initial: string; // 字母索引cityNameList: string[]; // 城市列表 }核心實現// 外層循環&#xff1a;字母分組 - 遍歷城市數據&#xff0c;按字母分組顯示 ForEach(this.cityContentList, (item…

【總結型】c語言中的位運算

位運算包括 & | ^ ~ << >>按位與 將某些變量中的某些位清0同時保持其他位不變。也可以用來獲取變量中的某一位。 例如&#xff1a;將int型變量n低8位全置為0&#xff0c;其余位保持不變。 n n & 0xffffff00 如何判斷一個int型變量n的第七位。 n & 0x8…

如何在FastAPI中玩轉APScheduler,實現動態定時任務的魔法?

url: /posts/4fb9e30bb20956319c783e21897a667a/ title: 如何在FastAPI中玩轉APScheduler,實現動態定時任務的魔法? date: 2025-08-16T01:14:26+08:00 lastmod: 2025-08-16T01:14:26+08:00 author: cmdragon summary: APScheduler是Python中強大的任務調度庫,支持任務持久化…

GitHub的簡單使用方法----(5)

最后一篇簡單講講git管理遠程倉庫 1.目的 備份&#xff0c;實現代碼共享集中化管理 &#xff08;將本地倉庫同步到git遠程倉庫中&#xff09; git clone 倉庫地址 以下圖為示例&#xff0c;我打開了一個別人的項目倉庫&#xff0c;點擊code能看到倉庫地址 等待完成即可 如…

C++ STL-string類底層實現

摘要&#xff1a; 本文實現了一個簡易的string類&#xff0c;主要包含以下功能&#xff1a; 1. 默認成員函數&#xff1a;構造函數&#xff08;默認/參數化&#xff09;、拷貝構造、賦值重載和析構函數&#xff0c;采用深拷貝避免內存問題&#xff1b; 2. 迭代器支持&#xff1…

【LeetCode每日一題】

每日一題3. 無重復字符的最長子串題目總體思路代碼1.兩數之和題目總體思路代碼15. 三數之和題目總體思路代碼2025.8.153. 無重復字符的最長子串 題目 給定一個字符串 s &#xff0c;請你找出其中不含有重復字符的 最長 子串 的長度。 示例 1: 輸入: s “abcabcbb” 輸出: 3…

sharding-jdbc讀寫分離配置

一主兩從&#xff0c;爆紅是正常的&#xff0c;不知為啥 spring:shardingsphere:datasource:names: ds_master,ds_s1,ds_s2ds_master:type: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.jdbc.DriverjdbcUrl: jdbc:mysql://192.168.135.100:3306/gmall_produ…

【大模型核心技術】Dify 入門教程

文章目錄一、Dify 是什么二、安裝與部署2.1 云端 SaaS 版&#xff08;快速入門&#xff09;2.2 私有化部署&#xff08;企業級方案&#xff09;三、界面導航與核心模塊3.1 控制臺概覽3.2 核心功能模塊詳解3.2.1 知識庫&#xff08;RAG 引擎&#xff09;3.2.2 工作流編排3.2.3 模…

homebrew 1

文章目錄brew(1) – macOS&#xff08;或 Linux&#xff09;上缺失的包管理器概要描述術語表基本命令install *formula*uninstall *formula*listsearch \[*text*|/*text*/]命令alias \[--edit] \[*alias*|*alias**command*]analytics \[*subcommand*]autoremove \[--dry-run]bu…

設計索引的原則有哪些?

MySQL 索引設計的核心原則是 在查詢性能與存儲成本之間取得平衡。以下是經過實踐驗證的 10 大設計原則及具體實現策略&#xff1a;一、基礎原則原則說明示例/反例1. 高頻查詢優先為 WHERE、JOIN、ORDER BY、GROUP BY 頻繁出現的列建索引? SELECT * FROM orders WHERE user_id1…

使用影刀RPA實現快遞信息抓取

最近公司項目有個需求&#xff0c;要求抓取快遞單號快遞信息&#xff0c;比如簽收地點、簽收日期等。該項目對應的快遞查詢網站是一個國外的網站&#xff0c;他們有專門的快遞平臺可以用于查詢。該平臺提供了快遞接口進行查詢&#xff0c;但需要付費。同時也提供了免費的查詢窗…

蟻劍--安裝、使用

用途限制聲明&#xff0c;本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具&#xff0c;嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果&#xff0c;作者及發布平臺不承擔任何責任。滲透測試涉及復雜技…

Varjo XR虛擬現實軍用車輛駕駛與操作培訓

Patria基于混合現實的模擬器提供了根據現代車輛乘員需求定制的培訓&#xff0c;與傳統顯示設置相比&#xff0c;全新的模擬解決方案具有更好的沉浸感和更小的物理空間需求。Patria是芬蘭領先的國防、安全和航空解決方案提供商。提供尖端技術和全面的培訓系統&#xff0c;以支持…

Java 10 新特性及具體應用

目錄 1. 局部變量類型推斷&#xff08;JEP 286&#xff09; 2. 不可修改集合&#xff08;JEP 269&#xff09; 3. 并行全垃圾回收&#xff08;JEP 307&#xff09; 4. 應用類數據共享&#xff08;JEP 310&#xff09; 5. 線程局部管控&#xff08;JEP 312&#xff09; 總結…

【力扣 Hot100】刷題日記

D8 全排列(非回溯法) 全排列原題鏈接 在刷leetcode的時候&#xff0c;看到這道題目并沒法使用像STL的next_permutation方法&#xff0c;感嘆C便利的同時&#xff0c;又惋惜Java并沒有類似的API&#xff0c;那我們只能從原理入手了&#xff0c;仿寫此算法。 其實回溯法更應該…

JetPack系列教程(七):Palette——讓你的APP色彩“飛”起來!

JetPack系列教程&#xff08;七&#xff09;&#xff1a;Palette——讓你的APP色彩“飛”起來&#xff01; 各位開發小伙伴們&#xff0c;還在為APP的配色發愁嗎&#xff1f;別擔心&#xff0c;今天咱們就來聊聊JetPack家族里的“色彩魔法師”——Palette&#xff01;這個神奇的…