linux經常使用命令與系統管理經常使用命令

linux命令:
切換用戶:
開啓ftp服務:service vsftpd start
開啓ssh服務:service sshd start
普通用戶切換到超級用戶:su root
logout:(註銷)
uname -a:查看系統命令
echo $var-name:查看環境變量取值
unset vat-name:刪除某個環境變量(該命令只是從當前用戶進程中刪除,不會從文件/etc/profile刪除)
rz:將windows文件上傳至linux 協議爲ssh 端口號:22
shutdown -r now(當即關機並重啓)
ifconfig:(查看Ip地址)
網絡重啓:(service network restart)
關閉網絡:service network stop
開啓網絡:service network start
圖形界面到文本界面:shirt+ctrl+alt+f4
文本切換到圖形:alt+f7
reboot:重啓
clear:清屏
ping:檢測網絡的通斷
查看系統進程:top
查看cpu、內存佔用 :ps -aux
查看端口:netstat -a -u -t
ls -al (查看 目錄下全部文件的詳細信息)
cd(切換目錄):
cd ..(返回上一層目錄)
cd .(跳轉至當前目錄)
cd -(返回上次目錄)
pwd(查看當前目錄)
用戶和組:
whoami(查看當前登陸用戶)
useradd(新建用戶)
usermod(修改用戶屬性):
-u(修改用戶Id)、 -l(修改用戶名)、 -c(修改用戶備註)、 -g(修改用戶所屬羣組)
cat /etc/passwd (查看用戶)
groupadd(新建羣組)
groupmod(修改羣組屬性) :
-g(修改羣組Id)、 -n(修改羣組名稱)
cat /etc/group(查看羣組)
文件和文件夾:
vi (文本編輯器:可建立文本文件並編輯) aaa bbb:可同時打開多個文件 n:切換到下一個文件 N:切換到上一個文件
vi下的三個模式:使用vi命令後默認進入vi的命令(command mode)模式:這個模式可使用文本複製與刪除命令以及預覽文件 nyy:複製n行 p粘貼 ndd:刪除n行
按i(insert mode)進入vi的可寫入模式、此時能夠對文本進行編輯且只能按esc鍵退出該模式切換到命令模式下,其餘的按鍵均視爲輸入的內容
在命令模式下可按「:」進入vi的底線命令模式(last line mode) 在這個命令下能夠保存文件「:q」
強制退出:q! 、保存並退出:wq 、 查找內容:("/xx":從頭至尾查找,n查找下一個,N返回上一個
「?xx」:從尾到頭查找,n查找下一個,N返回上一個) 替換內容:s/p1/p2/g:將光標所在行的「p1」替換爲「p2」 、g/p1/s//p2/g:將文件中的全部「p1」替換爲"p2"
touch(建立空白文件) aaa bbb:可同時建立多個文件
rm(刪除文件) rm -rf (強制刪除文件與文件夾)
mkdir(建立文件夾) -p:建立並遞歸目錄 如:mkdir -p kkk/jjj
rmdir(刪除文件夾)
mv(重命名、剪貼)
cp(複製): -r 對目錄進行復制 -a複製源文件的全部屬性
find(查找):
find -name(按文件名進行查找)可指定路徑進行查詢 如: find -name /root a.txt
find-size(按文件大小進行查找) 也可指定路徑查詢 如: find -size /root 2k
grep(字符串查找):\> \<( 精確匹配)
-n(顯示文件代碼行) -i(不區分大小寫)
通配符:
.表示1個或多個任意字符,能夠爲空格
* 表示0個或多個字符(一般配合文件名使用)
文件類型: c =character (字符設備文件) b=block(塊設備文件)
file(用來識別文件類型) file 文件名 -b 不輸出文件名稱
echo(查看文件行變量取值或者把字符串輸入到文件中):
\c:不換行 \t:跳格 \n:換行(linux中,必須-e選項來使轉義符生效)
sort(排序命令):講文件中的字符順序排列起來,但不會影響源文件的內容
wc(統計命令):
-c(統計字符數) -m(統計字符數)
-l(統計行數) -w(統計字數)
exec(可執行操做):將前面命令的輸出做爲後面命令的操做對象 格式:-exec 命令 {}\;
cat(查看命令): -n:對全部輸出進行編號 -b:與-n類似,但不顯示空白行
more(分頁顯示文件內容) 按空格:顯示下一頁內容 回車鍵:顯示下一行內容
b:顯示上一頁內容
head:輸出文件的前幾行數據 head -n 文件名
tail:輸出文件的最後幾行數據 tail -n 文件名 -f動態查詢
chmod(修改文件權限) rwx——r爲讀取權限 w爲寫入權限 x爲可執行權限
chgrp(修改文件所屬羣組) chgrp 組名 文件名
chown(修改文件擁有者) chown 用戶名 文件名
ln(爲一個文件在另外一個位置創建一個同步的連接:默認建立硬連接 -s建立軟鏈接) l:符號連接文件
格式 :ln file1 file2(file2是file1的連接文件)
硬連接:刪除源文件後連接文件依舊可使用
軟連接:至關於windows中的快捷方式 刪除源文件後連接文件不能使用
gzip:壓縮文件命令,不能壓縮文件目錄,不會保存源文件
-r*壓縮當前目錄下全部文件
-g 解壓壓縮包中的文件
gunzip:從壓縮包中提取某個文件
tar:文件打包命令
-xvf:文件解包
-cvf:文件打包
-zxvf:解包並解壓縮
-zcvf:打包並壓縮
手動配置ip地址:
一、在命令行下運行setup
二、vi /etc/sysconfig/network-scripts/ifcfg-eth0
ssh:用於遠程鏈接電腦 工具:secureCRT,putty 端口號:22
file:識別文件類型
alias:給命令取別名 語法: alias rm="rm -i"
export:設置環境變量
source:加載環境變量
kill -9:結束進程
diff:比較兩個文件的不一樣
fdisk -l:列出全部分區
df -h:查看磁盤使用狀況
du -h:查看指定文件的存儲信息
mount:將分區掛載至設備 語法:mount 分區路徑 掛載路徑(/mnt/cdrom)
umount:卸載掛載設備 語法: umount 路徑(/mnt/cdrom)
程序安裝命令:
分爲三種:-tar、-rpm、-dpkg
-tar安裝:通用安裝格式
一、解包文件二、執行./comfigure準備編譯
三、make命令進行編譯四、make install安裝應用
五、make clean 刪除安裝時的臨時文件六、make uninsatall 卸載應用
-rpm安裝:是reahat linux提供的一種封裝格式
一、查詢已安裝的rpm包:rpm -q 軟件名稱
二、安裝 rpm -ivh 軟件名稱
三、卸載rpm -e 軟件名稱(無需後綴)
四、升級rpm rpm -uvh 軟件名稱
dpkg包安裝:
一、安裝dpkg dpkg 軟件名稱
二、卸載dpkg dpkg 軟件名稱(無需後綴)java

