總結於 "《鳥哥的 Linux 私房菜 基礎學習篇》" ,圖片也來自於此。 <! 可在「閱讀原文」中查看其他核心筆記:如 Git 等 核心思想 目錄樹結構(directory tree) Linux 系統是基於目錄樹結構的,這是它的核心思想 。目錄,即文件夾。Linux 系統相當於一個文件夾,Lin ...
總結於 《鳥哥的 Linux 私房菜 - 基礎學習篇》 ,圖片也來自於此。
核心思想
目錄樹結構(directory tree)
Linux 系統是基於目錄樹結構的,這是它的核心思想。目錄,即文件夾。Linux 系統相當於一個文件夾,Linux 系統的所有數據要麼對應一個文件夾,要麼就是一個文件。比如,你新建一個用戶,其實就是新建了一個文件夾。一個用戶對應一個文件夾。目錄樹結構:
上圖中 長方形是文件夾, 波浪形是文件,根目錄是 /
。這個 /
很巧妙,在 macOS 中,假設你下載文件 test.md 到 /Users/username/Desktop/
,那麼文件會下載到桌面,最前面這個 /
就是根目錄。如果你寫成 Users/username/Desktop/
,那麼文件就會下載到currentDerectory/Users/username/Desktop/
下。
Linux 系統使用的是目錄樹架構,但其實數據是存放在 磁碟分區 當中的,那麼問題來了:目錄樹和磁碟分區是神馬關係?這個時候就牽扯到一個叫「掛載(mount)」的概念了。
目錄樹和磁碟分區的關係
掛載其實就是建立目錄樹和磁碟分區之間的關係。目錄只是一個標識,叫什麼我們可以自定義,一個磁碟分區對應一個目錄。
我們經常用 U 盤,假設一個 U 盤是一個磁碟分區,我們把一個假設叫 partition1 的 U 盤插到 Windows 電腦上,可能電腦就多了個 F 盤,那麼目錄就是 F ,相當於將目錄 F 掛載到了 U 盤上,訪問 F 就可以訪問 partition1 里的內容。如果再插一個假設叫 partition2 的 U 盤,系統應該就會多了一個 H 盤,相當於目錄 H 就掛載到了 partition2 上。假設 F 盤下將會有一個存放很多視頻的 moive 文件夾,我們可以直接將 movie 文件夾掛載到 partition2 上,這樣 movie 里的視頻就存到 partition2 裡面了,就不占用 F 盤的空間了。
在 Linux 系統中道理也是一樣的,比如在搭建 Linux 環境的時候,可以將 /home 單獨掛載到一個磁碟分區上。
- 更多內容請看鳥哥 Linux 安裝模式下,磁碟分割的選擇
常用命令
命令 | 含義 | 選項 | 示例 |
---|---|---|---|
--help |
ls --help |
||
man | manual | man man |
|
ls | list | -a, --all -h, --human-readable -l, --long listing format |
ls -ah :顯示目錄下所有文件夾,包括隱藏文件夾 ls -l == ll |
cd | change directory | cd 相當於 cd ~ ,~ 當前用戶根目錄cd / 根目錄cd .. 上一層cd ../.. 上兩層cd ../<directory> 上一層裡面某個目錄cd <directory>/<directory> 當前目錄下的某個目錄下的某個目錄 |
|
rm | remove | -d, --direcorty -r, --recursive -f, --force |
rm <file> rm -d <directory> rm -rf <directory> rm *.pdf |
cat | concatenate | cat <file> |
|
mkdir | make direcotry | mkdir <directory> |
|
touch | create a file | touch <file> |
|
mv | move | move oldname name move <file>/<directory> <directory> |
|
cp | copy | cp test test.bak |
|
zip | -r, --recurse |
zip -r test.zip test/ |
|
unzip | unzip test.zip |
||
tar | tape or archive | -f, --file=ARCHIVE -c, --create -t, --list -v, --verbose -x, --extract -z, --gzip, --gunzip, --ungzip |
tar -cf archive.tar foo bar :將文件 foo 和 bar 創建為 archive.tartar -tvf archive.tar : 詳細列出 archive.tar 中所有文件tar -xf archive.tar :從 archive.tar 中提取所有文件tar xvzf redis-stable.tar.gz :從 redis-stable.tar.gz 中詳細提取所有文件 |
pwd | print working directory | pwd |
|
sh | run a script | sh test.sh 相當於 ./test.sh |
|
start | start notepad++ <file> start Typora <file> |
||
vi | visual | vi <file> |
|
vim | vi improved | vim <file> |
vi/vim 的三種模式
vi <file>
和 vim <file>
都是修改 <file>
的命令,後者為前者的增強版,輸入此命令後,會有三種模式修改 <file>
文件。
- 一般指令模式(command mode):你看不見你輸入的內容
- 編輯模式(insert mode):直接修改文件內容
- 指令列命令模式(command-line mode):最下麵一行,
:
或/
或?
開頭
以下指令詳細含義請看 vim 程式編輯器
常用指令
一般指令模式:
指令 | 含義 |
---|---|
i | 當前位置進入 insert 模式 |
I | 第一個字元 |
a | 下一個字元 |
A | 末尾 |
o | 下一列開頭 |
O | 上一列開頭 |
r | Replace 模式,取代一次 |
R | 一直取代 |
u | 撤銷 |
Ctrl + r | 取消撤銷,相當於 U? |
0 | 行首 |
end / $ | 行尾 |
G | 最後一列 |
gg | 1 G,第一列 |
n<enter> |
向下移動 n 列 |
Ctrl + f | fall,向下一頁 |
Ctrl + b | before,向上一頁 |
x | 刪除 |
X | 刪除前一個 |
dd | 刪除當前列 |
d$ | 刪除從當前位置到列尾 |
yy | 複製當前列 |
- 編輯模式:
指令 | 含義 |
---|---|
Esc | 退出編輯模式,進入一般指令模式 |
- 指令列命令模式:
指令 | 含義 |
---|---|
:w | 保存 |
:w! | 強制保證 |
:q | 退出 |
:q! | 強制退出 |
:wq | 退出並保存,相當於 ZZ |
/word | 查找關鍵字 |
:set nu | 顯示行號 |
:1,$s/word1/word2/gc | word1 替換為 word2 |
/word
查找時,可使用 n 跳轉到下一個查找結果,N 跳轉到上一個查找結果
腳本語法
- 遍歷。示例:一個列印出當前路徑下所有文件夾的目錄的腳本,名叫
traverse.sh
,內容如下:
#!/bin/bash
for i in $(ls $(PWD))
do
if [ -d $i ];then
cd $i
pwd
cd ..
fi # if 反向,代表 if 結束
done
執行腳本: sh traverse.sh
- 更多內容請看 學習 Shell Scripts
其他常用命令
## 用戶
passwd <username> # 修改用戶的密碼
whoami # 查看當前用戶名
## 日誌
less <file> # 查看最新日誌
tail -f <file> # 查看實時日誌
grep -5 <key> <file> # 查看日誌 <file> 關鍵字 key 上下五行
grep -5 <key> <file1> <file2> # 輸出日誌 <file1> 關鍵字 key 上下五行的內容到 <file2> 中
## 進程
ps -ef|grep WeChat # 查看進程名叫 WeChat 的信息,最開頭的數字為 id
kill -9 6002(最開頭的數字) # 殺死進程 id 為 6002 的進程
sed -i's/word1/werd2/g' <file> # 替換 <file> 的 word1 為 word2(sed -- stream editor)
xclip -sel c < <file> # 不打開 <file> 的情況下複製其內容
df -h # 查看磁碟分區和目錄信息(df -- display free disk space)
echo $PATH# 輸出 $PATH 的內容
References
- linux-commans
- man
- markdown-set-table-column-witdth
- linux-current-directory
- bash_loop_list_strings
- Copy the contents of a file into the clipboard without displaying its contents