[TOC]
## 包管理工具
RPM 和 DPKG 為最常見的兩類軟件包管理工具:
* RPM 全稱為 Redhat Package Manager,最早由 Red Hat 公司制定實施,隨后被 GNU 開源操作系統接受并成為很多 Linux 系統 (RHEL) 的既定軟件標準。
* 與 RPM 競爭的是基于 Debian 操作系統 (Ubuntu) 的 DEB 軟件包管理工具 DPKG,全稱為 Debian Package,功能方面與 RPM 相似。
YUM 基于 RPM,具有依賴管理和軟件升級功能。
## VIM三個模式
* 一般指令模式(Command mode):VIM 的默認模式,可以用于移動游標查看內容;
* 編輯模式(Insert mode):按下 "i" 等按鍵之后進入,可以對文本進行編輯;
* 指令列模式(Bottom-line mode):按下 ":" 按鍵之后進入,用于保存退出等操作。

在指令列模式下,有以下命令用于離開或者保存文件。
| 命令 | 作用 |
| - | -|
| :w | 寫入磁盤 |
| :w! | 當文件為只讀時,強制寫入磁盤。到底能不能寫入,與用戶對該文件的權限有關 |
| :q | 離開 |
| :q! | 強制離開不保存 |
| :wq | 寫入磁盤后離開 |
| :wq! | 強制寫入磁盤后離開 |
# 常用指令
## 壓縮與打包
Linux 底下有很多壓縮文件名,常見的如下:
| 擴展名 | 壓縮程序 |
| --- | --- |
| \*.Z | compress |
| \*.zip | zip |
| \*.gz | gzip |
| \*.bz2 | bzip2 |
| \*.xz | xz |
| \*.tar | tar 程序打包的數據,沒有經過壓縮 |
| \*.tar.gz | tar 程序打包的文件,經過 gzip 的壓縮 |
| \*.tar.bz2 | tar 程序打包的文件,經過 bzip2 的壓縮 |
| \*.tar.xz | tar 程序打包的文件,經過 xz 的壓縮 |
### 壓縮指令
1\. `gzip`
gzip 是 Linux 使用最廣的壓縮指令,可以解開 compress、zip 與 gzip 所壓縮的文件。
經過 gzip 壓縮過,源文件就不存在了。
有 9 個不同的壓縮等級可以使用。
可以使用 zcat、zmore、zless 來讀取壓縮文件的內容。
```shell
$ gzip [-cdtv#] filename
-c :將壓縮的數據輸出到屏幕上
-d :解壓縮
-t :檢驗壓縮文件是否出錯
-v :顯示壓縮比等信息
-# : # 為數字的意思,代表壓縮等級,數字越大壓縮比越高,默認為 6
```
2\. `bzip2`
提供比 gzip 更高的壓縮比。
查看命令:bzcat、bzmore、bzless、bzgrep。
```shell
$ bzip2 [-cdkzv#] filename
-k :保留源文件
```
3\. `xz`
提供比 bzip2 更佳的壓縮比。
可以看到,gzip、bzip2、xz 的壓縮比不斷優化。不過要注意的是,壓縮比越高,壓縮的時間也越長。
查看命令:xzcat、xzmore、xzless、xzgrep。
```shell
$ xz [-dtlkc#] filename
```
### 打包
壓縮指令只能對一個文件進行壓縮,而打包能夠將多個文件打包成一個大文件。tar 不僅可以用于打包,也可以使用 gzip、bzip2、xz 將打包文件進行壓縮。
```shell
$ tar [-z|-j|-J] [cv] [-f 新建的 tar 文件] filename... ==打包壓縮
$ tar [-z|-j|-J] [tv] [-f 已有的 tar 文件] ==查看
$ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目錄] ==解壓縮
-z :使用 zip;
-j :使用 bzip2;
-J :使用 xz;
-c :新建打包文件;
-t :查看打包文件里面有哪些文件;
-x :解打包或解壓縮的功能;
-v :在壓縮/解壓縮的過程中,顯示正在處理的文件名;
-f : filename:要處理的文件;
-C 目錄 : 在特定目錄解壓縮。
```
| 使用方式 | 命令 |
| -| - |
| 打包壓縮 | tar -jcv -f filename.tar.bz2 要被壓縮的文件或目錄名稱 |
| 查看 | tar -jtv -f filename.tar.bz2 |
| 解壓縮 | tar -jxv -f filename.tar.bz2 -C 要解壓縮的目錄 |
## 管道指令
管道是將一個命令的標準輸出作為另一個命令的標準輸入,在數據需要經過多個步驟的處理之后才能得到我們想要的內容時就可以使用管道。
在命令之間使用 | 分隔各個管道命令。
```shell
$ ls -al /etc | less
```
## 進程管理
1\. `ps`
查看某個時間點的進程信息
示例一:查看自己的進程
```hell
$ ps -l
```
示例二:查看系統所有進程
```shell
$ ps aux
```
示例三:查看特定的進程
```shell
$ ps aux | grep threadx
```
2\. `pstree`
查看進程樹
示例:查看所有進程樹
```shell
$ pstree -A
```
3\. `top`
實時顯示進程信息
示例:兩秒鐘刷新一次
```shell
$ top -d 2
```
更詳細的使用方式:[https://www.cnblogs.com/zhoug2020/p/6336453.html](https://www.cnblogs.com/zhoug2020/p/6336453.html)
4\. `netstat`
查看占用端口的進程 / 端口及使用網絡協議情況
示例:查看特定端口的進程
```shell
$ netstat -anp | grep port
```
詳細使用方式:[https://www.cnblogs.com/ftl1012/p/netstat.html](https://www.cnblogs.com/ftl1012/p/netstat.html)
其他示例
```shell
$ ps -ef 顯示當前所有進程環境變量及進程間關系
$ ps -A 顯示當前所有進程
$ ps -aux | grep apache 與 grep 聯用查找某進程
$ ps aux | grep '(cron|syslog)' 找出與 cron 與 syslog 這兩個服務有關的 PID 號碼
```
## 文件查找
find 搜索文件的命令格式
find \[搜索范圍\] \[匹配條件\]
選項:
- name?根據名字查找
- size? ? 根據文件大小查找, +, -\: 大于設置的大小,直接寫大小是等于
- user? ?查找用戶名的所有者的所有文件
- group?根據所屬組查找相關文件
- type? ? 根據文件類型查找(f 文件,d 目錄,l 軟鏈接文件)
- inum? ?根據 i 節點查找
- amin? ?訪問時間 access
- cmin? ? 文件屬性 change
- mmin? ?文件內容 modify
示例:
``` shell
$ find / -name filename.txt 根據名稱查找/目錄下的 filename.txt 文件。
$ find . -name "*.xml" 遞歸查找所有的xml文件
$ find . -name "*.xml" |xargs grep "hello world" 遞歸查找所有文件內容中包含 hello world的 xml 文件
$ grep -H 'spring'*.xml 查找所以有的包含 spring 的 xml 文件
$ find ./ -size 0 | xargs rm -f & 刪除文件大小為零的文件
```
## 日常操作
`ls、 ll`:查看文件
`cd`:進入目錄
`pwd`:顯示當前路徑
`mkdir 文件名`:創建文件夾
`rm`: 刪除 ,刪除以 -f 開頭的文件 `rm -- -f*
`
- \-i 刪除前逐一詢問確認。
- \-f 即使原檔案屬性設為唯讀,亦直接刪除,無需逐一確認。
- \-r 將目錄及以下之檔案亦逐一刪除。
刪除當前目錄下的所有文件及目錄,命令行為:`rm -r * `
`mv`:重命名 & 移動文件
- 將文件 test.log 重命名為 test1.txt
```shell
$ mv test.log test1.txt
```
- 將文件 log1.txt,log2.txt,log3.txt 移動到根的 test3 目錄中
```shell
$ mv llog1.txt log2.txt log3.txt /test3
```
- 將文件 file1 改名為 file2,如果 file2 已經存在,則詢問是否覆蓋
```shell
$ mv -i log1.txt log2.txt
```
- 移動當前文件夾下的所有文件到上一級目錄
```shell
$ mv * ../
```
`cp`:復制
將源文件復制至目標文件,或將多個源文件復制至目標目錄。
注意:命令行復制,如果目標文件已經存在會提示是否覆蓋,而在 shell 腳本中,如果不加 \-i 參數,則不會提示,而是直接覆蓋!
```shell
-i 提示
-r 復制目錄及目錄內所有項目
-a 復制的文件與原文件時間一樣
```
實例:
1)復制 a.txt 到 test 目錄下,保持原文件時間,如果原文件存在提示是否覆蓋
```shell
$ cp -ai a.txt test
```
2)為 a.txt 建立一個鏈接(快捷方式)
```shell
$ cp -s a.txt link_a.txt
```
`sudo chmod -R 777 目錄名
`
-R 是指級聯應用到目錄里的所有子目錄和文件
777 是所有用戶都擁有最高權限(可自定權限碼)
# 關鍵操作記錄
1.如何找到一個占用某個端口的后臺進程并關閉這個進程?
使用`netstat -tunlp`查看端口被占用的情況,可以看到占用端口的進程的PID