__________________________________________________python

系統管理:linux

1. curl
curl 用於傳輸一個 URL。可使用這條命令用於測試應用程序的端點或與上游服務端點的鏈接。curl 還可用於檢查你的應用程序是否能鏈接到其餘服務,例如數據庫,或檢查您的服務是否處於健康的狀態。
舉個例子,假如你的應用程序拋出一個 HTTP 500 錯誤,表示沒法訪問 MongoDB 數據庫:
$ curl -I -s myapplication:5000

HTTP/1.0 500 INTERNAL SERVER ERROR
-I 選項用於顯示頭信息,-s 選項表示使用靜默模式,不顯示錯誤和進度。檢查數據庫的端點是否正確:
$ curl -I -s database:27017

HTTP/1.0 200 OK
那麼多是什麼問題呢? 檢查您的應用程序是否能夠訪問數據庫之外的其餘位置:
$ curl -I -s https://opensource.com

HTTP/1.1 200 OK
看起來這沒問題,如今嘗試訪問數據庫。您的應用程序正在使用數據庫的主機名,所以請先嚐試:
$ curl database:27017

curl: (6) Couldn't resolve host 'database'
這表示您的應用程序沒法解析數據庫,由於數據庫的 URL 不可用或主機(容器或VM)沒有可用於解析主機名的域名服務器。
2. python -m json.tool / jq
使用 curl 後,API 調用的輸出可讀性可能較差。有時候,你但願將生成的 JSON 數據格式化輸出以查找特定的條目。Python 有一個內置的庫可幫助您實現這個需求。可使用 python -m json.tool 來縮進和組織 JSON。要使用 Python 的 JSON 模塊,須要使用管道機制,將 JSON 文件的輸出做爲輸入,寫入到 python -m json.tool 命令行。
$ cat test.json
{"title":"Person","type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"age":{"description":"Age in years","type":"integer","minimum":0}},"required":["firstName","lastName"]}
要使用 Python 庫,使用 -m (module) 選項將輸出內容和 Python 庫組合成管道。
$ cat test.json | python -m json.tool
{
"properties": {
"age": {
"description": "Age in years",
"minimum": 0,
"type": "integer"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
}
},
"required": [
"firstName",
"lastName"
],
"title": "Person",
"type": "object"
}
對於更高級的 JSON 解析,能夠安裝 jq。jq 提供了一些從 JSON 輸入中提取特定值的選項。要像上面的 Python 模塊同樣將 JSON 輸出格式化,只需將 jq 應用到輸出便可。
$ cat test.json | jq
{
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"description": "Age in years",
"type": "integer",
"minimum": 0
}
},
"required": [
"firstName",
"lastName"
]
}
3. ls
ls 用於列出目錄中的文件,系統管理員和開發者會常用這個命令。在容器空間中,這條命令能夠幫助肯定容器鏡像中的目錄和文件。除了查找文件,ls 還能夠用於檢查權限。下面的示例中,因爲權限問題,你不能運行 myapp。當你使用 ls -l 檢查權限時,你會發現它的權限在 -rw-r--r-- 中沒有"x",只有讀寫的權限。
$ ./myapp
bash: ./myapp: Permission denied
$ ls -l myapp
-rw-r--r--. 1 root root 33 Jul 21 18:36 myapp
4. tail
tail 顯示文件的最後一部份內容。一般狀況下,你不須要瀏覽每行日誌以進行故障排除。而是須要檢查日誌中對應用程序的最新請求的說明。例如,當你向 Apache HTTP 服務器發起請求時,可使用 tail 來檢查日誌中發生的狀況。正則表達式

使用 tail -f 來跟蹤日誌文件並在發起請求時查看它們。
-f 選項表示跟隨的意思,它可在日誌被寫入文件時輸出它們。下面的示例具備每隔幾秒訪問端點的後臺腳本,日誌會記錄請求。除了實時跟蹤日誌,還可使用 tail 帶上 -n 選項來查看文件的最後 100 行。
$ tail -n 100 /var/log/httpd/access_log
5. cat
cat 主要用於查看文件內容和合並文件。你可能會使用 cat 來檢查依賴項文件的內容,或確認已在本地構建的應用程序的版本。
$ cat requirements.txt
flask
flask_pymongo
上面的示例檢查您的 Python Flask 應用程序是否已將 Flask 列爲依賴項。
6. grep
grep 能使用特定模式匹配(包括正則表達式)搜索文本。若是你在另外一條命令的輸出中尋找特定的模式,grep 會高亮顯示相關的行。可以使用這條命令來搜索日誌文件以及特定的進程等。若是想查看 Apache Tomcat 是否啓動,你可能會命令行的數量給淹沒。但講輸出的內容和 grep 命令組合成管道,能夠將表示服務器已啓動的行獨立出來。
$ cat tomcat.log | grep org.apache.catalina.startup.Catalina.start
01-Jul-2017 18:03:47.542 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 681 ms
7. ps
ps 用於查看進程的各類狀態信息。使用該命令可肯定正在運行的應用程序或確認預期的進程。例如,若是要檢查正在運行的 Tomcat Web 服務器,可以使用帶有選項的 ps 來獲取 Tomcat 的進程 ID。
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 2 18:55 ? 00:00:02 /docker-java-home/jre/bi
root 59 0 0 18:55 pts/0 00:00:00 /bin/sh
root 75 59 0 18:57 pts/0 00:00:00 ps -ef
爲了更好的易讀性,可以使用 grep 和 ps 組合成管道。
$ ps -ef | grep tomcat
root 1 0 1 18:55 ? 00:00:02 /docker-java-home/jre/bi
8. env
env 用於列出全部環境變量及爲其賦值。在故障排除期間,你可能會發現須要檢查是否有錯誤的環境變量來阻止應用程序啓動。在下面的示例中,該命令用於檢查程序主機上設置的環境變量。
$ env
PYTHON_PIP_VERSION=9.0.1
HOME=/root
DB_NAME=test
PATH=/usr/local/bin:/usr/local/sbin
LANG=C.UTF-8
PYTHON_VERSION=3.4.6
PWD=/
DB_URI=mongodb://database:27017/test
請注意,該應用程序正在使用 Python 3,並具備鏈接到 MongoDB 數據庫的環境變量。
9. top
top 用於顯示系統中各個進程的信息和資源佔用情況,相似於 Windows 的任務管理器。使用該命令可肯定哪些進程正在運行,以及它們消耗了多少的內存和 CPU。一種常見的狀況是當你運行一個應用程序時,它在一分鐘後掛掉。這時,你首先檢查應用程序的返回錯誤,發現是一個內存錯誤。
$ tail myapp.log
Traceback (most recent call last):
MemoryError
你的應用是否真的內存不足?要確認這個問題,可以使用 top 來查看應用程序消耗多少 CPU 和內存。當使用 top 命令後,您注意到一個 Python 應用程序使用了大部分的 CPU,其內存使用量也迅速攀升。當它運行時,若是進程是你的應用程序,則按"C"鍵來查看完整命令並進行逆向工程。發現原來是你的內存密集型應用程序(memeater.py)。當你的應用程序已經用盡內存,系統會殺掉它並返回一個內存不足(OOM)的錯誤。mongodb

應用程序的內存和 CPU 使用量增長,最終由於內存不足而被殺掉。docker

經過按下"C"鍵,能夠看到啓動該應用程序的完整命令
除了檢查應用程序,還可使用 top 來調試其餘使用 CPU 或內存的進程。
10. netstat
netstat 用於顯示網絡狀態信息。該命令可顯示正在使用的網絡端口及其傳入鏈接。可是,netstat 在 Linux 中不能開箱即用。若是須要安裝它,須要在 net-tools 包中找到它。做爲在本地進行試驗或將應用程序推送到主機的開發者,可能會收到端口已被分配或地址已被使用的錯誤。使用 netstat 獲得協議、進程和端口這些信息,下圖代表 Apache HTTP 服務器已經在下面的主機上使用了 80 端口。shell

使用 netstat -tulpn 代表 Apache 已經在這臺機器上使用了 80 端口。
11. ip address
若是 ip address 在你的主機上不能使用,必須使用 iproute2 包進行安裝。ip address 用於顯示應用程序的主機接口和 IP 地址。可以使用 ip address 來驗證你的容器或主機的 IP 地址。例如,當你的容器鏈接到兩個網絡時,ip address 可顯示哪一個接口鏈接到了哪一個網絡。對於簡單的檢查,能夠隨時使用 ip address 命令獲取主機的 IP 地址。下面的示例展現了在接口 eth0 上的 Web 層容器的 IP 地址爲 172.17.0.2數據庫

使用 ip address 顯示 eth0 接口的 IP 地址爲 172.17.0.2
12. lsof
lsof 用於列出當前系統打開的文件(list open files)。在某些 Linux 系統中,可能須要使用 lsof 包來安裝lsof。在 Linux 中,幾乎任何和系統的交互都被視爲一個文件。所以,若是你的應用程序寫入文件或代開網絡鏈接,lsof 將會把這個交互映射爲一個文件。與 netstat 相似,可以使用 lsof 來檢查偵聽端口。例如,若是要檢查 80 端口是否正在被使用,可以使用 lsof 來檢查哪一個進程正在使用它。下面的示例中,能夠看到 httpd (Apache) 在 80 端口上偵聽。還可使用 lsof 來檢查 httpd 的進程ID,檢查 Web 服務器的二進制文件所在位置(/usr/sbin/httpd)。apache

