Linux基礎系統優化(一)

来源:https://www.cnblogs.com/wangyueping/archive/2019/09/23/11571368.html
-Advertisement-
Play Games

前言 引言沒有,只有一張圖。 Linux的網路功能相當強悍,一時之間我們無法瞭解所有的網路命令,在配置伺服器基礎環境時,先瞭解下網路參數設定命令。 ifconfig 查詢、設置網卡和ip等參數 ifup,ifdown 腳本命令,更簡單的方式啟動關閉網路 ip 符合指令,直接修改上述功能 網卡配置文件 ...


前言

引言沒有,只有一張圖。

Linux的網路功能相當強悍,一時之間我們無法瞭解所有的網路命令,在配置伺服器基礎環境時,先瞭解下網路參數設定命令。

  • ifconfig  查詢、設置網卡和ip等參數
  • ifup,ifdown 腳本命令,更簡單的方式啟動關閉網路
  • ip  符合指令,直接修改上述功能
在我們剛裝好linux的時候,需要用xshell進行遠程連接,那就得獲取ip地址,有時候網卡預設是沒啟動的,Linux也就拿不到ip地址,因此我們得手動啟動網卡
#編輯網卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0 
#修改配置參數
ONBOOT=yes

網卡配置文件詳解

如下

網路配置文件:
/etc/sysconfig/network

網路介面配置文件:
/etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME
DEVICE=: 關聯的設備名稱,要與文件名的後半部“INTERFACE_NAME”保持一致; 
BOOTPROTO={static|none|dhcp|bootp}: 引導協議;要使用靜態地址,使用static或none;dhcp表示使用DHCP伺服器獲取地址;
IPADDR=: IP地址
NETMASK=:子網掩碼
GATEWAY=:設定預設網關;
ONBOOT=:開機時是否自動激活此網路介面;
HWADDR=: 硬體地址,要與硬體中的地址保持一致;可省;
USERCTL={yes|no}: 是否允許普通用戶控制此介面;
PEERDNS={yes|no}: 是否在BOOTPROTO為dhcp時接受由DHCP伺服器指定的DNS地址;

ifup,ifdown命令

啟動/關閉一塊網卡
ifup eth0
ifdown eth0

---
如果關閉網卡,xshell會怎樣?

ifconfig命令

ifconfig 查看網卡的ip地址

直接輸入ifconfig會列出已經啟動的網卡,也可以輸入ifconfig eth0單獨顯示eth0的信息
各選項解釋是:
eth0    網卡的代號 
lo        迴環地址loopback
inet    IPv4的Ip地址
netmask    子網掩碼
broadcast    廣播地址
RX/TX     流量發/收情況     tx是發送(transport),rx是接收(receive)
packets     數據包數
errors     數據包錯誤數
dropped    數據包有問題被丟棄的數量
collisions    數據包碰撞情況,數值太多代表網路狀況差

ip命令

ip是一個命令,不是TCP/IP那個ip,這個ip命令是結合了ifconfig和route兩個命令的功能。
ip addr show #查看ip信息

瞭解瞭如何查看網卡信息,接下來查看系統信息。

你的系統是什麼版本?

#查看系統版本信息
cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
#查看內核版本號
uname -r
3.10.0-693.el7.x86_64
#查看系統多少位
uname -m
x86_64
#查看內核所有信息
uname -a

用戶管理

現代操作系統一般屬於多用戶的操作系統,也就是說,同一臺機器可以為多個用戶建立賬戶,一般這些用戶都是為普通用戶,這些普通用戶能同時登錄這台電腦,電腦對這些用戶分配一定的資源。
普通用戶在所分配到的資源內進行各自的操作,相互之間不受影響。但是這些普通用戶的許可權是有限制的,且用戶太多的話,管理就不便,從而引入root用戶。
此用戶是唯一的,且擁有系統的所有許可權。root用戶所在的組稱為root組。“組”是具有相似許可權的多個用戶的集合

root的權利

