Linux:常用指令
全部:Linux常用命令 - SegmentFault 思否
wget 與 curl 命令詳解 - SegmentFault 思否
十萬字Linux命令大全cat詳細教程(一)_川川菜鳥的博客-CSDN博客
規則與技巧
- ctrl+k //剪切(刪除)光標處到行尾的所有字符
- ctrl+u //剪切光標處到行首的所有字符
- ctrl+y //粘貼
- ctrl+r 指令:自動匹配歷史指令(不停按ctrl+r可以不停往上找歷史指令)
- 刪除整行 HOME + CTRL K
- 如果指令太長一行寫不完,可以用\+ENTER實現換行繼續輸入
- 指令+pageup:上一次輸入的這個指令
- 交互式系統退出:q
- 上下翻頁:SHIFT + pageup
- 如果需要用root權限來執行,需要在執行的命令前加sudo
- 指令內容輸出到文件,ls -a > test(追加)
- 桌面端截圖快捷鍵:CTRL+ALT+A
- which 指令A:指令A的路徑
- whereis 指令A:所有跟A沾邊的指令的路徑
- 字符串拼接:$str1"str2"
- Linux下,文件中的換行符為/n,Windows中,文件中的換行符為/r/n。所以某些文件從Windows中變到Linux中后,要用sed -i將/r消除:
sed -i 's/\r$//g' 具體文件
常用
變量
var=1234 echo $var
查看版本
- uname -a
- cat /etc/issue
- cat /etc/os-release
容量
- 幾核CPU:cat /proc/cpuinfo
- 內存:free、cat /proc/meminfo
系統自身
- hostname:主機名
- hostname -i:主機IP
文件系統
- mount:文件掛載情況,掛載路徑的文件系統屬性
- df:顯示磁盤使用情況,同時也能顯示掛載情況
用戶、權限
-
查看當前用戶:whoami
-
切換為root:su -
-
從root切換為其他用戶:su - 用戶名
-
退出當前用戶:exit
-
添加用戶:useradd 用戶名 -p 密碼
-
刪除用戶:userdel 用戶名
-
查看全部用戶:cat /etc/passwd 或 compgen -u
-
修改當前用戶對于某個目錄/文件的權限:chmod 777 目錄/文件
-
創建目錄并修改權限:mkdir -m 711 目錄
-
遞歸創建目錄:mkdir -p 目錄
- 一次修改多個文件、目錄的權限:
find /usr/local/lib/python3.7 -type f|xargs -I {} chmod 644 '{}' find /usr/local/lib/python3.7 -type d|xargs -I {} chmod 755 '{}' -
用戶屬性修改:usermod
-
修改文件、目錄的所屬用戶、組:chown
chown [-R] 所有者:組名 文件或目錄
-
修改目錄、文件的權限-讀寫可執行:chmod
chmod [-R] 數字權限 文件或目錄 chmod [-ugoa] [+-=][rwx] 文件或目錄 #將.bashrc的所有權限都設定為啟用 chmod 777 .bashrc
文件/目錄
-
一次移動多個文件:mv 源1 源2 目的目錄(最后一個一定是目錄)
-
一次創建多個文件名順序排列的文件:mkdir dir{1..10},創建文件名為dir1-dir10的文件
- 以樹形結構顯示某個目錄下的所有文件組織結構:tree 路徑
- 以樹形結構顯示某個目錄下的所有目錄結構:tree -d 目錄
- 創建文件:
- touch 文件名
- echo 內容 >> 文件
- vim或vi
- 遠程文件傳輸:scp
文件內容顯示
-
前/后十行:head/tail -n 10
- grep前/后十行:grep -C 10
grep 關鍵字 選項 選項: -A n 列出匹配行及其后n行 -B n 列出匹配行及其前n行 -C n 列出匹配行及其前后n行
-
輸出文件行數:wc -l a.txt | awk '{print $1}'
屏幕、界面、系統本身
-
清屏:clear或ctrl +L
-
關機poweroff 重啟reboot
-
上下翻頁:SHIFT + PAGEUP/PAGEDOWN
-
安裝:yum -y install 命令 (yum -y install vim*)
-
ctrl+k //剪切(刪除)光標處到行尾的所有字符
-
ctrl+u //剪切光標處到行首的所有字符
-
ctrl+y //粘貼
-
刪除整行 HOME + CTRL K
路徑
- cd、pwd
- ls
- ln -s A B:建立鏈接,之后訪問B等同于訪問A
- which 指令A:指令A的路徑
- whereis 指令A:所有跟A沾邊的指令的路徑
網絡
-
測試網絡連接:ping www.baidu.com 測試
-
查看所有網絡連接信息:netstat -a
-
網絡連通性:curl -v url
-
顯示所有網卡信息:ifconfig -v、ip a
-
查看網卡是千兆還是萬兆:ethtool 網卡名(網卡名通過ifconfig獲得)
-
域名解析:dig URL、nslookup URL
壓縮
-
解壓縮:tar -zxvf xxx.tar.gz -C 指定路徑
0、匯總
0)特殊符號
符號 |
說明 |
用法 |
| ; | 多條命令順序執行,命令間不互相干擾 | 命令1 ; 命令2 |
| | |
①正則表達式中表示或; ②用于命令間,表示用前邊命令的輸出作為后邊命令的輸入 |
①ab(c|d) ②命令1 | 命令2 |
| & |
①把命令放在后臺執行 ②標準輸出和標準錯誤輸出,具體見輸入輸出重定向一節 |
①java -jar xxx.jar & |
| && | 前邊指令執行成功才執行后邊指令 | |
| || | 前邊指令執行失敗才執行后邊指令 | |
| # |
①注釋 ② $#命令行參數個數 ③${#變量}變量(字符串)長度 ④${#數組[@]}數組長度 |
|
| $ |
變量①$a:變量的值 命令行$0:當前腳本程序名稱 $1-$n:第n個命令行參數 $*:所有命令行參數,整體輸出 $@:所有命令行參數,分別輸出 $#:命令行所有參數的個數 進程$?:最后一次執行狀態 $$:當前進程的進程號pid $!:后臺運行的最后一個進程的進程號 awk$0:某一行的全部字段數據 $1-$n:某一行的第n個字段數據 |
|
| ~ |
字符串是否包含某個子串 |
awk '$2 ~ /Sc/' 第二字段中是否包含"Sc"字符 |
| {} |
正則:表示范圍 循環:指定循環范圍 匿名函數 命令:{}中的命令,是在當前shell執行 |
1)指令
指令 |
說明 |
屏幕 |
|
| clear | 清屏 |
| echo |
輸出內容到屏幕(詳見Shell基礎 - ShineLe - 博客園) |
|
exit |
注銷 |
文件、文件夾本身絕對路徑:以"/"開頭 相對路徑:以.或..開頭 |
|
| mkdir、rmdir、rm | 創建目錄、刪除空目錄 、刪除目錄(可以不空) |
| touch/rm | 創建/刪除文件 |
| cd | 跳轉到目錄 |
| ls |
羅列 Linux:ls指令 |
| grep | 文本搜索(類似于CTRL+F)并輸出,可使用正則表達式 |
| vim | 編輯文件(vim指令見vim:用法) |
| cat | 查看文件(與vim的區別在于cat無法編輯) |
| pwd | 顯示當前目錄 |
| cp | 復制 |
| mv | 移動、重命名 |
| basename | 獲取路徑中的最后文件名 |
| dirname | 獲取路徑中的最后目錄名 |
| 創建文件 | touch、echo 內容 >> 文件 |
查找、搜尋 |
|
| which | 查找某個指令(可執行文件)的詳細路徑 |
| whereis | 從特定目錄中查找 |
| locate/updatedb | 從數據庫中查找、更新數據庫 |
| find | 查找(從文件類型、所有者、時間、權限……查找) |
文件屬性 |
|
| file | 觀察文件類型 |
文件內容 |
|
| cat | 從首行開始顯示內容 |
| tac | 從尾行開始顯示 |
| nl | 顯示時輸出行號 |
| more | 一頁一頁顯示,只能往后翻頁 |
| less | 與more類似,可以往前翻頁 |
| head | 顯示前幾行 |
| tail | 顯示尾幾行 |
| od | 以二進制方式顯示 |
權限 |
|
| chmod | 改變權限 |
| chgrp | 改變群組 |
| chown | 改變所有者 |
| umask | 默認權限 |
用戶 |
|
| whoami |
當前用戶 |
| su |
su 用戶名:切換為某個用戶 su -:切換為root |
| sudo 指令 |
給當前用戶root權限執行該命令 |
| exit | 退出切換的用戶 |
| useradd/userdel 用戶名 | 添加/刪除用戶 |
| compgen -u | 查看全部用戶 |
|
useradd userdel |
添加/刪除用戶 |
|
usermod |
修改用戶屬性 |
PATH |
|
| echo $PATH | 顯示所有PATH |
| PATH="${PATH}:路徑" | 加入新PATH |
文件系統 |
|
| df | 列出文件系統的整體磁盤使用量 |
| du | 評估文件系統的磁盤使用量(用于推估目錄所占容量) |
進程管理 |
|
| systemctl |
進程管理 進程管理,較老 |
| service | |
| ps |
進程狀態,相當于windows任務管理器 Linux:ps指令 |
網絡 |
|
| ip |
IP與網關 |
| route |
路由與網關 Linux:網絡指令(route) |
|
dig nslookup |
域名解析 |
安裝下載 |
|
| wget |
從web下載文件 Linux:wget指令 |
壓縮 解壓縮 |
|
| tar | 壓縮 解壓縮 |
2)路徑
路徑 |
說明 |
| 相對路徑 | 進入某個相對路徑 |
| 絕對路徑 | 進入絕對路徑下的某個文件夾 |
| . | 當前目錄 |
| .. | 返回上一級 |
| ~或空 | 回到home目錄 |
| - | 在上一個目錄和本目錄來回切換 |
| ~user | 回到user這個用戶的home目錄(非根目錄,根目錄是/) |
| / | 回到根目錄 |
家目錄是~,根目錄是/
3)重定向
①標準輸入輸出
| 設備 | 設備名 | 文件描述符 | 類型 |
|---|---|---|---|
| 鍵盤 | /dev/stdin | 0 | 標準輸入 |
| 顯示器 | /dev/stdout | 1 | 標準輸出 |
| 顯示器 | /dev/stderr | 2 | 標準錯誤輸出 |
②輸入重定向
- 輸入重定向:不使用標準輸入端口(也就是①中所說的鍵盤)輸入文件,而是使用指定的文件作為標準輸入設備。
- 修改:使用"<"符來修改標準輸入設備。
| 類型 | 符號(語法) | 功能 |
|---|---|---|
| 標準輸入 | 命令<文件1 | 命令把文件1的內容作為標準輸入設備 |
| 標識符限定輸入 | 命令<<標識符 | 命令把標準輸入中讀入內容,直到遇到“標識符”分解符為止 |
| 輸入輸出重定向(同時使用) | 命令< 文件1 >文件2 | 命令把文件1的內容作為標準輸入,把文件2作為標準輸出。 |
③輸出重定向
- 輸出重定向:把輸出信息寫入到文件中,而非控制臺(顯示屏)。如果沒有重定向,那么默認的輸出設備是控制臺。
類型 |
指令 |
效果 |
| 標準輸出重定向 | 命令 > 文件 | 覆蓋,把命令的正確輸出內容輸出到指定的文件 |
| 命令 >> 文件 | 追加,把命令的正確輸出內容輸出到指定的文件 | |
| 標準錯誤輸出重定向 | 命令 2> 文件 | 覆蓋,把命令的錯誤輸出內容輸出到指定的文件 |
| 命令 2>> 文件 | 追加,把命令的錯誤輸出內容輸出到指定的文件 | |
| 正確輸出和錯誤輸出同時保存 | 命令 > 文件 2>&1 | 覆蓋,把正確輸出和錯誤輸出都保存到同一個文件 |
| 命令 >> 文件 2>&1 | 追加,把正確輸出和錯誤輸出都保存到同一個文件 | |
| 命令 &> 文件 | 覆蓋,把正確輸出和錯誤輸出都保存到同一個文件 | |
| 命令 &>> 文件 | 追加,把正確輸出和錯誤輸出都保存到同一個文件 | |
| 命令 >> 文件1 2>>文件2 | 追加,正確輸出追加到文件1中,錯誤輸出追加到文件2 |
- /dev/null:如果要執行某個命令,但不要在屏幕上顯示結果,可以將輸出重定向到/dev/null。
用法
command > file 將輸出重定向到 file。 command < file 將輸入重定向到 file。 command >> file 將輸出以追加的方式重定向到 file。 n > file 將文件描述符為 n 的文件重定向到 file。 n >> file 將文件描述符為 n 的文件以追加的方式重定向到 file。 n >& m 將輸出文件 m 和 n 合并。 n <& m 將輸入文件 m 和 n 合并。 << tag 將開始標記 tag 和結束標記 tag 之間的內容作為輸入。
例子
echo "hello world" > test7.sh
4)通配符
*:0或多個字符;
| 例子 | 說明 |
| ls *.txt | 查找所有txt文件 |
| ls 1*.txt | 以1開頭的txt文件 |
?:1個字符
其實和正則表達式通配符完全相同,所以就不再多說了
1、終端
--help:幫助手冊
如果要查看某個指令的參數選擇,比如rm,有了兩種方式
rm --help
man rm #更全 退出時按Q
tab:自動補全指令(有多個匹配項時,可以按兩次tab顯示全部匹配項,Windows也適用)
HOME或ctrl+a //光標迅速回到行首 == HOME
END或ctrl+e //光標迅速回到行尾
ctrl+insert //復制命令行內容(mac系統不能使用)
shift+insert //粘貼命令行內容(mac系統不能使用)
ctrl+k //剪切(刪除)光標處到行尾的所有字符
ctrl+u //剪切(刪除)光標處到行首的所有字符
ctrl+w //剪切(刪除)光標前的一個字符
ctrl+y //粘貼
ctrl+c //中斷終端正在執行的任務并開啟一個新的一行
ctrl+d //退出當前shell命令行,如果是切換過來的用戶,則執行這個命令回退到原用戶
ctrl+r //搜索命令行使用過的歷史命令記錄
ctrl+g //從ctrl+r的搜索歷史命令模式中退出
ctrl+l //清楚屏幕所有的內容,并開啟一個新的一行
ctrl+s //鎖定終端,使之任何人無法輸入
ctrl+q //解鎖ctrl+s的鎖定狀態
ctrl+z //暫停在終端運行的任務,使用"fg"命令可以使暫停恢復
!! //執行上一條命令
!pw //這是一個例子,是執行以pw開頭的命令,這里的pw可以換成任何已經執行過的字符
!pw:p //這是一個例子,是僅打印以pw開頭的命令,但不執行,最后的那個“p”是命令固定字符
!num //執行歷史命令列表的第num條命令,num代指任何數字(前提是歷史命令里必須存在)
!$ //代指上一條命令的最后一個參數,該命令常用于shell腳本中
esc+. //注意那個".“ 意思是獲取上一條命令的(以空格為分隔符)最后的部分
esc+b //移動到當前單詞的開頭
esc+f //移動到當前單詞的結尾
2、目錄與文件
1)pwd(Print Working Directory):當前目錄的路徑
用法:pwd [-P]
參數
只有一個-P,如果當前目錄是連接檔,那么加-P后,會顯示正確的完整路徑。
2)Linux:ls指令
3)cd:訪問目錄
用法:cd [絕對路徑/相對路徑]
參數
參數 |
說明 |
| 相對路徑 | 進入某個相對路徑 |
| 絕對路徑 | 進入絕對路徑下的某個文件夾 |
| .. | 返回上一級 |
| ~ | 回到根目錄 |
| - | 在上一個目錄和本目錄來回切換 |
| ~user | 回到user這個用戶的根目錄 |
注意
連接符是/而不是\,這點和Windows剛好相反
3、文件內容
1)cat(concatenate):查看文件內容
用法:cat [-AbEnTv] 路徑
選項
選項 |
說明 |
| A | 相當于-vET,可以列出一些特輸出字符,而非空白 |
| b | 顯示行號,僅針對非空白行,跳過空白行 |
| E | 將結尾的斷行符$顯示出來 |
| n | 顯示行號,包括空白行 |
| T | 將[TAB]以^I的方式顯示出來 |
| v | 列出一些看不出來的特殊字符 |
2)tac:反向顯示
用法:同cat
和cat相反,從末行到首行顯示
3)nl:添加行號顯示
用法:nl [-bnw] 路徑
選項
選項 |
說明 |
| b |
指定行號顯示的方式:
|
| n |
行號顯示的位置:
|
| w | 設置行號字段共有多少位(默認6位,不足補0,即-n rz) |
例子
①常規顯示(不顯示空白行行號)
[root@study ~]# nl /etc/issue 1 \S 2 Kernel \r on an \m
顯示空白行行號
[root@study ~]# nl -b a /etc/issue 1 \S 2 Kernel \r on an \m 3
②行號補0
[root@study ~]# nl -b a -n rz /etc/issue 000001 \S 000002 Kernel \r on an \m 000003
③設置行號有幾位
[root@study ~]# nl -b a -n rz -w 3 /etc/issue 001 \S 002 Kernel \r on an \m 003
4)more:一頁一頁翻頁顯示
cat、tac、nl是全部顯示,如果文件較大則顯示不了前邊的數據。用法:more 路徑