Lsof 代表了 httpd 在 80 端口上偵聽。檢查 httpd 的進程ID還能夠顯示全部須要運行的文件httpd。
打開文件列表中的打開文件的名稱有助於肯定進程的來源,特別是 Apache。
13. df
可使用 df 顯示空閒的磁盤空間(display free disk space)以排查磁盤空間問題。擋在容器管理器上運行應用程序時,可能會收到一條錯誤信息,提示容器主機上缺乏可用空間。雖然磁盤空間應該由系統管理程序來管理和優化,你仍可使用 df 找出目錄中的現有空間並確認是否沒有空間。json

Df 顯示每一個文件系統的磁盤空間、絕對空間以及其可用性。
-h 選項表示以可讀性較高的方式來顯示信息,上面的例子表示這個主機具備大量的磁盤空間。
14. du
du 命令也是用於查看使用空間的,可是與 df 命令不一樣的是 du 命令是對文件和目錄磁盤使用的空間的查看,要獲取有關哪些文件在目錄中使用磁盤空間的更多詳細信息,可使用 du 命令,和 df 命令仍是有一些區別的。例如,你想了解那個日誌文件佔用 /var/log 目錄最多的空間,可使用 du 命令加上 -h 選項和用於獲取總大小的 -s 選項。
$ du -sh /var/log/*
1.8M /var/log/anaconda
384K /var/log/audit
4.0K /var/log/boot.log
0 /var/log/chrony
4.0K /var/log/cron
4.0K /var/log/maillog
64K /var/log/messages
上面的示例中顯示了 /var/log 下的的最大目錄爲 /var/log/audit。能夠將 du 和 df 搭配使用,以肯定在應用程序的主機上使用的磁盤空間。
15. id
要檢查運行應用程序的用戶,可以使用 id 命令來返回用戶身份。id 命令能夠顯示真實有效的用戶ID(UID)和組ID(GID)。下面的示例使用 Vagrant 來測試應用程序並隔離其開發環境。登陸進 Vagrant 盒子後,若是嘗試安裝 Apache HTTP Server(依賴關係),系統會提示你須要以 root 身份執行該命令。要檢查你的用戶ID和組ID,使用id 命令,會發現你正在"vagrant"組中以"vagrant"用戶身份運行。
$ yum -y install httpd
Loaded plugins: fastestmirror
You need to be root to perform this command.
$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
要解決此問題,必須以超級用戶的身份運行該命令,這將提供提高的權限。
16. chmod
chmod 命令用來變動文件或目錄的權限。當你在主機上首次運行應用程序的二進制文件時,可能會收到錯誤提示信息「拒絕訪問」。如 ls 的示例所示,能夠用於檢查應用程序二進制文件的權限。
$ ls -l
total 4
-rw-rw-r--. 1 vagrant vagrant 34 Jul 11 02:17 test.sh
這代表您沒有權限(沒有「x」)來運行二進制文件。chmod 能夠修改權限,使的用戶可以運行二進制文件。
$ chmod +x test.sh
[vagrant@localhost ~]$ ls -l
total 4
-rwxrwxr-x. 1 vagrant vagrant 34 Jul 11 02:17 test.sh
如例子所示,這將更新權限,使其具備可執行的權限。如今當你嘗試執行二進制文件時,應用程序不會拋出拒絕訪問的錯誤。當將二進制文件加載到容器時,Chmod 可能頗有用。它能保證容器具備合適的權限以執行二進制文件。
17. dig / nslookup
dig 命令是經常使用的域名查詢工具,能夠用來測試域名系統工做是否正常。域名服務器(DNS)有助於將 URL 解析爲一組應用程序服務器。然而,你會發現有些 URL 不能被解析,這會致使應用程序的鏈接問題。例如,假如你嘗試從應用程序的主機訪問你的數據庫。你收到一個"不能解析"的錯誤。要進行故障排查,你嘗試使用 dig(DNS 查詢工具)或 nslookup(查詢 Internet 域名服務器)來肯定應用程序彷佛沒法解析數據的緣由。
$ nslookup mydatabase
Server: 10.0.2.3
Address: 10.0.2.3#53

** server can't find mydatabase: NXDOMAIN
使用 nslookup 顯示沒法解析 mydatabase。嘗試使用 dig 解決,但還是相同的結果。
$ dig mydatabase

; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 <<>> mydatabase
;; global options: +cmd
;; connection timed out; no servers could be reached
這些錯誤多是由許多不一樣的問題引發的。若是沒法調試出根本緣由,與系統管理員聯繫以進行更多的調查。對於本地測試,這些問題可能表示你的主機的域名服務器未正確配置。要使用這些命令,須要安裝 BIND Utilities 包。
18. iptables
iptables 用於阻止或容許 Linux 主機上的流量,用於 IP 包過濾器管理,相似於網絡防火牆。此工具可阻止某些應用程序接收或發送請求。更具體地說,若是您的應用程序難以訪問另外一個端點,可能已被 iptables 拒絕流量訪問該端點。例如,假設您的應用程序的主機沒法訪問 Opensource.com,您使用 curl 來測試鏈接。
$ curl -vvv opensource.com
* About to connect() to opensource.com port 80 (#0)
* Trying 54.204.39.132...
* Connection timed out
* Failed connect to opensource.com:80; Connection timed out
* Closing connection 0
curl: (7) Failed connect to opensource.com:80; Connection timed out
鏈接超時。您懷疑某些東西可能會阻塞流量,所以您使用 -S 選項顯示 iptables 規則。
$ iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --sport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT
前三個規則顯示,默認狀況下流量已被丟棄。剩下的規則表示容許 SSH 和 DNS 流量。在這種狀況下,若是須要容許流量到外部端點的規則,請跟上 sysadmin。若是這是用於本地開發或測試的主機,可以使用 iptables 命令來容許合適的流量。添加容許到主機的流量的規則時必定要謹慎。
19. sestatus
一般會在企業管理的應用程序主機上使用 SELinux(一個 Linux 安全模塊)。SELinux 對主機上運行的進程提供最低權限的訪問,防止潛在的惡意進程訪問系統上的重要文件。某些狀況下,應用程序須要訪問特定文件,但可能會發生錯誤。要檢查 SELinux 是否阻止了應用程序,使用 tail 和 grep 在 /var/log/audit 日誌記錄中查找"denied"(被拒絕)的信息。不然,使用 sestatus 來檢查是否啓動了 SELinux。
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
上面的輸出表示應用程序的主機已啓用 SELinux。在本地開發環境中,能夠更新 SELinux 使得權限更寬鬆。
20. history
當你使用大量的命令進行測試和調試時,可能會忘記有用的命令。每一個 shell 都有一個 history 命令的變體。它可顯示自會話開始以來使用的命令的歷史記錄。可使用 history 來記錄用來排除應用程序故障的命令。history 命令用於顯示指定數目的指令命令,讀取歷史命令文件中的目錄到歷史命令緩衝區和將歷史命令緩衝區中的目錄寫入命令文件。
$ history
1 clear
2 df -h
3 du
若是但願執行以前歷史記錄中的命令,但又不想從新輸入,該怎麼辦?使用符號 ! 便可,可使用符號 ! 執行指定序號的歷史命令。例如,要執行第 2 個歷史命令,則輸入!2,

在須要從新執行的命令的指定編號前添加 ! 便可從新執行這些基本命令能加強排查故障的專業技能,可檢查爲何應用程序能夠在一個開發環境中工做,而在另外一個開發環境中則不能夠。許多系統管理員使用這些命令來調試系統問題。瞭解一些有用的故障排查命令可幫助解決應用程序的問題。來自:https://opensource.com

相關文章
相關標籤/搜索