Linux系統的特性就是可以滿足多個用戶,同時工作,因此Linux系統必須具備很好的安全性。
在安裝RHEL7時設置的root管理員密碼,這個root管理員就是所有UNIX系統中的超級用戶,它擁有最高的系統所有權,能夠管理系統的各項功能,如添加/刪除用戶,啟動/關閉進程,開啟/禁用硬體設備等等。
因此“能力越大,責任越大”,root許可權必須很好的掌握,否則一個錯誤的命令可能會摧毀整個系統。

root為什麼叫root?

在Linux系統中,用戶也有自己的UID身份賬號且唯一
系統管理員UID為0
系統用戶UID為1~999    Linux安裝的服務程式都會創建獨有的用戶負責運行。
普通用戶UID從1000開始:由管理員創建

用戶組GID

為了方便管理屬於同一組的用戶,Linux 系統中還引入了用戶組的概念。通過使用用 戶組號碼(GID,Group IDentification),我們可以把多個用戶加入到同一個組中,從而方 便為組中的用戶統一規劃許可權或指定任務。
假設有一個公司中有多個部門,每個部門中又 有很多員工。如果只想讓員工訪問本部門內的資源,則可以針對部門而非具體的員工來設 置許可權。
例如,可以通過對技術部門設置許可權,使得只有技術部門的員工可以訪問公司的 資料庫信息等。
Linux管理員在創建用戶時,將自動創建一個與其同名的用戶組,這個用戶組只有該用戶一個人

大家都知道windows下有管理員用戶

這樣

或者這樣

Linux/unix是一個多用戶、多任務的操作系統。

root:預設在Unix/linux操作系統中擁有最高的管理許可權。可以理解為qq群的群主⬇️⬇️⬇️

普通用戶:是管理員或者具備管理許可權的用戶所創建的,只能讀、看,不能增、刪、改。

創建普通用戶

#添加用戶
useradd oldboy 
#設置密碼       
passwd redhat

root用戶可以修改其他所有人的密碼,且不需要驗證

切換用戶

su命令可以切換用戶身份的需求,
su - username

su命令中間的-號很重要,意味著完全切換到新的用戶,即環境變數信息也變更為新用戶的信息
#先看下當前用戶(我是誰)
whoami
#切換用戶
su - oldboy
#退出用戶登錄
logout
ctrl + d
  • 一般情況下,在生產環境避免直接用root用戶,除非有特殊系統維護需求,使用完立刻退回普通用戶
  • 非互動式設置密碼(echo "redhat"|passwd --stdin oldboy && history -c)
Tip:
1.超級用戶root切換普通用戶無需密碼,例如“群主”想踢誰就踢誰
2.普通用戶切換root,需要輸入密碼
3.普通用戶許可權較小,只能基本查看信息
4.$符號是普通用戶命令提示符,#是超級管理員的提示符
root是當前用戶,oldboyedu是主機名,~代表當前路徑,也是家目錄

groupadd命令

group命令用於創建用戶組,為了更加高效的指派系統中各個用戶的許可權,在工作中常常添加幾個用戶到一個組裡面,這樣可以針對一類用戶安排許可權。
例如超哥以前在公司里,就負責添加openLDAP用戶管理,偶爾臺灣,美國的同事去上海協作,我就得給他們添加到it部門組裡面,以至於他們有對伺服器操作的許可權。
groupadd it_dep

userdel刪除用戶

-f     強制刪除用戶
-r    同事刪除用戶以及家目錄
userdel -r pyyu 

sudo命令

sudo命令用來以其他身份來執行命令,預設的身份為root。在/etc/sudoers中設置了可執行sudo指令的用戶。若其未經授權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,之後有5分鐘的有效期限,超過期限則必須重新輸入密碼。

語法

sudo 【選項】【參數】
-b:在後臺執行指令;
-h:顯示幫助;
-H:將HOME環境變數設為新身份的HOME環境變數;
-k:結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼;。
-l:列出目前用戶可執行與無法執行的指令;
-p:改變詢問密碼的提示符號;
-s<shell>:執行指定的shell;
-u<用戶>:以指定的用戶作為新的身份。若不加上此參數,則預設以root作為新的身份;
-v:延長密碼有效期限5分鐘;
-V :顯示版本信息

