Linux 常用終端命令整理


linux系統中提供了大量的命令,該文整理了一份使用較為頻繁的命令,並且我們對命令進行了一個詳細的分類。

一 、Linux命令格式

1.1 Linux終端命令格式

終端命令格式:

command [-options] [parameter]

說明:

  • command :命令名,相應功能的英文單詞或單詞的縮寫;
  • [-options] :選項,可用來對命令進行控制,也可以省略;
  • parameter :傳給命令的參數,可以是 零個、一個 或者 多個;

在linux命令行中,命令的參數有的時候是一個連字符,有的時候是兩個連字符。

對於options類型參數可以有兩種方式:

  • 短選項(short options):顧名思義,就是短小參數。它們通常包含一個連字號和一個字母(大寫或小寫字母),例如:-s,-h等。
  • 長選項(long options):長選項,包含了兩個連字號和一些大小寫字母組成的單詞,例如:--size,--help等。

注:

  1. 一個程序通常會提供包括short options和long options兩種參數形式的參數,short options一般是其對應的long options的開頭字母。

  2. - 和--可以用來做區分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下的快捷方式。

注意:

  1. 沒有-s選項建立的是一個硬鏈接文件兩個文件占用相同大小的硬盤空間,工作中幾乎不會建立文件的硬鏈接。
  2. 源文件要使用絕對路徑,不能使用相對路徑,這樣可以方便移動鏈接文件后,仍然能夠正常使用。

在 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

 

 

 

參考文章

[1]史上最全的Linux常用命令匯總(超全面!超詳細!)收藏這一篇就夠了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM