[TOC]
## 1. ubuntu 下vim修改tab鍵為4個空格
`vim /etc/vim/vimrc`
* 加入三行內容:
~~~
set ts=4
set expandtab
set autoindent
~~~
## 3. 查看局域網對應的外網IP
~~~
# 兩種命令都可以,不起作用時,換著用
curl ifconfig.me
curl ifconfig.me/ip
~~~
## 4. 復制虛擬機
1. 復制vdi或者vmdx文件到一個新的目錄。

其中bigdata01.vdi是由base.vdi復制過來的
2. 進入到virtualbox的安裝目錄,執行命令,改變UUID
`vboxmanage internalcommands sethduuid E:\虛擬機\bigdata01.vdi`

3.使用VirtualBox新建虛擬機,選擇磁盤的時候,選擇已有的磁盤,然后選中第一步中拷貝的文件。
4.建立好之后就可以正常使用了。
## 5. 查看Linux的CPU個數
~~~
# 總核數 = 物理CPU個數 X 每顆物理CPU的核數
# 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數
# 查看物理CPU個數
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每個物理CPU中core的個數(即核數)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看邏輯CPU的個數
cat /proc/cpuinfo| grep "processor"| wc -l
# CPU信息
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
~~~
## 6. 查看某一進程占用CPU和內存
`top -p pid`
## 7. 查看端口是否被占用
~~~
netstat -tunlp |grep 7885
~~~