實例

這個sudo命令用在什麼時候呢?

看圖

怎麼辦?許可權不夠,這時候需要sudo ls /root 以root身份去運行,chaoge權利小,root總可以了吧!!

這是由於配置sudo必須編輯/etc/sudoers文件,並且只有root才能修改,咱們可以通過visudo命令直接編輯sudoers文件,使用這個命令還可以檢查語法,比直接編輯 vim /etc/sudoers更安全

visudo 編輯sudoers文件

寫入
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
chaoge  ALL=(ALL)       ALL   #允許chaoge在任何地方,執行任何命令
此時切換chaoge用戶
#su命令用於切換當前用戶身份到其他用戶身份,變更時須輸入所要變更的用戶帳號與密碼。
su - chaoge
已經可以使用sudo ls /root 命令

文件與目錄許可權

Linux許可權的目的是(保護賬戶的資料)

Linux許可權主要依據三種身份來決定:

  • user/owner 文件使用者,文件屬於哪個用戶
  • group 屬組,文件屬於哪個組
  • others 既不是user,也不再group,就是other,其他人

什麼是許可權

在Linux中,每個文件都有所屬的所有者,和所有組,並且規定了文件的所有者,所有組以及其他人對文件的,可讀,可寫,可執行等許可權。

對於目錄的許可權來說,可讀是讀取目錄文件列表,可寫是表示在目錄內新增,修改,刪除文件。可執行表示可以進入目錄

Linux許可權的觀察

使用一條命令查看許可權

ls -l /var/log/mysqld.log 

解讀上圖:

  1. 許可權,第一個字母為文件類型,後續9個字母,每3個一組,是三種身份的許可權
  2. 文件鏈接數
  3. 文件擁有者-屬主
  4. 文件擁有組-屬組
  5. 文件大小
  6. 最後一次被修改的時間日期
  7. 文件名

先來分析一下文件的類型

-    一般文件
d    文件夾
l    軟連接(快捷方式)
b    塊設備,存儲媒體文件為主
c    代表鍵盤,滑鼠等設備

文件許可權

r    read可讀,可以用cat等命令查看
w    write寫入,可以編輯或者刪除這個文件
x    executable    可以執行

目錄許可權

許可權這裡測試不要用root實驗!!!!root太牛逼了

請用普通用戶執行!!!!!測試文件、文件夾許可權操作,請用普通用戶!

r    可以對此目錄執行ls列出所有文件
w    可以在這個目錄創建文件
x    可以cd進入這個目錄,或者查看詳細信息

許可權與數字轉化

ls -l /var/log/mysqld.log 
-rw-r--r-- 1 mysql mysql 6735642 8月  11 14:19 /var/log/mysqld.log
這個就代表mysqld.log文件屬主是mysql,屬組是mysql,只有mysql用戶可以讀取編寫這個文件,其他人只能讀此文件。

查看用戶許可權命令

id指令查看用戶所屬群主
[root@oldboy_python ~ 16:34:52]#id root
uid=0(root) gid=0(root) 組=0(root)

修改文件許可權屬性

普通用戶只能修改自己的文件名,時間與許可權(註意)
因此修改其他用戶許可權,只能用最nb的root用戶

#切換root用戶

[pyyu@oldboy_python root]$ su -

當前/tmp/pyyu.txt文件以存在,且信息是
-rw-rw-r-- 1 pyyu pyyu    0 8月  11 16:41 pyyu.txt

修改屬主為root

chown

[root@oldboy_python /tmp 16:43:12]#chown root pyyu.txt 

查看信息

[root@oldboy_python /tmp 16:43:42]#ll pyyu.txt 
-rw-rw-r-- 1 root pyyu 0 8月  11 16:41 pyyu.txt

修改屬組

chgrp

[root@oldboy_python /tmp 16:43:42]#ll pyyu.txt 
-rw-rw-r-- 1 root pyyu 0 8月  11 16:41 pyyu.txt
[root@oldboy_python /tmp 16:44:59]#chgrp root pyyu.txt 
[root@oldboy_python /tmp 16:45:51]#ll pyyu.txt 
-rw-rw-r-- 1 root root 0 8月  11 16:41 pyyu.txt

文件許可權

我們已知三種身份許可權(屬主,屬組,其他人),每種身份都有rwx的三種許可權,系統還提供了數字計算許可權。

r    read          4
w    write        2
x    execute     1

每種身份最低是0分,最高是r+w+x 7分

因此三種身份,最高許可權是777,最低是000

-rw-rw-r-- 1 root root 0 8月  11 16:41 pyyu.txt
因此可知pyyu.txt的許可權是
屬主是6 r+w(4+2)
屬組是6 r+w(4+2)
其他人是4 r(4)

修改許可權的命令

chmod

chmod [身份]   [參數]   [文件]
    u(user)   +(添加)  
    g(group)   -(減去)
    o(other)  =(賦值)
    a(all)

例如

當前許可權
-rw-rw-r-- 1 root root 0 8月  11 16:41 pyyu.txt
方法1
減去屬主的寫許可權
chmod u-w pyyu.txt
查看許可權
-r--rw-r-- 1 root root 0 8月  11 16:41 pyyu.txt

方法2
屬主添加可讀可寫可執行許可權
chmod 700 pyyu.txt

屬主可讀可寫可執行
屬組可讀可執行
其他人可讀可執行
chmod 755 pyyu.txt

修改文件名,修改文件更改日期

mv pyyu.txt chaoge.txt
#觸摸,修改時間
touch chaoge.txt

軟連接

軟連接也叫做符號鏈接,類似於windows的快捷方式。

常用於安裝軟體的快捷方式配置,如python,nginx等

ln -s 目標文件  軟連接名

1.存在文件/tmp/test.txt
[root@master tmp]# ls -l
-rw-r--r-- 1 root root     10 10月 15 21:23 test.txt

2.在/home目錄中建立軟連接,指向/tmp/test.txt文件
ln -s /tmp/test.txt my_test

3.查看軟連接信息
lrwxrwxrwx 1 root root 13 10月 15 21:35 my_test -> /tmp/test.txt

4.通過軟連接查看文件
cat my_test

my_test只是/tmp/test.txt的一個別名,因此刪除my_test不會影響/tmp/test.txt,但是刪除了本尊,
快捷方式就無意義不存在了

PS1變數

Linux命令提示符由PS1環境變數控制

[root@oldboy_python ~]# echo $PS1
[\u@\h \W]\$

可以自行調整全局變數/etc/profile文件用於永久生效 PS1='[\u@\h \W\t]\$'
\d  日期
\H  完整主機名
\h  主機名第一個名字
\t  時間24小時制HHMMSS
\T  時間12小時制
\A  時間24小時制HHMM
\u  當前用戶賬號名
\v  BASH的版本
\w  完整工作目錄
\W  利用basename取得工作目錄名
\#  下達的第幾個命令
\$  提示字元,root為#,普通用戶為$
PS1 > 變數名
$PS1 > 查看變數內容
PS1=新內容 重新賦值

變數賦值,查看
name='chaoge'
echo $name

PS1顯示ip地址
export PS1="[\u@\h `/sbin/ifconfig ens33 | sed -nr 's/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'` \w]\$

tar解壓命令

人們發明瞭各種各樣的包,無論是雙肩包,或者是裝在口袋,都是為了讓“文件”更方便攜帶。linux的文件打包工具最出名的是tar。

 tar 命令:用來壓縮和解壓文件。tar本身不具有壓縮功能。他是調用壓縮功能實現的

語法

tar(選項)(參數)
-A或--catenate:新增文件到以存在的備份文件;
-B:設置區塊大小;
-c或--create:建立新的備份文件;
-C <目錄>:這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。
-d:記錄文件的差別;
-x或--extract或--get:從備份文件中還原文件;
-t或--list:列出備份文件的內容;
-z或--gzip或--ungzip:通過gzip指令處理備份文件;
-Z或--compress或--uncompress:通過compress指令處理備份文件;
-f<備份文件>或--file=<備份文件>:指定備份文件;
-v或--verbose:顯示指令執行過程;
-r:添加文件到已經壓縮的文件;
-u:添加改變了和現有的文件到已經存在的壓縮文件;
-j:支持bzip2解壓文件;
-v:顯示操作過程;
-l:文件系統邊界設置;
-k:保留原有文件不覆蓋;
-m:保留文件不被覆蓋;
-w:確認壓縮文件的正確性;
-p或--same-permissions:用原來的文件許可權還原文件;
-P或--absolute-names:文件名使用絕對名稱,不移除文件名稱前的“/”號;
-N <日期格式> 或 --newer=<日期時間>:只將較指定日期更新的文件保存到備份文件里;
--exclude=<範本樣式>:排除符合範本樣式的文件。

實例

tar -zxvf Python-3.7.0b3.tgz #解壓

tar -czvf oldboy.txt.tar.gz oldboy.txt #壓縮oldboy.txt 
 
上述命令等於 以下兩條命令
tar -cvf oldboy.tar oldboy.txt
gzip oldboy.tar

tar -cf all_pic.tar *.jpg #壓縮當前目錄所有jpg結尾的文件

tar -xjf xx.tar.bz2  #解壓縮bz2結尾的文件

gzip命令

gzip用來壓縮文件,是個使用廣泛的壓縮程式,被壓縮的以".gz"擴展名
gzip可以壓縮較大的文件,以60%~70%壓縮率來節省磁碟空間

語法

-d或--decompress或----uncompress:解開壓縮文件;
-f或——force:強行壓縮文件。
-h或——help:線上幫助;
-l或——list:列出壓縮文件的相關信息;
-L或——license:顯示版本與版權信息;
-r或——recursive:遞歸處理,將指定目錄下的所有文件及子目錄一併處理;
-v或——verbose:顯示指令執行過程;

實例

壓縮當前目錄所有文件為.gz文件
gzip * 
把上例中每個壓縮的文件解壓,併列出詳細的信息
gzip -dv *

顯示壓縮文件的信息,並不解壓
gzip -l *
壓縮一個tar備份文件,擴展名是tar.gz
tar -cf my.tar my_first.py
gzip -r my.tar

netstat命令

netstat命令用來列印Linux中網路系統的狀態信息,可讓你得知整個Linux系統的網路情況。

語法【選項】

netstat [選項]
-t或--tcp:顯示TCP傳輸協議的連線狀況;
-u或--udp:顯示UDP傳輸協議的連線狀況;
-n或--numeric:直接使用ip地址,而不通過功能變數名稱伺服器;
-l或--listening:顯示監控中的伺服器的Socket;
-p或--programs:顯示正在使用Socket的程式識別碼和程式名稱;
-a或--all:顯示所有連線中的Socket;

實例

[root@oldboy_python ~ 10:21:59]#netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      814/sshd            
tcp6       0      0 :::111                  :::*                    LISTEN      2703/rpcbind        
tcp6       0      0 :::3306                 :::*                    LISTEN      29269/mysqld        
udp        0      0 0.0.0.0:758             0.0.0.0:*                           2703/rpcbind        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           2703/rpcbind        
udp        0      0 10.141.32.137:123       0.0.0.0:*                           484/ntpd            
udp        0      0 127.0.0.1:123           0.0.0.0:*                           484/ntpd            
udp        0      0 0.0.0.0:123             0.0.0.0:*                           484/ntpd            
udp6       0      0 :::758                  :::*                                2703/rpcbind        
udp6       0      0 :::111                  :::*                                2703/rpcbind        
udp6       0      0 :::123                  :::*                                484/ntpd  