按鍵
按鍵 |
說明 |
| 空格、b | 向下翻頁、向上翻頁 |
| Enter | 向下翻一行 |
| /word | 查找word |
| :f | 顯示出文件名及當前行數 |
| q | 退出 |
5)less:一頁一頁翻頁顯示
比more更靈活,可以往回翻頁
用法:less 路徑

按鍵
這里的按鍵就是vim命令模式下的按鍵
按鍵 |
說明 |
| 空格 | 向下翻頁 |
| pagedown/pageup | 向下/上翻頁 |
| /word | 向下查找word |
| ?word | 向上查找word |
| n | 重復上一次查找結果,并向下移動至下一個查找到的word字符首 |
| N | 重復上一次查找結果,并向上移動至下一個查找到的word字符首 |
| 使用/word + n/N可以實現不停地向上/向下定位到某個想要字符處 | |
| g | 移動至文檔首行 |
| G | 移動至文檔尾行 |
| q | 退出less |
6)head/tail:取首/尾若干行(默認10行)
用法:
-
head/tail [-n number] 路徑:取首/尾若干行(默認10行)
-
tail -f 路徑:持續輸出(如果某個文件有持續寫入時)
例子
①常規使用
# 默認顯示前面十行 [root@study ~]# head /etc/man_db.conf #顯示前 20 行 [root@study ~]# head -n 20 /etc/man_db.conf
②head -n 負號:不顯示后n行
tail -n 正號:不顯示前n行
#不顯示后100行 [root@study ~]# head -n -100 /etc/man_db.conf
#不顯示前100行 [root@study ~]# tail -n +100 /etc/man_db.conf
③tail -f:持續打印
④顯示中間若干行 head -n 數字 | tail -n 數字
#取11~20行 head -n 20 /etc/man_db.conf | tail -n 10
7)od:非文本文件(數據文件data file或者二進制文件binary file)
用法:od [-t TYPE] 路徑
選項
TYPE(n代表每個數字占用的字符) |
輸出為哪種類型 |
| a | 默認字符 |
| c | ASCII字符 |
| d[n] | 十進制 |
| f[n] | 浮點數 |
| o[n] | 八進制 |
| x[n] | 十六進制 |
例子
①常規使用
#將/usr/bin/passwd 的內容使用ASCII 方式來展現 [root@study ~]# od -t c /usr/bin/passwd
②多選項,對照顯示
#將/etc/issue 這個文件的內容以8 進位列出儲存值與ASCII 的對照表 [root@study ~]# od -t oCc /etc/issue 0000000 134 123 012 113 145 162 156 145 154 040 134 162 040 157 156 040 \ S \n K e r n e l \ r o n 0000020 141 156 040 134 155 012 012 a n \ m \n \n 0000027
4、權限
- r-4
- w-2
- x-1
新文件的默認權限為(默認無執行權限):(-rw-rw-rw-) - umask
新目錄的默認權限為:(drwxrwxrwx) - umask
文件權限
- r:讀取
- w:編輯、改變其中內容(而非文件本身屬性)
- x:被系統執行
Linux系統下,文件可否執行,不由擴展名.exe、.bat等決定,而由是否具有權限X決定。
一般來說,文件權限有w或x,一般要有前置權限r。
目錄權限
- r:讀取目錄結構列表(該目錄下的文件名數據)的權限,可以通過ls將該目錄的內容列表顯示;
- w:異動目錄結構列表的權限(以下操作均是對該目錄下的文件和目錄開展的):
- 建立新文件及目錄;
- 刪除文件及目錄;
- 更名;
- 移動。
- x:并非可執行該目錄的意思,而是是否可以通過cd進入該目錄,使其成為工作目錄。
目錄的三個權限互相獨立,就算沒r權限也可以有w和x,只是沒r就無法用tab進行文件名補全了。
- 在架設網站給人瀏覽目錄時,應至少給予r、x權限,因為不給x就無法到該目錄下讀取文件。
- 要讀某個文件時,就要具備這個文件所在目錄的x權限;
- 創建文件時,應至少具有它所在目錄的wx權限。
權限與指令
指令 |
目錄權限(至少擁有的權限) |
文件權限(至少擁有的權限) |
|
cd 目錄 |
x | |
|
cp |
源目錄:x 目標目錄:x、w |
r |
| ls 目錄 | r | |
|
讀取文件 cat、more、less |
x | r |
|
修改 nano、vim |
x | r、w |
| 建立文件 | w(必須)、x(有時不用) | |
| cd目錄并執行某個指令 | x | x |
說明
文件目錄是按層次排列的,例如:/home/student/www/index.html,權限也是一層層識別的,如果沒有進入上層結構的權限(目錄x權限),那么對下層的各種操作就都沒有權限了。
1)chgrp:修改群組
用法:chgrp [-R] dirname/filename ...
選項
- -R 遞歸變更,持續變更目錄下的所有文件
說明
- 組名必須在/etc/group中存在(不存在會報錯invalid group)
2)chown:修改所有者
用法
-
chown [-R] 所有者 文件或目錄
-
chown [-R] 所有者:組名 文件或目錄
選項
- -R 遞歸變更,持續變更目錄下的所有文件
說明
- 用戶必須在/etc/passwd中存在
例子
容器創建時,需要修改/applog的所屬用戶:用戶組為dcos:docker:
chown dcos:docker /applog
3)chmod:修改權限
用法:
- chmod [-R] 數字權限 文件或目錄
-
chmod [-ugoa] [+-=][rwx] 文件或目錄
選項
- -R 遞歸變更同次目錄下的所有文件
- xyz 權限代表的數字,每個角色都有一個數字,rwx=7,---=0
- u:user/owner
- g:group
- o:other
- a:all
例子
①將.bashrc的所有權限都設定為啟用
chmod 777 .bashrc
②將.bashrc的user權限設置為rwx,group和other權限設置為rx,即文件權限為rwxr-xr-x
chmod u=rwx,go=rx .bashrc
③將.bashrc的權限設置為-rwxr-xr--
chmod u=rwx,g=rx,o=r .bashrc
④如果只是去除權限而不修改其它權限
chmod a-x .bashrc
4)umask:建立文件或目錄時的默認權限
用法
①查看
-
umask:數字形式
-
umask -S:符號形式
②修改
-
umask 3位數字權限
例子
①正常用法
[root@study ~]# umask 0022 <==與一般權限有關的是后面三個數字! [root@study ~]# umask -S u=rwx,g=rx,o=rx
數字權限中的第一個數字是特殊權限,后三個才是一般權限
5、PATH
查詢:echo $PATH
修改:PATH="${PATH}:絕對路徑"

