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