ps命令

ps 命令用於查看系統中的進程狀態,格式為“ps [參數]”。

ps  命令常用參數
-a     顯示所有進程
-u     用戶以及其他詳細信息
-x    顯示沒有控制終端的進程

Kill命令

kill命令用來刪除執行中的程式或工作。kill可將指定的信息送至程式。

選項

-a:當處理當前進程時,不限制命令名和進程號的對應關係;
-l <信息編號>:若不加<信息編號>選項,則-l參數會列出全部的信息名稱;
-p:指定kill 命令只列印相關進程的進程號,而不發送任何信號;
-s <信息名稱或編號>:指定要送出的信息;
-u:指定用戶。

只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權利忽略,下麵是常用的信號:

HUP     1    終端斷線
INT     2    中斷(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
TERM   15    終止
KILL    9    強制終止
CONT   18    繼續(與STOP相反, fg/bg命令)
STOP   19    暫停(同 Ctrl + Z)

實例

先用ps查找進程,然後用kill殺掉:
ps -ef | grep vim
root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim

kill 3268

killall命令

通常來講,複雜軟體的服務程式會有多個進程協同為用戶提供服務,如果逐個去結束這 些進程會比較麻煩,此時可以使用 killall 命令來批量結束某個服務程式帶有的全部進程。
例如nginx啟動後有2個進程
killall nginx 

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

-Advertisement-
Play Games
更多相關文章
  • memblock演算法是linux內核初始化階段的一個記憶體分配器(它取代了原來的bootmem演算法),實現較為簡單。負責page allocator初始化之前的記憶體管理和分配請求。 分析memblock演算法,可以從幾點入手: 1. memblock演算法初始化; 2. memblock演算法管理記憶體的申請 ...
  • [toc] ansible jinja2模板概述 ansible允許jinja2模板中使用條件判斷和迴圈,但是不允許在playbook中使用 ansible jinja2模板使用 基本語法 jinja2模板邏輯判斷 jinja2示例 編輯playbook 準備motd.j2 執行playbook a ...
  • ansible 流程式控制制 使用when判斷主機名 2.使用when判斷系統 3.使用when判斷系統版本 4.使用註冊變數對返回值進行判斷 ansible迴圈語句 1.with_items 2.變數迴圈 3.字典迴圈 ansible handlers(觸發器) 註意: 1.無論多少個task通知了相 ...
  • 一、下載、上傳鏡像 1:下載安裝centos鏡像 語法:docker 【參數】【鏡像名稱】 [root@host1 ~]# docker pull centos Using default tag: latest latest: Pulling from library/centos a02a493 ...
  • 一、docker介紹 1:docker官網 www.docker.com 2:github https://github.com/docker/docker.github.io 3:開源的容器引擎,可以讓開發者打包應用以及依賴的庫,然後發佈到任何流行的linux發行版上,移植很方便由go語言編寫,基 ...
  • DNS在linux客戶端下解析問題:https://wiki.archlinux.org/index.php/OpenVPN#DNS 1、在OpenVPN服務端配置文件開啟pushDNS 註意:填寫內網DNS伺服器地址 2、在客戶端配文件添加參數 3、驗證 在windows上openvpn的虛擬網卡 ...
  • 一、touch:創建文件 進入相關的目錄,使用touch 文件名 1 keshengtao@LAPTOP-F9AFU4OK:~$ touch kst.py 2 keshengtao@LAPTOP-F9AFU4OK:~$ ls 3 kst.py 4 keshengtao@LAPTOP-F9AFU4OK ...
  • 一、單片機最小系統一般包括以下幾部分: 1、電源 2、中央處理器 3、時鐘電路 4、複位電路 二、以下是自己畫的51單片機教學板 1、電源電路 也就是為了提供板子所使用的5V和3.3V電壓,這裡我使用的是USB輸入5V,然後通過AMS1117_3_3晶元電壓轉換晶元轉換為3.3V,畫原理圖時註意把電 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...