在linux終端,面對命令不知道怎么用,或不記得命令的拼寫及參數時,我們需要求助于系統的幫助文檔; linux系統內置的幫助文檔很詳細,通常能解決我們的問題,我們需要掌握如何正確的去使用它們;
比如可是使用 --help 查看幫助選項。如 `ls --help`
## 文件和目錄管理
### 創建和刪除
- 創建:mkdir
- 刪除:rm
- 刪除非空目錄:rm -rf file目錄
- 刪除日志 rm *log (等價: $find ./ -name “*log” -exec rm {} ;)
- 移動:mv
- 復制:cp (復制目錄:cp -r )
- 創建文件 touch
### 查看
- 顯示當前目錄下的文件 **ls**
- 按時間排序,以列表的方式顯示目錄項 **ls -lrt**
```shell
ls -l
```
- 查看文件內容 cat 可以加more 、less控制輸出的內容的大小
```shell
cat a.text
cat a.text | more
cat a.text| less
```
### 權限
- 改變文件的擁有者 chown
- 改變文件讀、寫、執行等屬性 chmod
- 遞歸子目錄修改: chown -R tuxapp source/
- 增加腳本可執行權限: chmod a+x myscript
### 管道和重定向
- 批處理命令連接執行,使用 |
- 串聯: 使用分號 ;
- 前面成功,則執行后面一條,否則,不執行:&&
- 前面失敗,則后一條執行: ||
```shell
ls /proc && echo suss! || echo failed.
```
## 文本處理
### 文件查找 find
find 參數很多,本文只介紹幾個常用的
-name 按名字查找
-type 按類型
-atime 訪問時間
```shell
find . -atime 7 -type f -print
find . -type d -print //只列出所有目錄
find / -name "hello.c" 查找hello.c文件
```
### 文本查找 grep
```
grep match_patten file // 默認訪問匹配行
```
常用參數
- -o 只輸出匹配的文本行 **VS** -v 只輸出沒有匹配的文本行
- -c 統計文件中包含文本的次數
`grep -c “text” filename`
- -n 打印匹配的行號
- -i 搜索時忽略大小寫
- -l 只打印文件名
```shell
grep "class" . -R -n # 在多級目錄中對文本遞歸搜索(程序員搜代碼的最愛)
cat LOG.* | tr a-z A-Z | grep "FROM " | grep "WHERE" > b #將日志中的所有帶where條件的sql查找查找出來
```
### 文本替換 sed
```shell
sed [options] 'command' file(s)
```
- 首處替換
```
sed 's/text/replace_text/' file //替換每一行的第一處匹配的text
```
- 全局替換
```
sed 's/text/replace_text/g' file
```
默認替換后,輸出替換后的內容,如果需要直接替換原文件,使用-i:
```
sed -i 's/text/repalce_text/g' file
```
- 移除空白行
```
sed '/^$/d' file
```
```shell
sed 's/book/books/' file #替換文本中的字符串:
sed 's/book/books/g' file
sed '/^$/d' file #刪除空白行
```
### 數據流處理awk
詳細教程可以查看 http://awk.readthedocs.io/en/latest/chapter-one.html
```shell
awk ' BEGIN{ statements } statements2 END{ statements } '
```
工作流程
1.執行begin中語句塊;
2.從文件或stdin中讀入一行,然后執行statements2,重復這個過程,直到文件全部被讀取完畢;
3.執行end語句塊;
**特殊變量**
NR:表示記錄數量,在執行過程中對應當前行號;
NF:表示字段數量,在執行過程總對應當前行的字段數;
$0:這個變量包含執行過程中當前行的文本內容;
$1:第一個字段的文本內容;
$2:第二個字段的文本內容;
```shell
awk '{print $2, $3}' file
# 日志格式:'$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"'
#統計日志中訪問最多的10個IP
awk '{a[$1]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
```
### 排序 port
- -n 按數字進行排序 VS -d 按字典序進行排序
- -r 逆序排序
- -k N 指定按第N列排序
```shell
sort -nrk 1 data.txt
sort -bd data // 忽略像空格之類的前導空白字符
```
### 去重uniq
- 消除重復行
```
sort unsort.txt | uniq
```
### 統計 wc
```shell
wc -l file // 統計行數
wc -w file // 統計單詞數
wc -c file // 統計字符數
```
- PC
- IO模型
- Inode介紹
- Linux
- Linux基本操作命令
- Linux網絡相關命令
- Crontab計劃任務
- Shell
- Sed命令
- Awk命令
- LAMP/LNMP
- PHP
- 基本語法
- 面向對象
- 錯誤和異常處理
- 命名空間
- PHP7
- 正則表達式
- Hashtable
- 變量的內部實現
- PHP-FPM
- PHP運行原理
- swoole
- mysql
- SQL標準
- mysql三范式
- 存儲引擎
- Mysql事務
- Mysql索引
- Mysql優化
- Explain
- MySQL索引原理及慢查詢優化
- MongoDb
- 計算機網絡
- IP協議
- TCP(傳輸控制協議)
- UDP(用戶數據報協議)
- HTTP 協議
- HTTPS
- HTTP的基本優化
- Websocket協議
- 版本控制器
- Git
- Svn
- 數據結構
- 數組
- 鏈表
- 算法