紅圈 端口和占用進程
## 8. diff 找兩個文件的不同
### 8.1 參數
> * diff還提供了一些有用的參數來控制比較行為與輸出結果,一些常用的參數如下:
> -b --ignore-space-change 忽略空格,如果兩行進行比較,多個連續的空格會被當作一個空格處理,同時會忽略掉行尾的空格差異。
> -w --ignore-all-space 忽略所有空格,忽略范圍比-b更大,包括很多不可見的字符都會忽略。
> -B 忽略空白行。
> -y 輸出兩列,一個文件一列,有點類似GUI的輸出外觀了,這種方式輸出更加直觀。
> -W 大寫W,當指定-y的時候設置列的寬度,默認是130
> -x, --exclude=PAT 比較目錄的時候排除指定PAT模式的文件名的比較
> -i, --ignore-case 忽略兩個文件中大小寫的不同
> -e 將比較的結果保存成一個ed腳本,之后ed程序可以執行該腳本文件,從而將file1修改成與file2的內容相同,這一般在patch的時候有用。
> diff -e 1.txt 2.txt > script.txt
> 這樣就是生成了一個ed可以執行的腳本文件script.txt,生成腳本文件之后我們還需要做一個操作, 在腳本文件末尾添加ed的write指令,只需要執行 echo "w" >>script.txt 將w指令附加到腳本文件的最后一行即可。
> 那么如何應用該腳本文件呢,可以這樣使用:
> ed - 1.txt < script.txt
> 注意中間的 – 符號表示從標準輸入中讀取,而 < script.txt 則重定向script.txt的內容到標準輸入。這樣執行之后1.txt的內容將與2.txt完全相同。
### 8.2 實例
> diff分析兩個文件,并輸出兩個文件的不同的行。**diff的輸出結果表明需要對一個文件做怎樣的操作之后才能與第二個文件相匹配**【或者這么理解:與第一個文件相比,第二個文件發生了那些變化】【git diff的結果輸出也是如此】。diff并不會改變文件的內容,但是diff可以輸出一個ed腳本來應用這些改變。
> 現在讓我們來看一下diff是如何工作的,假設有兩個文件:
//file1.txt
~~~
I need to buy apples.
I need to run the laundry.
I need to wash the dog.
I need to get the car detailed.
~~~
//file2.txt
~~~
I need to buy apples.
I need to do the laundry.
I need to wash the car.
I need to get the dog detailed.
~~~
我們使用diff比較他們的不同,輸入命令
`diff file1.txt file2.txt`
輸出如下結果:
~~~
2,4c2,4
< I need to run the laundry.
< I need to wash the dog.
< I need to get the car detailed.
> I need to do the laundry.
> I need to wash the car.
> I need to get the dog detailed.
~~~
我們來說明一下該輸出結果的含義,要明白diff比較結果的含義,我們必須牢記一點,diff描述兩個文件不同的方式是告訴我們怎么樣改變第一個文件之后與第二個文件匹配。我們看看上面的比較結果中的第一行 2,4c2,4 前面的數字2,4表示第一個文件中的行,中間有一個字母c表示需要在第一個文件上做的操作(a=add,c=change,d=delete),后面的數字2,4表示第二個文件中的行。
> 2,4c2,4 表示:
> 第一個文件中的第二行到第四行需要改變(c),才能和第二個文件一樣,操作有
> a=add 增加
> c=change 改變
> d=delete 刪除
> 接下來的內容則告訴我們需要修改的地方,前面帶 < 的部分表示左邊文件的第[2,4]行的內容,而帶> 的部分表示右邊文件的第[2,4]行的內容,中間的 --- 則是兩個文件內容的分隔符號。
>
## 9.查看系統版本
### 4.1 lsb_release -a
系統發行版本信息
LSB是Linux Standard Base的縮寫,lsb_release命令用來顯示LSB和特定版本的相關信息。此命令適用于所有的Linux發行版本。
~~~
lsb_release -a
~~~
~~~
No LSB modules are available.
Distributor ID: Ubuntu # 系統類別是ubuntu
Description: Ubuntu 14.04.5 LTS # 14年2月4月發布的穩定版本,LTS是Long Term Support:長時間支持版本 三年 ,一般是18個月
Release: 14.04 # 發行版本號
Codename: trusty # ubuntu的代號名稱
~~~
### 4.2 cat /proc/version查看內核版本
~~~
cat /proc/version
Linux version 4.4.0-31-generic (buildd@lgw01-43) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016
~~~
~~~
Linux version 4.4.0-31-generic 內核版本號
gcc version 4.8.4 gcc編譯器版本號
Ubuntu 4.8.4-2ubuntu1~14.04.3 Ubuntu版本號
~~~
### 4.3 cat /etc/os-release
~~~
[root@localhost ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
~~~
## 10. 用戶管理
> 1. 管理員用戶:
> UID為0-系統的管理員用戶(root)。
> 2. 系統用戶:
> UID為1~999- Linux系統為了避免因某個服務程序出現漏洞而被黑客提權至整臺服務器,默認服務程序會有獨立的系統用戶負責運行,進而有效控制被破壞范圍。
> 3. 普通用戶:
> UID從1000開始-是由管理員創建的用于日常工作的用戶。
### 10.1 adduser
adduser 【用戶名】,創建用戶并且同時創建和用戶同名的組,然后將用戶加入這個組,如果這個組存在報錯
~~~
root@ubuntu:~# adduser rocket
Adding user `rocket' ...
Adding new group `rocket' (1004) ...
Adding new user `rocket' (1004) with group `rocket' ...
Creating home directory `/home/rocket' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for rocket
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
~~~
### 10.2 useradd
useradd命令用于Linux中創建的新的系統用戶。useradd可用來建立用戶帳號。帳號建好之后,再用passwd設定帳號的密碼.而可用userdel刪除帳號。使用useradd指令所建立的帳號,實際上是保存在/etc/passwd文本文件中。
useradd(選項)(參數)
選項:
~~~
-c<備注>:加上備注文字。備注文字會保存在passwd的備注欄位中;
-d<登入目錄>:指定用戶登入時的啟始目錄;
-D:變更預設值;
-e<有效期限>:指定帳號的有效期限;
-f<緩沖天數>:指定在密碼過期后多少天即關閉該帳號;
-g<群組>:指定用戶所屬的群組;
-G<群組>:指定用戶所屬的附加群組;
-m:自動建立用戶的登入目錄;
-M:不要自動建立用戶的登入目錄;
-n:取消建立以用戶名稱為名的群組;
-r:建立系統帳號;
-s<shell>:指定用戶登入后所使用的shell;
-u<uid>:指定用戶id。
~~~
參數:
要創建的用戶
~~~
useradd –g sales jack –G company,employees //-g:加入主要組、-G:加入次要組
~~~
家目錄
~~~
useradd -d /home/applog/usfm -m usfm
~~~
禁止登陸
~~~
useradd -M -s /sbin/nologin user
-M:不創建家目錄
-s:指定用戶登陸時使用的shell,nologin就是登陸不了
~~~
## 11. 文件管理
### 11.1 文件區分
Linux中一切皆為文件,并且使用符號來區分文件的種類:
> 1. -:普通文件。
> 2. d:目錄文件。
> 3. l:鏈接文件。
> 4. b:塊設備文件。
> 5. c:字符設備文件。
> 6. p:管道文件。
>
### 11.2 文件權限
讀、寫、執行用字符rwx表示,也可以用4、2、1數字表示
#### 11.2.1 文件權限
##### 1. r-讀
對文件的內容具有讀取的權限
##### 2. w-寫
可以對文件進行修改、刪除、新增功能
##### 3. x-執行
文件是一個可執行的腳本
#### 11.2.2 目錄權限
### 11.3 特殊權限
#### 11.3.1 setfacl命令
setfacl命令用于管理文件的ACL規則,格式為“setfacl [參數] 文件名稱”。文件的ACL提供的是在所有者、所屬組、其他人的讀/寫/執行權限之外的特殊權限控制,使用setfacl命令可以針對單一用戶或用戶組、單一文件或目錄來進行讀/寫/執行權限的控制。其中,針對目錄文件需要使用-R遞歸參數;針對普通文件則使用-m參數;如果想要刪除某個文件的ACL,則可以使用-b參數。下面來設置用戶在/root目錄上的權限:
~~~
[root@localhost ~]# adduser tuna
[root@localhost ~]# su - tuna
[tuna@localhost ~]$ ls
[tuna@localhost ~]$ ls -ld /root
dr-xr-x---. 3 root root 4096 6月 25 12:42 /root
[tuna@localhost ~]$ cd /root/
-bash: cd: /root/: 權限不夠
[tuna@localhost ~]$ 登出
[root@localhost ~]# setfacl -Rm u:tuna:rwx /root
[root@localhost ~]# su - tuna
上一次登錄:一 6月 25 13:24:43 CST 2018pts/4 上
[tuna@localhost ~]$ cd /root/
[tuna@localhost root]$ ls
anaconda-ks.cfg mysql-community-devel-5.7.22-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.22-1.el7.x86_64.rpm
mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar mysql-community-embedded-5.7.22-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.22-1.el7.x86_64.rpm
mysqlall.sql mysql-community-embedded-compat-5.7.22-1.el7.x86_64.rpm mysql-community-server-5.7.22-1.el7.x86_64.rpm
mysql-community-client-5.7.22-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.22-1.el7.x86_64.rpm mysql-community-server-minimal-5.7.22-1.el7.x86_64.rpm
mysql-community-common-5.7.22-1.el7.x86_64.rpm mysql-community-libs-5.7.22-1.el7.x86_64.rpm
~~~
用的ls命令是看不到ACL表信息的,但是卻可以看到文件的權限最后一個點(.)變成了加號(+),這就意味著該文件已經設置了ACL了。(上邊沒有為tuna用戶增加ACL規則時,是點)
~~~
[tuna@localhost root]$ ls -ld /root
dr-xrwx---+ 3 root root 4096 6月 25 12:42 /root
# 以前是
dr-xrwx---. 3 root root 4096 6月 25 12:42 /root
~~~
#### 11.3.2 getfacl命令
getfacl命令用于顯示文件上設置的ACL信息,格式為“getfacl 文件名稱”。Linux系統中的命令就是這么又可愛又好記。想要設置ACL,用的是setfacl命令;要想查看ACL,則用的是getfacl命令。下面使用getfacl命令顯示在root管理員家目錄上設置的所有ACL信息。
~~~
[tuna@localhost root]$ getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:tuna:rwx # 多了一個tuna用戶
group::r-x
mask::rwx
other::---
~~~
此時說名文件設置了ACL規則
### 11.4 文件隱藏屬性
> 1. Linux系統中的文件除了具備一般權限和特殊權限之外,還有一種隱藏權限,即被隱藏起來的權限,默認情況下不能直接被用戶發覺。
> 2. 有用戶曾經在生產環境和RHCE考試題目中碰到過明明權限充足但卻無法刪除某個文件的情況,或者僅能在日志文件中追加內容而不能修改或刪除內容,這在一定程度上阻止了黑客篡改系統日志的圖謀,因此這種“奇怪”的文件也保障了Linux系統的安全性。
> 3. 鎖定文件:對于文件來說不能被刪除、改名、設置。只有root可以使用
>
#### 14.1 chattr
命令用于設置文件的隱藏權限,格式為“chattr [參數] 文件”。如果想要把某個隱藏功能添加到文件上,則需要在命令后面追加“+參數”,如果想要把某個隱藏功能移出文件,則需要追加“-參數”。chattr命令中可供選擇的隱藏權限參數非常豐富,具體如表5-6所示。
chattr命令中用于隱藏權限的參數及其作用
~~~
參數 作用
i 無法對文件進行修改;若對目錄設置了該參數,則僅能修改其中的子文件內容而不能新建或刪除文件
a 僅允許補充(追加)內容,無法覆蓋/刪除內容(Append Only)
S 文件內容在變更后立即同步到硬盤(sync)
s 徹底從硬盤中刪除,不可恢復(用0填充原文件所在硬盤區域)
A 不再修改這個文件或目錄的最后訪問時間(atime)
b 不再修改文件或目錄的存取時間
D 檢查壓縮文件中的錯誤
d 使用dump命令備份時忽略本文件/目錄
c 默認將文件或目錄進行壓縮
u 當刪除該文件后依然保留其在硬盤中的數據,方便日后恢復
t 讓文件系統支持尾部合并(tail-merging)
x 可以直接訪問壓縮文件中的內容
~~~
1. 文件作用
~~~
[root@localhost ~]# echo 'hello linux' > test.txt
[root@localhost ~]# chattr +a ./test.txt
[root@localhost ~]# rm ./test.txt
rm:是否刪除普通文件 "./test.txt"?y
rm: 無法刪除"./test.txt": 不允許的操作
[root@localhost ~]# rm -rf ./test.txt
rm: 無法刪除"./test.txt": 不允許的操作
[root@localhost ~]# rm -rf ./test.txt
rm: 無法刪除"./test.txt": 不允許的操作
~~~
2. 目錄
~~~
[root@localhost ~]# mkdir test
[root@localhost ~]# cd test
[root@localhost test]# echo 'hello linux' > test1.txt
[root@localhost test]# chattr +a ./test1.txt
[root@localhost test]# echo 'hello linux' >> test1.txt
[root@localhost test]# rm -rf ./test1.txt
rm: 無法刪除"./test1.txt": 不允許的操作
[root@localhost test]# echo 'hello linux' >> hello.txt
[root@localhost test]# chattr +a ../test
[root@localhost test]# echo 'hello linux' >> h.txt
[root@localhost test]#
[root@localhost test]#
[root@localhost test]# chattr +i ../test
[root@localhost test]# echo 'hello linux' >> h2.txt # 加-i后,無法再目錄下創建文件
-bash: h2.txt: 權限不夠
~~~
#### 14.2 lsattr命令
用于顯示文件的隱藏權限,格式為“lsattr [參數] 文件”。在Linux系統中,文件的隱藏權限必須使用lsattr命令來查看,平時使用的ls等看不出來隱藏權限
~~~
[root@localhost test]# lsattr ../test
-----a---------- ../test/test1.txt
---------------- ../test/hello.txt
---------------- ../test/h.txt
[root@localhost test]# cd ..
[root@localhost ~]# lsattr test
-----a---------- test/test1.txt
---------------- test/hello.txt
---------------- test/h.txt
[root@localhost ~]# lsattr -d test
----ia---------- test
~~~
- Docker
- 什么是docker
- Docker安裝、組件啟動
- docker網絡
- docker命令
- docker swarm
- dockerfile
- mesos
- 運維
- Linux
- Linux基礎
- Linux常用命令_1
- Linux常用命令_2
- ip命令
- 什么是Linux
- SELinux
- Linux GCC編譯警告:Clock skew detected. 錯誤解決辦法
- 文件描述符
- find
- 資源統計
- LVM
- Linux相關配置
- 服務自啟動
- 服務器安全
- 字符集
- shell腳本
- shell命令
- 實用腳本
- shell 數組
- 循環與判斷
- 系統級別進程開啟和停止
- 函數
- java調用shell腳本
- 發送郵件
- Linux網絡配置
- Ubuntu
- Ubuntu發送郵件
- 更換apt-get源
- centos
- 防火墻
- 虛擬機下配置網絡
- yum重新安裝
- 安裝mysql5.7
- 配置本地yum源
- 安裝telnet
- 忘記root密碼
- rsync+ crontab
- Zabbix
- Zabbix監控
- Zabbix安裝
- 自動報警
- 自動發現主機
- 監控MySQL
- 安裝PHP常見錯誤
- 基于nginx安裝zabbix
- 監控Tomcat
- 監控redis
- web監控
- 監控進程和端口號
- zabbix自定義監控
- 觸發器函數
- zabbix監控mysql主從同步狀態
- Jenkins
- 安裝Jenkins
- jenkins+svn+maven
- jenkins執行shell腳本
- 參數化構建
- maven區分環境打包
- jenkins使用注意事項
- nginx
- nginx認證功能
- ubuntu下編譯安裝Nginx
- 編譯安裝
- Nginx搭建本地yum源
- 文件共享
- Haproxy
- 初識Haproxy
- haproxy安裝
- haproxy配置
- virtualbox
- virtualbox 復制新的虛擬機
- ubuntu下vitrualbox安裝redhat
- centos配置雙網卡
- 配置存儲
- Windows
- Windows安裝curl
- VMware vSphere
- 磁盤管理
- 增加磁盤
- gitlab
- 安裝
- tomcat
- Squid
- bigdata
- FastDFS
- FastFDS基礎
- FastFDS安裝及簡單實用
- api介紹
- 數據存儲
- FastDFS防盜鏈
- python腳本
- ELK
- logstash
- 安裝使用
- kibana
- 安準配置
- elasticsearch
- elasticsearch基礎_1
- elasticsearch基礎_2
- 安裝
- 操作
- java api
- 中文分詞器
- term vector
- 并發控制
- 對text字段排序
- 倒排和正排索引
- 自定義分詞器
- 自定義dynamic策略
- 進階練習
- 共享鎖和排它鎖
- nested object
- 父子關系模型
- 高亮
- 搜索提示
- Redis
- redis部署
- redis基礎
- redis運維
- redis-cluster的使用
- redis哨兵
- redis腳本備份還原
- rabbitMQ
- rabbitMQ安裝使用
- rpc
- RocketMQ
- 架構概念
- 安裝
- 實例
- 好文引用
- 知乎
- ACK
- postgresql
- 存儲過程
- 編程語言
- 計算機網絡
- 基礎_01
- tcp/ip
- http轉https
- Let's Encrypt免費ssl證書(基于haproxy負載)
- what's the http?
- 網關
- 網絡IO
- http
- 無狀態網絡協議
- Python
- python基礎
- 基礎數據類型
- String
- List
- 遍歷
- Python基礎_01
- python基礎_02
- python基礎03
- python基礎_04
- python基礎_05
- 函數
- 網絡編程
- 系統編程
- 類
- Python正則表達式
- pymysql
- java調用python腳本
- python操作fastdfs
- 模塊導入和sys.path
- 編碼
- 安裝pip
- python進階
- python之setup.py構建工具
- 模塊動態導入
- 內置函數
- 內置變量
- path
- python模塊
- 內置模塊_01
- 內置模塊_02
- log模塊
- collections
- Twisted
- Twisted基礎
- 異步編程初探與reactor模式
- yield-inlineCallbacks
- 系統編程
- 爬蟲
- urllib
- xpath
- scrapy
- 爬蟲基礎
- 爬蟲種類
- 入門基礎
- Rules
- 反反爬蟲策略
- 模擬登陸
- problem
- 分布式爬蟲
- 快代理整站爬取
- 與es整合
- 爬取APP數據
- 爬蟲部署
- collection for ban of web
- crawlstyle
- API
- 多次請求
- 向調度器發送請求
- 源碼學習
- LinkExtractor源碼分析
- 構建工具-setup.py
- selenium
- 基礎01
- 與scrapy整合
- Django
- Django開發入門
- Django與MySQL
- java
- 設計模式
- 單例模式
- 工廠模式
- java基礎
- java位移
- java反射
- base64
- java內部類
- java高級
- 多線程
- springmvc-restful
- pfx數字證書
- 生成二維碼
- 項目中使用log4j
- 自定義注解
- java發送post請求
- Date時間操作
- spring
- 基礎
- spring事務控制
- springMVC
- 注解
- 參數綁定
- springmvc+spring+mybatis+dubbo
- MVC模型
- SpringBoot
- java配置入門
- SpringBoot基礎入門
- SpringBoot web
- 整合
- SpringBoot注解
- shiro權限控制
- CommandLineRunner
- mybatis
- 靜態資源
- SSM整合
- Aware
- Spring API使用
- Aware接口
- mybatis
- 入門
- mybatis屬性自動映射、掃描
- 問題
- @Param 注解在Mybatis中的使用 以及傳遞參數的三種方式
- mybatis-SQL
- 逆向生成dao、model層代碼
- 反向工程中Example的使用
- 自增id回顯
- SqlSessionDaoSupport
- invalid bound statement(not found)
- 脈絡
- beetl
- beetl是什么
- 與SpringBoot整合
- shiro
- 什么是shiro
- springboot+shrio+mybatis
- 攔截url
- 枚舉
- 圖片操作
- restful
- java項目中日志處理
- JSON
- 文件工具類
- KeyTool生成證書
- 兼容性問題
- 開發規范
- 工具類開發規范
- 壓縮圖片
- 異常處理
- web
- JavaScript
- 基礎語法
- 創建對象
- BOM
- window對象
- DOM
- 閉包
- form提交-文件上傳
- td中內容過長
- 問題1
- js高級
- js文件操作
- 函數_01
- session
- jQuery
- 函數01
- data()
- siblings
- index()與eq()
- select2
- 動態樣式
- bootstrap
- 表單驗證
- 表格
- MUI
- HTML
- iframe
- label標簽
- 規范編程
- layer
- sss
- 微信小程序
- 基礎知識
- 實踐
- 自定義組件
- 修改自定義組件的樣式
- 基礎概念
- appid
- 跳轉
- 小程序發送ajax
- 微信小程序上下拉刷新
- if
- 工具
- idea
- Git
- maven
- svn
- Netty
- 基礎概念
- Handler
- SimpleChannelInboundHandler 與 ChannelInboundHandler
- 網絡編程
- 網絡I/O
- database
- oracle
- 游標
- PLSQL Developer
- mysql
- MySQL基準測試
- mysql備份
- mysql主從不同步
- mysql安裝
- mysql函數大全
- SQL語句
- 修改配置
- 關鍵字
- 主從搭建
- centos下用rpm包安裝mysql
- 常用sql
- information_scheme數據庫
- 值得學的博客
- mysql學習
- 運維
- mysql權限
- 配置信息
- 好文mark
- jsp
- jsp EL表達式
- C
- test