說明
- 只有位于PATH下的指令可以直接通過指令訪問,位于其他路徑下的指令只能通過路徑/指令的方式執行;
- 如果要讓別的路徑下的指令(也是可執行文件名)也能直接通過指令的方式訪問,則要把該路徑加入PATH;
- 為了安全起見,不建議把當前目錄.加入PATH。
6、查找、搜尋
1)which:(在PATH下)查找命令的絕對路徑
用法:which [-a] 命令
選項
- a:將所有從PATH中找到的命令全部列出,而不止第一個;
例子
①查找ifconfig
[root@study ~]# which ifconfig /sbin/ifconfig
②which which
[root@study ~]# which which alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' /bin/alias /usr/bin/which # 竟然會有兩個 which ,其中一個是 alias 這玩意兒呢!那是啥? # 那就是所謂的『命令別名』,意思是輸入 which 會等于后面接的那串指令啦!
③能調用某個命令,但卻查找不到,例如history
[root@study ~]# which history /usr/bin/which: no history in (/usr/local/sbin:/usr/local/bin:/sbin:/bin: /usr/sbin:/usr/bin:/root/bin)
這是因為history是bash內建的指令,而which找的是PATH下的所有目錄。對于這類指令就要用type指令。
2)whereis:從一些特定目錄中查找文件
用法:whereis [-lbmsu] 路徑
選項
選項 |
說明 |
| l | 列出查找路徑 |
| b | 只找binary文件 |
| m | 只找在man路徑下的文件 |
| s | 只找source源文件 |
| u | 搜尋不在上述選項中的文件 |
3)locate/updatedb:利用數據庫來搜尋文件名
locate:依據/var/lib/mlocate 內的數據庫記載,找出用戶輸入的關鍵詞文件名;
updatedb:根據/etc/updatedb.conf 的設定去搜尋系統硬盤內的文件名,并更新/var/lib/mlocate 內的數據庫文件。
用法:locate [-iclSr] 指令
選項
選項 |
說明 |
| i | 忽略大小寫 |
| c | 僅計算數量,不詳細輸出 |
| l | 輸出幾行,5行就是-l 5 |
| S | locate所用數據庫的信息 |
| r | 后接正規表達式 |
例子
①找出系統中與passwd相關的文檔,只列出5個
[root@study ~]# locate -l 5 passwd /etc/passwd /etc/passwd- /etc/pam.d/passwd /etc/security/opasswd /usr/bin/gpasswd
②查詢所使用的數據庫信息
[root@study ~]# locate -S Database /var/lib/mlocate/mlocate.db: 8,086 directories # 總紀錄目錄數 109,605 files # 總紀錄文件數 5,190,295 bytes in file names 2,349,150 bytes used to store database
說明
- 支持模糊查詢,指令名可以不打全
- 數據庫有更新頻率,所以存在查詢舊版本的問題;
- 輸入指令updatedb更新數據庫
4)find:查找
從各個方向(類型、時間、所有人……)查找
用法:find 路徑 選項 動作
選項與例子:
-
時間:atime、ctime、mtime
以 -mtime 說明,注意 +-號 -mtime n :n 為數字,意義為在 n 天之前的『一天之內』被更動過內容的文件;<=1 -mtime +n :列出在 n 天之前(不含 n 天本身)被更動過內容的文件檔名;>n -mtime -n :列出在 n 天之內(含 n 天本身)被更動過內容的文件檔名。<=n -newer file :file 為一個存在的文件,列出比 file 還要新的文件檔名
例子
#將過去系統上面 24 小時內有更動過內容 (mtime) 的文件列出 [root@study ~]# find / -mtime 0 # 那個 0 是重點!0 代表目前的時間,所以,從現在開始到 24 小時前, # 有變動過內容的文件都會被列出來!那如果是三天前的 24 小時內? # find / -mtime 3 有變動過的文件都被列出的意思! #尋找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出 [root@study ~]# find /etc -newer /etc/passwd # -newer 用在分辨兩個文件之間的新舊關系是很有用的!
![]()
-
使用者或組名
選項
說明
-uid n UID -gid n GID -user name 用戶名 -group name 組名 -nouser 尋找不屬于該系統中任何人的文件 -nogroup 尋找不屬于該系統中任何群組的文件
當你自行安裝軟件時,很可能該軟件的屬性當中并沒有文件擁有者, 這是可能的!在這個時候,就可以使用 -nouser 與 -nogroup 搜尋。例子
#搜尋 /home 底下屬于 dmtsai 的文件 [root@study ~]# find /home -user dmtsai # 這個東西也很有用的~當我們要找出任何一個用戶在系統當中的所有文件時, # 就可以利用這個指令將屬于某個使用者的所有文件都找出來喔! #搜尋系統中不屬于任何人的文件 [root@study ~]# find / -nouser # 透過這個指令,可以輕易的就找出那些不太正常的文件。如果有找到不屬于系統任何人的文件時, # 不要太緊張,那有時候是正常的~尤其是你曾經以原始碼自行編譯軟件時。
-
文件權限
選項
說明
-name filename 文件名為filename(可用通配符) -size [+-]SIZE 比SIZE大(+)或小(-),比50KB大--size +50K -type TYPE 文件類型:f b c d l s p -perm mode 權限剛好等于mode,mode為4位的權限數字 -perm -mode 權限涵蓋mode -perm /mode 包含任一mode的權限 例子
范例五:找出檔名為 passwd 這個文件 [root@study ~]# find / -name passwd 范例五-1:找出文件名包含了 passwd 這個關鍵詞的文件 [root@study ~]# find / -name "*passwd*" # 利用這個 -name 可以搜尋檔名啊!默認是完整文件名,如果想要找關鍵詞, # 可以使用類似 * 的任意字符來處理 范例六:找出 /run 目錄下,文件類型為 Socket 的檔名有哪些? [root@study ~]# find /run -type s # 這個 -type 的屬性也很有幫助喔!尤其是要找出那些怪異的文件, # 例如 socket 與 FIFO 文件,可以用 find /run -type p 或 -type s 來找! 范例七:搜尋文件當中含有 SGID 或 SUID 或 SBIT 的屬性 [root@study ~]# find / -perm /7000 # 所謂的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,所以當然要使用 /7000, # 使用 -7000 表示要同時含有 ---s--s--t 的所有三個權限。而只需要任意一個,就是 /7000
動作
- -exec 指令:使用別的指令處理搜尋到的結果
- -print:默認,將結果打印
例子#將上個范例找到的文件使用 ls -l 列出來 [root@study ~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \; # 注意到,那個 -exec 后面的 ls -l 就是額外的指令,指令不支持命令別名, # 所以僅能使用 ls -l 不可以使用 ll
![]()
對例子的說明-
{ }代表find找到的內容,上例中,find的結果會被放在{ }中;
-
由于;在bash環境下有特殊意義,因此要用/轉義。
-
多條件并列查詢
#多條件查詢 #-a表示and -o表示or find /home -name '1*' -a -type f
說明
- 與locate和whereis相比,find要查找硬盤,因此速度不如這二者;
7、文件系統
1)df:整體磁盤使用量
用法:df [-ahikHTm] [路徑]
選項
選項 |
說明 |
| 無 | 以KB為單位列出系統內所有的文件系統(不包括特殊內存內的文件系統和swap) |
| a | 列出所有文件系統,包括系統持有的/proc等文件系統 |
| k | 以KB為單位顯示 |
| m | 以MB為單位顯示 |
| h | 以較易閱讀的GB、MB、KB等格式自行顯示 |
| H | 以M=1000K取代1024K的進位方式 |
| T | 連同該partition的文件系統類型(如xfs)也顯示出來 |
| i | 不用磁盤容量,而用inode的數量來顯示 |
例子
①列出系統中的全部文件系統

