linux系統中提供了大量的命令,該文整理了一份使用較為頻繁的命令,並且我們對命令進行了一個詳細的分類。
一 、Linux命令格式
1.1 Linux終端命令格式
終端命令格式:
command [-options] [parameter]
說明:
- command :命令名,相應功能的英文單詞或單詞的縮寫;
- [-options] :選項,可用來對命令進行控制,也可以省略;
- parameter :傳給命令的參數,可以是 零個、一個 或者 多個;
在linux命令行中,命令的參數有的時候是一個連字符,有的時候是兩個連字符。
對於options類型參數可以有兩種方式:
- 短選項(short options):顧名思義,就是短小參數。它們通常包含一個連字號和一個字母(大寫或小寫字母),例如:-s,-h等。
- 長選項(long options):長選項,包含了兩個連字號和一些大小寫字母組成的單詞,例如:--size,--help等。
注:
-
一個程序通常會提供包括short options和long options兩種參數形式的參數,short options一般是其對應的long options的開頭字母。
-
-
和--
可以用來做區分sh是一個選項還是兩個選項s和h的組合。-sh是s和h的組合 --sh則說明sh是單一的選項。
1.2 查閱命令幫助信息
--help:顯示 command 命令的幫助信息;
[root@longmax2002 ~]# ls --help
Usage: ls [OPTION]... [FILE]... List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is specified. Mandatory arguments to long options are mandatory for short options too. -a, --all do not ignore entries starting with . -A, --almost-all do not list implied . and .. --author with -l, print the author of each file -b, --escape print C-style escapes for nongraphic characters --block-size=SIZE scale sizes by SIZE before printing them; e.g., '--block-size=M' prints sizes in units of 1,048,576 bytes; see SIZE format below -B, --ignore-backups do not list implied entries ending with ~ -c with -lt: sort by, and show, ctime (time of last
man:查閱 command 命令的使用手冊,man 是 manual 的縮寫,是 Linux 提供的一個手冊,包含了絕大部分的命令、函數的詳細使用;
man pwd
使用 man 時的操作鍵:
- 空格鍵:顯示手冊頁得下一屏;
- Enter鍵:一次滾動手冊頁得一行;
- b:回滾一屏;
- f:前滾一屏;
- q:退出;
- /word:搜索word字符串;
二、文件相關命令
2.1 創建文件(touch)
touch命令:創建文件或修改文件時間,如果文件不存在,可以創建一個空白文件,如果文件已經存在,可以修改文件的末次修改日期。
[root@longmax2002 zy]# touch test
[root@longmax2002 zy]# ll
total 0
-rw-r--r-- 1 root root 0 Sep 29 13:18 test
2.2 創建目錄(mkdir)
mkdir命令:創建一個新的目錄。
選項 | 含義 |
---|---|
-p | 可以遞歸創建目錄 |
新建目錄的名稱不能與當前目錄中已有的目錄或文件同名。
[root@longmax2002 zy]# mkdir test
mkdir: cannot create directory ‘test’: File exists
2.3 刪除文件/目錄(rm)
rm命令:刪除文件或目錄,使用 rm 命令要小心,因為文件刪除后不能恢復。
選項 | 含義 |
---|---|
-f | 強制刪除,忽略不存在的文件,無需提示 |
-r | 遞歸地刪除目錄下的內容,刪除文件夾時必須加此參數 |
rm -rf test
2.4 軟/硬鏈接(ln)
命令:
ln -s 被鏈接的源文件 鏈接文件
建立文件的軟鏈接,用通俗的方式講類似於Windows下的快捷方式。
注意:
- 沒有-s選項建立的是一個硬鏈接文件兩個文件占用相同大小的硬盤空間,工作中幾乎不會建立文件的硬鏈接。
- 源文件要使用絕對路徑,不能使用相對路徑,這樣可以方便移動鏈接文件后,仍然能夠正常使用。
在 Linux 中,文件名和文件的數據是分開存儲的:
提示:
- 在 Linux 中,只有文件的 硬鏈接數 == 0 才會被刪除。
- 使用 ls -l 可以查看一個文件的硬鏈接的數量。
- 在日常工作中,幾乎不會建立文件的硬鏈接。
2.5 打包/解解包(tar)
打包壓縮 是日常工作中備份文件的一種方式,在不同操作系統中,常用的打包壓縮方式是不同的:
- Windows 常用 rar。
- Mac 常用 zip。
- Linux 常用 tar.gz。
tar 是 Linux 中最常用的備份工具,此命令可以把一系列文件打包到一個大文件中,也可以把一個打包的大文件恢復成一系列文件。
tar 的命令格式如下:
# 打包文件
tar -cvf 打包文件.tar 被打包的文件/路徑... # 解包文件
tar -xvf 打包文件.tar
tar選項說明:
選項 | 含義 |
---|---|
c | 生成檔案文件,創建打包文件 |
x | 解開檔案文件 |
v | 列出歸檔解檔的詳細過程,顯示進度 |
f | 指定檔案文件名稱,f 后面一定是 .tar 文件,所以必須放選項最后 |
注意: f 選項必須放在最后,其他選項順序可以隨意。
2.6 壓縮/解壓縮(tar)
tar 與 gzip 命令結合可以使用實現文件打包和壓縮,tar 只負責打包文件,但不壓縮,用 gzip 壓縮 tar 打包后的文件,其擴展名一般用 xxx.tar.gz。
在 Linux 中,最常見的壓縮文件格式就是 xxx.tar.gz。
在 tar 命令中有一個選項 -z 可以調用 gzip ,從而可以方便的實現壓縮和解壓縮的。
功能命令格式如下:
# 壓縮文件
tar -zcvf 打包文件.tar.gz 被壓縮的文件/路徑... # 解壓縮文件
tar -zxvf 打包文件.tar.gz # 解壓縮到指定路徑
tar -zxvf 打包文件.tar.gz -C 目標路徑
選項 | 含義 |
---|---|
-C | 解壓縮到指定目錄,注意:要解壓縮的目錄必須存在 |
tar 與 bzip2 命令結合可以使用實現文件打包和壓縮(用法和 gzip 一樣, tar 只負責打包文件,但不壓縮,用 bzip2 壓縮 tar 打包后的文件,其擴展名一般用 xxx.tar.bz2。
在 tar 命令中有一個選項 -j 可以調用 bzip2 ,從而可以方便的實現壓縮和解壓縮的功能。
命令格式如下:
# 壓縮文件
tar -jcvf 打包文件.tar.bz2 被壓縮的文件/路徑... # 解壓縮文件
tar -jxvf 打包文件.tar.bz2
2.7 查看文件(cat、more)
cat 命令可以用來查看文件內容、創建文件、文件合並、追加文件內容 等功能。
cat 會一次顯示所有的內容,適合查看內容較少的文本文件。
選項 | 含義 |
---|---|
-b | 對非空輸出行編號 |
-n | 對輸出的所有行編號 |
[root@longmax2002 zy]# cat -n test
1 222
2 3333
3 444
4 5655
5 67777
Linux 中還有一個 nl 的命令和 cat -b 的效果等價。
more 命令可以用於分屏顯示文件內容,每次只顯示一頁內容,適合於 查看內容較多的文本文件。
操作鍵 | 功能 |
---|---|
空格鍵 | 顯示手冊頁的下一屏 |
Enter | 鍵 一次滾動手冊頁的一行 |
b | 回滾一屏 |
f | 前滾一屏 |
q | 退出 |
/word | 搜索 word 字符串 |
2.8 查找文件(find)
find 命令功能非常強大,通常用來在特定的目錄下,搜索符合條件的文件。
命令:
find [路徑] -name “*.py”
查找指定路徑下擴展名是 .py 的文件,包括子目錄。
- 如果省略路徑,表示在當前文件夾下查找;
- 通配符,在使用 find 命令時同時可用;
2.9 查看目錄(ls)
ls 是英文單詞 list 的簡寫,其功能為列出目錄的內容,是用戶最常用的命令之一,類似於 DOS下的 dir 命令。
- Linux 文件或者目錄名稱最長可以有 256 個字符參數;
- 以 . 開頭的文件為隱藏文件,需要用 -a 參數才能顯示;
- . 代表當前目錄;
- … 代表上一級目錄;
ls常用選項:
參數 | 含義 |
---|---|
-a | 顯示指定目錄下所有子目錄與文件,包括隱藏文件 |
-l | 以列表方式顯示文件的詳細信息 |
-h | 配合 -l 以人性化的方式顯示文件大小 |
ls通配符的使用:
通配符 | 含義 |
---|---|
* | 代表任意個數個字符 |
? | 代表任意一個字符,至少 1 個 |
[] | 表示可以匹配字符組中的任一一個 |
[abc] | 匹配 a、b、c 中的任意一個 |
[a-f] | 匹配從 a 到 f 范圍內的的任意一個字符 |
注意:以 . 開頭的文件為隱藏文件,需要用 -a 參數才能顯示。
[root@longmax2002 ~]# ls *
node-v12.18.1-linux-x64.tar.xz logs: nacos nacos: naming node-v12.18.1-linux-x64: bin CHANGELOG.md include lib LICENSE README.md share
tree 命令可以以樹狀圖列出文件目錄結構:
選項 | 含義 |
---|---|
-d | 只顯示目錄 |
2.10 切換目錄(cd)
cd 是英文單詞 change directory 的簡寫,其功能為更改當前的工作目錄,也是用戶最常用的命令之一。
命令 | 含義 |
---|---|
cd | 切換到當前用戶的主目錄(/home/用戶目錄) |
cd ~ | 切換到當前用戶的主目錄(/home/用戶目錄) |
cd . | 保持在當前目錄不變 |
cd … | 切換到上級目錄 |
cd - | 可以在最近兩次工作目錄之間來回切換 |
相對路徑和絕對路徑:
- 相對路徑 在輸入路徑時,最前面不是 / 或者 ~,表示相對當前目錄所在的目錄位置;
- 絕對路徑 在輸入路徑時,最前面是 / 或者 ~,表示從根目錄/家目錄開始的具體目錄位置;
2.11 復制文件(cp)
cp 命令的功能是將給出的文件或目錄復制到另一個文件或目錄 中,相當DOS 下的 copy命令。
選 項 | 含義 |
---|---|
-i | 覆蓋文件前提示 |
-r | 若給出的源文件是目錄文件,則 cp 將遞歸復制該目錄下的所有子目錄和文件,目標文件必 |
cp 源文件 目標文件(路徑+可以重命名文件名)
2.12 移動文件(mv)
mv 命令可以用來移動文件或目錄,也可以給文件或目錄重命名。
選項 | 含義 |
---|---|
-i | 覆蓋文件前提示 |
mv 源文件 目標文件(路徑+文件名) mv 源文件 目標路徑/
2.13 文本搜索(grep)
grep 命令是一種強大的文本搜索工具,grep 允許對文本文件進行模式查找,所謂模式查找,又被稱為正則表達式。
選項 | 含義 |
---|---|
-n | 顯示匹配行及行號 |
-v | 顯示不包含匹配文本的所有行(相當於求反) |
-i | 忽略大小寫 |
常用的兩種模式查找
參數 | 含義 |
---|---|
^a | 行首,搜尋以 a 開頭的行 |
ke$ | 行尾,搜尋以 ke 結束的行 |
[root@longmax2002 zy]# cat -n test
1 222
2 3333
3 444
4 5655
5 67777 [root@longmax2002 zy]# ^C
[root@longmax2002 zy]# more test | grep -n -i 5655
4:5655
三、進程、內存系統信息相關命令
3.1 查看系統
uname -a (Linux查看版本當前操作系統內核信息)
[root@longmax2002 yuncang]# uname -a
Linux longmax2002 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
cat /proc/version (Linux查看當前操作系統版本信息)
[root@longmax2002 yuncang]# cat /proc/version
Linux version 3.10.0-862.14.4.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Wed Sep 26 15:12:11 UTC 2018
cat /etc/issue 或cat /etc/redhat-release(Linux查看版本當前操作系統發行版信息)
[root@longmax2002 yuncang]# cat /etc/issue
\S Kernel \r on an \m
.getconf LONG_BIT (Linux查看版本說明當前CPU運行在32bit模式下, 但不代表CPU不支持64bit)
hostname (查看服務器名稱)
[root@longmax2002 yuncang]# hostname
longmax2002
cat /proc/cpuinfo( 查看CPU信息 )
[root@longmax2002 yuncang]# cat /proc/cpuinfo
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 85 model name : Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz stepping : 7 microcode : 0x1 cpu MHz : 2500.016 cache size : 36608 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 22 wp : yes
3.2 時間和日期(date、cal)
date命令:查看系統時間。
[root@longmax2002 zy]# date
Wed Sep 29 13:41:41 CST 2021
cal命令:calendar 查看日歷, -y 選項可以查看一年的日歷
[root@longmax2002 zy]# cal
September 2021 Su Mo Tu We Th Fr Sa 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
3.3 進程信息(ps、top、kill、pgrep)
所謂進程,通俗地說就是 當前正在執行的一個程序:
Linux ps (英文全拼:process status)命令用於顯示當前進程的狀態,類似於 windows 的任務管理器。
ps [options] [--help]
選項 | 含義 |
---|---|
a | 顯示終端上的所有進程 |
u | 顯示進程的詳細狀態 |
x | 顯示沒有控制終端的進程 |
-A | 顯示終端上的所有進程 |
-e | 等於"-A" |
e | 顯示環境變量 |
f | 顯示程序間的關系 |
ps aux:顯示所有包含其他使用者的進程。
[root@longmax2002 yuncang]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 51736 2712 ? Ss May10 5:03 /usr/lib/syste root 2 0.0 0.0 0 0 ? S May10 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S May10 0:13 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< May10 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S May10 0:05 [migration/0] root 8 0.0 0.0 0 0 ? S May10 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? S May10 39:39 [rcu_sched] root 10 0.0 0.0 0 0 ? S< May10 0:00 [lru-add-drain root 11 0.0 0.0 0 0 ? S May10 0:30 [watchdog/0] root 12 0.0 0.0 0 0 ? S May10 0:20 [watchdog/1] root 13 0.0 0.0 0 0 ? S May10 0:06 [migration/1] root 14 0.0 0.0 0 0 ? S May10 0:20 [ksoftirqd/1] root 16 0.0 0.0 0 0 ? S< May10 0:00 [kworker/1:0H] root 18 0.0 0.0 0 0 ? S May10 0:00 [kdevtmpfs] root 19 0.0 0.0 0 0 ? S< May10 0:00 [netns] root 20 0.0 0.0 0 0 ? S May10 0:07 [khungtaskd] root 21 0.0 0.0 0 0 ? S< May10 0:00 [writeback] root 22 0.0 0.0 0 0 ? S< May10 0:00 [kintegrityd] root 23 0.0 0.0 0 0 ? S< May10 0:00 [bioset] root 24 0.0 0.0 0 0 ? S< May10 0:00 [bioset] root 25 0.0 0.0 0 0 ? S< May10 0:00 [bioset] root 26 0.0 0.0 0 0 ? S< May10 0:00 [kblockd] root 27 0.0 0.0 0 0 ? S< May10 0:00 [md] root 28 0.0 0.0 0 0 ? S< May10 0:00 [edac-poller] root 35 0.0 0.0 0 0 ? S May10 58:07 [kswapd0]
查找指定進程:
ps -ef | grep 進程關鍵字
顯示指定用戶進程信息:
ps -u root
根據端口獲取進程pid:
port=30999 #根據端口號查找對應的pid pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');
Linux top命令用於實時顯示 process 的動態。
顯示進程信息:
top - 14:26:38 up 141 days, 17:15, 1 user, load average: 0.00, 0.10, 0.27 Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.3 sy, 0.0 ni, 99.3 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 3880924 total, 682528 free, 1590964 used, 1607432 buff/cache KiB Swap: 0 total, 0 free, 0 used. 2034188 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3441 mysql 20 0 1951624 639476 5048 S 0.3 16.5 518:43.85 mysqld 7515 root 10 -10 141776 18480 4532 S 0.3 0.5 65:36.51 AliYunDun 9827 root 10 -10 41932 1920 420 S 0.3 0.0 7:15.38 AliYunDunUpdate 29249 root 20 0 145308 1500 248 S 0.3 0.0 82:52.92 redis-server 1 root 20 0 51736 2712 1376 S 0.0 0.1 5:03.56 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.08 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:13.22 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:05.41 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 39:39.82 rcu_sched 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:30.64 watchdog/0
12 root rt 0 0 0 0 S 0.0 0.0 0:20.67 watchdog/1
13 root rt 0 0 0 0 S 0.0 0.0 0:06.88 migration/1
14 root 20 0 0 0 0 S 0.0 0.0 0:20.14 ksoftirqd/1
顯示完整命令:
top -c
kill [-9] 進程代號:終止指定代號的進程, -9 表示強行終止。使用 kill 命令時,最好只終止由當前用戶開啟的進程,而不要終止 root 身份開啟的進程,否則可能導致系統經常要查看進程的信息,包括進程的是否已經消亡,通過pgrep來獲得正在被調度的進程的相關信息。pgrep通過匹配其程序名,找到匹配的進程
選項 | 描述 |
---|---|
-o | 僅顯示找到的最小(起始)進程號; |
-n | 僅顯示找到的最大(結束)進程號; |
-l | 顯示進程名稱; |
-P | 指定父進程號; |
-g | 指定進程組; |
-t | 指定開啟進程的終端; |
-f | 進程全名 |
-u | 指定進程的有效用戶ID。 |
查看指定名稱的進程信息:
[root@VM-0-17-centos server]# pgrep ngsp-cmc 8564
-n 當匹配多個進程時,顯示進程號最大的那個:
[root@VM-0-17-centos server]# pgrep -n ngsp-cmc 8564
3.4 磁盤信息(df、du)
Linux df(英文全拼:disk free) 命令用於顯示目前在 Linux 系統上的文件系統磁盤使用情況統計。
df [選項]... [FILE]...
參數 | 含義 |
---|---|
-a | 包含所有的具有 0 Blocks 的文件系統 |
--block-size={SIZE} | 使用 {SIZE} 大小的 Blocks |
-i | Inodes 列出 inode 資訊,不列出已使用 block |
-h | 使用人類可讀的格式 |
顯示文件系統的磁盤使用情況統計:
[root@longmax2002 zy]# df
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vda1 61794300 53811240 4821056 92% / devtmpfs 1929864 0 1929864 0% /dev tmpfs 1940460 0 1940460 0% /dev/shm tmpfs 1940460 676 1939784 1% /run tmpfs 1940460 0 1940460 0% /sys/fs/cgroup tmpfs 388096 0 388096 0% /run/user/0
第一列指定文件系統的名稱,第二列指定一個特定的文件系統1K-塊1K是1024字節為單位的總內存。用和可用列正在使用中,分別指定的內存量。
使用列指定使用的內存的百分比,而最后一欄"安裝在"指定的文件系統的掛載點。
用一個-i選項的df命令的輸出顯示inode信息而非塊使用量。
Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vda1 3932160 83009 3849151 3% / devtmpfs 482466 332 482134 1% /dev tmpfs 485115 2 485113 1% /dev/shm tmpfs 485115 480 484635 1% /run tmpfs 485115 16 485099 1% /sys/fs/cgroup tmpfs 485115 1 485114 1% /run/user/0
-h選項,通過它可以產生可讀的格式df命令的輸出:
Filesystem Size Used Avail Use% Mounted on /dev/vda1 59G 52G 4.6G 92% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 676K 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup tmpfs 379M 0 379M 0% /run/user/0
Linux du (英文全拼:disk usage)命令用於顯示目錄或文件的大小。du 會顯示指定的目錄或文件所占用的磁盤空間。
顯示目錄或者文件所占空間:
[root@bogon194 shell]# du
4 ./test 32 .
只顯示當前目錄下面的子目錄的目錄大小和當前目錄的總的大小,最下面的32為當前目錄的總大小
顯示指定文件所占空間:
du log2012.log
方便閱讀的格式顯示test目錄所占空間情況:
[root@bogon194 shell]# du -h
4.0K ./test 32K .
3.5 查看網卡信息
ifconfig:查看/配置計算機當前的網卡配置信息
[root@longmax2002 yuncang]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet xxx.xx.0.1 netmask 255.255.0.0 broadcast 0.0.0.0 ether 02:42:e7:7c:76:74 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet xxx.xx.xxx.47 netmask 255.255.240.0 broadcast xxx.xx.xxx.255 ether 00:16:3e:08:09:35 txqueuelen 1000 (Ethernet) RX packets 32758819 bytes 10010046741 (9.3 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 27094266 bytes 8748881502 (8.1 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 260063355 bytes 71415552425 (66.5 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 260063355 bytes 71415552425 (66.5 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
提示:一台計算機中有可能會有一個物理網卡和多個虛擬網卡,在 Linux 中物理網卡的名字通常以 ensX、ethx表示
127.0.0.1 被稱為本地回環/環回地址,一般用來測試本機網卡是否正常。
ping 一般用於檢測當前計算機到目標計算機之間的網絡 是否通暢,數值越大,速度越慢。
# 檢測到目標主機是否連接正常
$ ping IP地址 # 檢測本地網卡工作正常
$ ping 127.0.0.1
3.6 netstat
Netstat 命令用於顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等。
常見參數:
- -a (all)顯示所有選項,默認不顯示LISTEN相關;
- -t (tcp)僅顯示tcp相關選項;
- -u (udp)僅顯示udp相關選項;
- -n 拒絕顯示別名,能顯示數字的全部轉化成數字;
- -l 僅列出有在 Listen (監聽) 的服務狀態;
- -p 顯示建立相關鏈接的程序名;
- -r 顯示路由信息,路由表;
- -e 顯示擴展信息,例如uid等;
- -s 按各個協議進行統計;
- -c 每隔一個固定時間,執行該netstat命令。
提示:LISTEN和LISTENING的狀態只有用-a或者-l才能看到.。
列出所有端口 (包括監聽和未監聽的):
[root@bogon194 ~]# netstat -a | more
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:afs3-fileserver 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN tcp 0 0 bogon194:41320 10.64.200.219:29010 TIME_WAIT tcp 0 0 bogon194:42544 10.64.200.219:29010 TIME_WAIT tcp 0 0 bogon194:60106 10.64.200.219:29010 TIME_WAIT
列出所有 tcp 端口 netstat -at:
[root@bogon194 ~]# netstat -at | more
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:afs3-fileserver 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN tcp 0 0 bogon194:41320 10.64.200.219:29010 TIME_WAIT tcp 0 0 bogon194:42544 10.64.200.219:29010 TIME_WAIT tcp 0 0 bogon194:57808 10.64.200.219:29010 TIME_WAIT
列出所有 udp 端口 netstat -au:
[root@bogon194 ~]# netstat -au | more
列出所有監聽 tcp 端口:
[root@bogon194 ~]# netstat -lt | more
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:afs3-fileserver 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN tcp6 0 0 [::]:6379 [::]:* LISTEN tcp6 0 0 [::]:6540 [::]:* LISTEN
四、用戶權限相關命令
4.1 組管理
普通用戶創建組 / 刪除組 的終端命令都需要通過 sudo 執行:
命令 | 作用 |
---|---|
groupadd 組名 | 添加組 |
groupdel 組名 | 刪除組 |
cat /etc/group | 確認組信息 |
chgrp -R 組名 文件/目錄名 | 遞歸修改文件/目錄的所屬組 |
組信息保存在 /etc/group 文件中,/etc 目錄是專門用來保存 系統配置信息 的目錄。
4.2 用戶管理
普通用戶創建用戶 / 刪除用戶 / 修改其他用戶密碼 的終端命令都需要通過 sudo 執行。
命令 | 作用 |
---|---|
user -m -g add 組名 新建用戶名 | 添加新用戶 -m 自動建立用戶home路徑 -g 指定用戶所在的組,否則會新建一個同名的組 |
passwd 用戶名 | 設置用戶密碼 如果是普通用戶,直接用passwd可以修改自己的賬號密碼 |
userdel -r 用戶名 | 刪除用戶 -r 自動刪除用戶home路徑 |
cat /etc/passwd | grep 用戶名 | 確認用戶信息 新建用戶后,用戶信息會保存在/etc/passwd文件中 |
4.3 查看用戶信息
id [用戶名]:查看用戶 UID 和 GID 信息。
[root@longmax2002 yuncang]# id root
uid=0(root) gid=0(root) groups=0(root)
who:查看當前所有登錄的用戶列表;
[root@longmax2002 yuncang]# who
root pts/1 2021-09-29 13:12 (xxx.xxx.xxxx.xx)
whoami:查看當前登錄用戶的賬戶名。
[root@longmax2002 yuncang]# whoami
root
4.4 which
which 命令可以查看執行命令所在位置,例如:
which ls # 輸出 # /bin/ls
which useradd # 輸出 # /usr/sbin/useradd
4.5 切換用戶
su -用戶名:切換用戶,並且切換目錄;
exit: 退出當前登錄用戶。
4.6 修改文件權限
chown:修改擁有者;
chgrp:修改組;
chmod:修改權限。
# 修改文件|目錄的擁有者
chown 用戶名 文件名|目錄名 # 遞歸修改文件|目錄的組
chgrp -R 組名 文件名|目錄名 # 遞歸修改文件權限
chmod -R 755 文件名|目錄名
五、遠程管理相關命令
5.1 關機/重啟
shutdown:關機/重新啟動。
# 重新啟動操作系統,其中 now 表示現在
$ shutdown -r now # 立刻關機,其中 now 表示現在
$ shutdown now # 系統在今天的 20:25 會關機
$ shutdown 20:25
# 系統再過十分鍾后自動關機
$ shutdown +10
# 取消之前指定的關機計划
$ shutdown -c
5.2 ssh命令
在 Linux 中 SSH 是 非常常用 的工具,通過 SSH 客戶端 我們可以連接到運行了SSH服務器 的遠程機器上。
ssh的簡單使用:
ssh [-p port] user@remote
- user 是在遠程機器上的用戶名,如果不指定的話默認為當前用戶;
- remote 是遠程機器的地址,可以是 IP/域名,或者是 后面會提到的別名;
- port 是 SSH Server 監聽的端口,如果不指定,就為默認值 22;
5.3 scp命令
scp 就是 secure copy ,是一個在 Linux 下用來進行 遠程拷貝文件 的命令,需要注意的是,在指定端口時用的是大寫的 -P 而不是小寫的。
# 把本地當前目錄下的 01.py 文件 復制到遠程目錄下的 Desktop/01.py # 注意:`:` 后面的路徑如果不是絕對路徑,則以用戶的Home目錄作為參照路徑
scp -P port 01.py user@remote:Desktop/01.py # 把遠程目錄下的Desktop/01.py 文件 復制到本地當前目錄下的 01.py
scp -P port user@remote:Desktop/01.py 01.py # 加上 -r 選項可以傳送文件夾 # 把當前目錄下的demo文件夾 復制到遠程目錄Desktop
scp -r demo user@remote:Desktop # 把遠程目錄Desktop下的文件復制到當前目錄下的demo文件夾
scp -r user@remote:Desktop demo
選 項 | 含義 |
---|---|
-r | 若給出的源文件是目錄文件,則 scp 將遞歸復制該目錄下的所有子目錄和文件,目標文件必須為一個目錄名 |
-P | 若遠程 SSH 服務器的端口不是 22,需要使用大寫字母 -P 選項指定端口 |
六、簡單案例
6.1 通過端口停止一個spring boot web進程
#!/bin/bash
port=30999
#根據端口號查找對應的pid
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }'); #殺掉對應的進程(如果pid長度不為0)
if [ -n "$pid" ]; then echo $pid; kill -9 $pid; fi
首先利用netstat -nlp,列出所有監聽端口,然后通過grep :\$port過濾滿足的行數據。利用awk '{print \$7}'輸出文本第7項:
最后利用awk -F,對字符串按照'/'拆分,並獲取得到pid。
6.2 start/stop/restart服務腳本
#! /bin/bash # 獲取工作路徑 WORKSPACE=`cd "$(dirname "$0")"/ || exist; pwd` cd $WORKSPACE # 創建臨時目錄 mkdir -p var # 軟件信息 module=ngsp app=$module-cmc pid_file=var/app.pid log_file=var/app.log # 從pid文件獲取進程pid function check_pid() { if [ -f $pid_file ];then pid=`cat $pid_file` if [[ -n $pid ]]; then return `pgrep -f $app | grep -cv "PID TTY"` fi fi return 0 } # 啟動服務 function start() { check_pid # 獲取進程pid pid=$? if [ $pid -gt 0 ];then echo -n "$app now is running already, pid=" echo $pid_file return 1 fi # 啟動進程命令 nohup ./$app web &> $log_file & sleep 1 pid=`pgrep -f $app | grep -cv "PID TTY"` if [ $pid -gt 0 ];then echo $! > $pid_file echo "$app started..., pid=$!" else echo "$app failed to start." return 1 fi } # 停止服務 function stop() { pgrep -f $app | xargs kill -9 rm -f $pid_file echo "$app stopped..." } # 重啟服務 function restart() { stop sleep 1 start } # 獲取進程狀態 function status() { check_pid pid=$? if [ $pid -gt 0 ];then echo started else echo stoped fi } # 幫助 function help() { echo "$0 start|stop|restart|status" } if [ "$1" == "" ]; then help elif [ "$1" == "stop" ];then stop elif [ "$1" == "start" ];then start elif [ "$1" == "restart" ];then restart elif [ "$1" == "status" ];then status else help fi