然后使用`kill pid`命令殺死這個進程即可
`netstat -tunlp|grep 端口號`這個命令可以直接找到占用對應端口的進程
*****
2.使用 curl 進行網絡檢測
curl 是一個發送請求的命令行工具。可使用 HTTP(s)、FTP,以及一些你可能從未聽過的協議發送請求。它可以下載文件,檢查響應頭,自由地訪問遠程數據。
示例:
1)獲取一個 URL 的 HTTP HEADER
```shell
$ curl -I http://google.com
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Referrer-Policy: no-referrer
Location: http://www.google.com/?gfe_rd=cr&ei=0fCKWe6HCZTd8AfCoIWYBQ
Content-Length: 258
Date: Wed, 09 Aug 2017 11:24:01 GMT
```
2)向遠程API發出GET請求
```shell
$ curl http://numbersapi.com/random/trivia
```
*****
3.使用 tree 展示文件目錄結構
[每個 web 開發者都應該了解的 12 個命令行](https://blog.csdn.net/powertoolsteam/article/details/90764150#comments)
- 序言 & 更新日志
- H5
- Canvas
- 序言
- Part1-直線、矩形、多邊形
- Part2-曲線圖形
- Part3-線條操作
- Part4-文本操作
- Part5-圖像操作
- Part6-變形操作
- Part7-像素操作
- Part8-漸變與陰影
- Part9-路徑與狀態
- Part10-物理動畫
- Part11-邊界檢測
- Part12-碰撞檢測
- Part13-用戶交互
- Part14-高級動畫
- CSS
- SCSS
- codePen
- 速查表
- 面試題
- 《CSS Secrets》
- SVG
- 移動端適配
- 濾鏡(filter)的使用
- JS
- 基礎概念
- 作用域、作用域鏈、閉包
- this
- 原型與繼承
- 數組、字符串、Map、Set方法整理
- 垃圾回收機制
- DOM
- BOM
- 事件循環
- 嚴格模式
- 正則表達式
- ES6部分
- 設計模式
- AJAX
- 模塊化
- 讀冴羽博客筆記
- 第一部分總結-深入JS系列
- 第二部分總結-專題系列
- 第三部分總結-ES6系列
- 網絡請求中的數據類型
- 事件
- 表單
- 函數式編程
- Tips
- JS-Coding
- Framework
- Vue
- 書寫規范
- 基礎
- vue-router & vuex
- 深入淺出 Vue
- 響應式原理及其他
- new Vue 發生了什么
- 組件化
- 編譯流程
- Vue Router
- Vuex
- 前端路由的簡單實現
- React
- 基礎
- 書寫規范
- Redux & react-router
- immutable.js
- CSS 管理
- React 16新特性-Fiber 與 Hook
- 《深入淺出React和Redux》筆記
- 前半部分
- 后半部分
- react-transition-group
- Vue 與 React 的對比
- 工程化與架構
- Hybird
- React Native
- 新手上路
- 內置組件
- 常用插件
- 問題記錄
- Echarts
- 基礎
- Electron
- 序言
- 配置 Electron 開發環境 & 基礎概念
- React + TypeScript 仿 Antd
- TypeScript 基礎
- React + ts
- 樣式設計
- 組件測試
- 圖標解決方案
- Storybook 的使用
- Input 組件
- 在線 mock server
- 打包與發布
- Algorithm
- 排序算法及常見問題
- 劍指 offer
- 動態規劃
- DataStruct
- 概述
- 樹
- 鏈表
- Network
- Performance
- Webpack
- PWA
- Browser
- Safety
- 微信小程序
- mpvue 課程實戰記錄
- 服務器
- 操作系統基礎知識
- Linux
- Nginx
- redis
- node.js
- 基礎及原生模塊
- express框架
- node.js操作數據庫
- 《深入淺出 node.js》筆記
- 前半部分
- 后半部分
- 數據庫
- SQL
- 面試題收集
- 智力題
- 面試題精選1
- 面試題精選2
- 問答篇
- 2025面試題收集
- Other
- markdown 書寫
- Git
- LaTex 常用命令
- Bugs