每列含義:
- Filesystem:該文件系統在哪個partition
- 1K-blocks:下邊的數字單位
- Used:用掉的空間
- Available:剩下的空間
- Use%:磁盤使用率
- Mounted on:磁盤掛載目錄
②將容量以易讀的容量格式顯示出來

③將系統內所有特殊文件格式及名稱都列出來
[root@study ~]# df -aT Filesystem Type 1K-blocks Used Available Use% Mounted on rootfs rootfs 10475520 3409368 7066152 33% / proc proc 0 0 0 - /proc sysfs sysfs 0 0 0 - /sys devtmpfs devtmpfs 627700 0 627700 0% /dev securityfs securityfs 0 0 0 - /sys/kernel/security tmpfs tmpfs 637568 80 637488 1% /dev/shm devpts devpts 0 0 0 - /dev/pts tmpfs tmpfs 637568 24684 612884 4% /run tmpfs tmpfs 637568 0 637568 0% /sys/fs/cgroup .....(中間省略)..... /dev/mapper/centos-root xfs 10475520 3409368 7066152 33% / selinuxfs selinuxfs 0 0 0 - /sys/fs/selinux .....(中間省略)..... /dev/mapper/centos-home xfs 5232640 67720 5164920 2% /home /dev/vda2 xfs 1038336 133704 904632 13% /boot binfmt_misc binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc # 系統里面其實還有很多特殊的文件系統存在的。那些比較特殊的文件系統幾乎 # 都是在內存當中,例如 /proc 這個掛載點。因此,這些特殊的文件系統 # 都不會占據磁盤空間喔!
④將/etc下的可用磁盤容量以易讀的容量格式顯示
[root@study ~]# df -h /etc Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 10G 3.3G 6.8G 33% / #在 df 后面加上目錄或者是文件時, # df會自動的分析該目錄或文件所在的 partition ,并將該 partition 的容量顯示出來, # 所以,您就可以知道某個目錄底下還有多少容量可以使用了!
⑤將各個partition中可用的inode數量列出
#將目前各個 partition 當中可用的 inode 數量列出 [root@study ~]# df -ih Filesystem Inodes IUsed IFree IUse% Mounted on /dev/mapper/centos-root 10M 108K 9.9M 2% / devtmpfs 154K 397 153K 1% /dev tmpfs 156K 5 156K 1% /dev/shm tmpfs 156K 497 156K 1% /run tmpfs 156K 13 156K 1% /sys/fs/cgroup # 這個范例則主要列出可用的 inode 剩余量與總容量。通常 inode 的數量剩余都比 block 還要多呢
2)du:評估文件系統的磁盤使用量
用法:du [-ahskm] 路徑
選項
選項 |
說明 |
| 無 | 統計當前目錄下的各目錄容量 |
| a | 列出當前目錄下的所有的文件和目錄容量 |
| h | 以人們較易讀的容量格式顯示 |
| s | 列出總量,而不列出個別目錄占用容量 |
| S | 不包括子目錄下的總計 |
| k | 以KB作為容量單位 |
| m | 以MB作為容量單位 |
說明
- 如果要知道該目錄占了多少容量的話,使用-s就可以了
- 至于-S 這個選項部分,由于du 默認會將所有文件的大小均列出,假設在/etc使用du 時, 所有的文件大小,包括/etc下的次目錄容量也會被計算一次。然后最終的容量(/etc) 也會加總一次, 因此很多人會誤會du分析的結果不太對勁。所以啰,如果想要列出某目錄下的全部數據, 也可以加上 -S 的選項,減少次目錄的加總。
例子
①列出當前目錄下的所有目錄容量
[root@study ~]# du 4 ./.cache/dconf <==每個目錄都會列出來 4 ./.cache/abrt 8 ./.cache ....(中間省略).... 0 ./test4 4 ./.ssh <==包括隱藏文件的目錄 76 . <==這個目錄(.)所占用的總量 # 直接輸入 du 沒有加任何選項時,則 du 會分析『目前所在目錄』 # 的文件與目錄所占用的磁盤空間。但是,實際顯示時,僅會顯示目錄容量(不含文件), # 因此 . 目錄有很多文件沒有被列出來,所以全部的目錄相加不會等于 . 的容量喔!
②列出當前目錄下的所有目錄和文件容量
[root@study ~]# du -a 4 ./.bash_logout <==有文件的列表了 4 ./.bash_profile 4 ./.bashrc ....(中間省略).... 4 ./.ssh/known_hosts 4 ./.ssh 76 .
③檢查根目錄下每個目錄占用的容量
[root@study ~]# du -sm /* 0 /bin 99 /boot ....(中間省略).... du: cannot access ‘/proc/17772/task/17772/fd/4’: No such file or directory du: cannot access ‘/proc/17772/fdinfo/4’: No such file or directory 0 /proc <==不會占用硬盤空間! 1 /root 25 /run ....(中間省略).... 3126 /usr <==系統初期最大就是他了啦! 117 /var # 這是個很常被使用的功能~利用通配符 * 來代表每個目錄,如果想要檢查某個目錄下, # 哪個次目錄占用最大的容量,可以用這個方法找出來。值得注意的是,如果剛剛安裝好 Linux 時, # 那么整個系統容量最大的應該是 /usr 。而 /proc 雖然有列出容量,但是那個容量是在內存中, # 不占磁盤空間。至于 /proc 里頭會列出一堆『No such file or directory』 的錯誤, # 別擔心!因為是內存內的程序,程序執行結束就會消失,因此會有些目錄找不到,是正確的!
3)ln:建立鏈接
原理:實體鏈接與符號鏈接
用法:ln [-sf] 路徑1 路徑2(只能文件,不能是目錄)
構建鏈接后,訪問路徑2,實際上是訪問路徑1
選項
-
s:不加s,硬鏈接;加s,符號鏈接;
- f:如果目標文件存在,就將目標文件移除后再建立;
說明:
-
把路徑2鏈接到路徑1,兩個文件除了名字不同外,別的信息都相同;
- 鏈接后,兩個文件的第二個字段(表示鏈接數)都會+1;
- 實體鏈接前后,磁盤空間與inode的數目都不變,只是在某個目錄下的block多寫入一個關聯數據;符號鏈接會改變容量與inode;
- 不能鏈接目錄
限制
- 不能跨文件系統
- 不能鏈接目錄
例子:
①實體鏈接
[root@study ~]# ll -i /etc/crontab 34474855 -rw-r--r--. 1 root root 451 Jun 10 2014 /etc/crontab [root@study ~]# ln /etc/crontab . <==建立實體鏈接的指令 [root@study ~]# ll -i /etc/crontab crontab 34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab 34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
②符號鏈接/快捷方式
[root@study ~]# ln -s /etc/crontab crontab2
[root@study ~]# ll -i /etc/crontab /root/crontab2
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -> /etc/crontab
- 兩個文件指向不同的inode,說明兩個文件獨立存在。
- 連結檔的大小為12bytes,因為->右邊的檔名[/tec/crontab]共有12個英文,每個英文占用1B,因此文件大小就是12B
4)lsblk:list block device列出系統上的所有磁盤列表
用法:lsblk [-dfimpt] [device]
選項:
選項 |
說明 |
| d | 僅列出磁盤本身,不會列出該磁盤的分區數據 |
| f | 同時列出該磁盤內的文件系統名稱(UUID) |
| i | 使用ASCII的線段輸出,不使用復雜編碼 |
| m | 同時輸出該裝置在/dev下的權限數據 |
| p | 列出該裝置的完整文件名 |
| t | 列出該磁盤的詳細數據 |
例子
①默認
[root@study ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 40G 0 disk # 一整顆磁盤
|-vda1 252:1 0 2M 0 part
|-vda2 252:2 0 1G 0 part /boot
`-vda3 252:3 0 30G 0 part
|-centos-root 253:0 0 10G 0 lvm / # 在 vda3 內的其他文件系統
|-centos-swap 253:1 0 1G 0 lvm [SWAP]
`-centos-home 253:2 0 5G 0 lvm /home
該系統有個sr0以及一個vda,vda之下又有三個分區,vda3之下還有因為LVM產生的文件系統。
默認輸出:
- NAME:裝置的文件名,會省略/dev 等前導目錄!
- MAJ:MIN:主要:次要裝置代碼
- RM:是否為可卸除裝置(removable device),如光盤、USB 磁盤等等
- SIZE:容量
- RO:是否為只讀裝置
- TYPE:類別,如磁盤(disk)、分區槽(partition) 、只讀存儲器(rom) 等
- MOUTPOINT:掛載點
②
范例二:僅列出 /dev/vda 裝置內的所有數據的完整文件名
[root@study ~]# lsblk -ip /dev/vda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
/dev/vda 252:0 0 40G 0 disk
|-/dev/vda1 252:1 0 2M 0 part
|-/dev/vda2 252:2 0 1G 0 part /boot
`-/dev/vda3 252:3 0 30G 0 part
|-/dev/mapper/centos-root 253:0 0 10G 0 lvm /
|-/dev/mapper/centos-swap 253:1 0 1G 0 lvm [SWAP]
`-/dev/mapper/centos-home 253:2 0 5G 0 lvm /home # 完整的檔名,由 / 開始寫
5)blkid:列出裝置的UUID等參數
用法:blkid
說明:列出裝置的UUID(Universally Unique Identifier),它叫全局單一標識符,等同于lsblk -f。Linux會為系統中的所有裝置給予一個獨一無二的標識符,這個標識符可以用來作為掛載或者使用這個裝置。
例子
[root@study ~]# blkid
/dev/vda2: UUID="94ac5f77-cb8a-495e-a65b-2ef7442b837c" TYPE="xfs"
/dev/vda3: UUID="WStYq1-P93d-oShM-JNe3-KeDl-bBf6-RSmfae" TYPE="LVM2_member"
/dev/sda1: UUID="35BC-6D6B" TYPE="vfat"
/dev/mapper/centos-root: UUID="299bdc5b-de6d-486a-a0d2-375402aaab27" TYPE="xfs"
/dev/mapper/centos-swap: UUID="905dc471-6c10-4108-b376-a802edbd862d" TYPE="swap"
/dev/mapper/centos-home: UUID="29979bf1-4a28-48e0-be4a-66329bf727d9" TYPE="xfs"
每一行都代表一個文件系統,主要列出裝置名稱、UUID名稱、文件系統類型(TYPE)
6)parted:列出磁盤的分區表類型和分區信息
用法:parted 裝置名 print
例子
[root@study ~]# parted /dev/vda print
Model: Virtio Block Device (virtblk) # 磁盤的模塊名稱(廠商)
Disk /dev/vda: 42.9GB # 磁盤的總容量
Sector size (logical/physical): 512B/512B # 磁盤的每個邏輯/物理扇區容量
Partition Table: gpt # 分區表的格式 (MBR/GPT)
Disk Flags: pmbr_boot
Number Start End Size File system Name Flags # 底下才是分區數據
1 1049kB 3146kB 2097kB bios_grub
2 3146kB 1077MB 1074MB xfs
3 1077MB 33.3GB 32.2GB lvm
7)磁盤分區:gdisk/fdisk
說明
-
fdisk:MBR分區
-
gdisk:GPT分區




浙公網安備 33010602011771號