1. Linux终端与命令行基础

在Linux系统中,终端与命令行是开发者最核心的操作工具,也是后续Linux开发、系统管理的基础。 与Windows系统以图形化界面为主不同,Linux系统的核心操作依赖命令行界面——通过输入指令, 直接与系统内核交互,实现文件管理、进程控制、环境配置等所有操作。

本章将从终端的本质与启动方式入手,详细讲解命令行的基本格式、核心语法,以及最常用的基础命令,搭配实操案例和注意事项, 帮助学习者彻底掌握终端与命令行的使用,摆脱对图形化界面的依赖,为后续Linux开发和系统操作奠定坚实基础。

本章核心目标:掌握Linux终端的启动与配置方法,理解命令行的基本格式和执行原理,熟练使用文件/目录操作、系统查询、权限管理等常用命令, 能独立完成终端下的基础系统操作,具备排查简单命令错误的能力。

1.1. Linux终端概述

Linus Torvalds(林纳斯)在其自传中提到,他在编写Linux操作系统内核的时候, 首要目标就是让Linux系统能兼容正常运行Unix下的Shell程序。因为Shell是命令行解释器, 他的Linux系统若能兼容Unix的Shell,那么大部分类Unix的程序也很容易做到兼容了。

在早期的Unix系统与用户就是通过Shell进行交互的,如下图所示,Shell对外接受用户输入的命令, 对内通过“系统调用”传递给内核,内核执行操作后把输出通过Shell呈现给用户,也就是说, Shell就是一个中间人。而Shell的英文原意是“壳”的意思,也是为了把它与内核区分开来。

../../_images/command_line_0.png

在平时的交流中,有时我们会说打开Shell、终端(Terminal)或控制台(Console), 严格来说它们实际上不是同一种的东西,但只要明白,当我们说打开Shell、终端或控制台的时候, 通常就是为了使用命令行控制系统。它们的严格区分如下:

  • Shell:指命令行解释器,常见的解释器有bash,sh,在Ubuntu系统默认用的是bash解释器, 所以有时说bash也是指命令行。

  • 终端(Terminal):通常指用来运行Shell的程序,视场景的不同有不一样的名称, 如Ubuntu系统自带的叫本地终端,嵌入式开发板常常提供串口进行输入输出的串口终端, 通过网络访问的ssh终端。

  • 控制台(Console):特指某些终端,通常是指它的物理形态,如带键盘和显示器的物理设备。

1.2. 终端的启动方法

不同Linux发行版的终端启动方式略有差异,以下是最常用的3种启动方法,适配绝大多数场景:

  1. 桌面打开

  2. 串口连接

  3. ssh连接

1.2.1. 桌面启动终端

连接鼠标和键盘,可以通过以下两种方式打开:

  • 可以在软件管理里打开Terminal(终端)。

  • 可以同时按下键盘“Ctrl + Alt + T”打开桌面终端。

使用虚拟机打开终端如下图:

../../_images/command_line_1.jpg

1.2.2. 串口连接终端

串口模块连接板卡方法:

  1. 安装能够进行串口通讯的工具,这里推荐Mobaxterm。

  2. 使用串口线连接板卡。

  3. 配置Mobaxterm,使得Mobaxterm可与板卡通信。

具体方法可参考快速使用手册 《启动系统与系统登录》 章节。

串口连接终端如下图:

../../_images/command_line_2.jpg

1.2.3. ssh连接终端

ssh远程连接的方法:

  1. 板卡处于开机状态。

  2. 板卡与通信的电脑连接在同一个局域网。

  3. 打开可以ssh通讯的软件,这里推荐Mobaxterm。

  4. 配置Mobaxterm,使得Mobaxterm可与板卡通信。

具体方法可参考快速使用手册 《SSH终端登录》 章节。

ssh连接终端如下图:

../../_images/command_line_3.jpg

1.3. 命令提示符

当我们打开终端后,可以看到终端本身显示了一行字符,而且按回车后会重复出现:

1
2
3
4
5
#超级用户root
root@lubancat:~#

#普通用户cat
cat@lubancat:~$

实际上这行提示符分成以下几个部分:

  • root :“@”符号的左侧,它表示的是当前登录用户。

  • @ :分隔符号,可理解为at,表示root用户at主机lubancat上。

  • lubancat :当前系统的主机名。

  • “:” :分隔符号。

  • “~” :冒号后表示用户当前所在的目录,此处的波浪线表示当前用户的家目录, root用户的家目录为 /root ,普通用户的目录在 /home/(用户名)

  • “#”:命令提示符,Linux 用这个符号标识登录的用户权限等级。如果是超级用户, 提示符就是“#”,如果是普通用户,提示符就是“$”。

1.4. 命令行基础语法

在终端中,所有操作都通过“命令”完成,无论多么复杂的命令,其核心结构都遵循固定格式, 同时有一些通用的语法规则和技巧。

1.4.1. 命令行的基本格式

Linux命令行的基本格式为:

1
命令名 [选项] [参数]

各部分的含义的详细说明,结合实例帮助理解:

  • 命令名:核心指令,用于告诉系统要执行的操作,是命令的必填部分。

例如,ls(查看目录内容)、cd(切换目录)、mkdir(创建目录)。

  • 选项:用于修改命令的执行方式,可选部分,以“-”或“–”开头。

短选项:单个字母,多个短选项可组合使用。例如ls -l(查看目录详细信息)、ls -la(组合选项,查看所有文件,包括隐藏文件,且显示详细信息)。

长选项:完整的单词,更直观,通常与短选项功能一致。例如ls –all(等同于 ls -a,查看所有文件)、ls –long(等同于ls -l)。

  • 参数:命令的操作对象,可选部分,用于指定命令作用的文件、目录、路径等。

例如ls /home(查看/home目录下的内容,/home即为参数)、mkdir test(创建名为test的目录,test即为参数)。

实例解析:

1
2
3
4
5
6
7
8
#命令
ls -la /home/

#信息输出如下
total 12
drwxr-xr-x  3 root root 4096 Jul 11  2025 .
drwxr-xr-x 20 root root 4096 Jun 18  2024 ..
drwxr-xr-x 15 cat  cat  4096 Feb 25 17:59 cat
  • 命令名:ls,查看目录内容

  • 选项:-la,组合选项,-l显示详细信息,-a显示隐藏文件

  • 参数:/home/指定查看的目录路径

执行结果:显示/home/目录下的所有文件,包括隐藏文件,并显示每个文件的详细信息,包括权限、大小、修改时间等。

1.4.2. 命令行的核心规则

使用命令行时,需遵循以下核心规则,否则会导致命令执行失败或出现异常:

  • 大小写敏感:Linux命令、选项、参数均区分大小写,例如ls和LS是两个不同的命令,test和Test是两个不同的文件/目录,输入时需严格区分。

  • 空格分隔:命令名、选项、参数之间必须用空格分隔,使用多个连续空格不影响。例如 ls -l /home 使用单个空格和 ls   -l   /home 使用连续空格都是合法的,而 ls-l /home 是错误的。

  • 路径分隔:Linux系统中,目录路径使用“ / ”(斜杠)分隔,而Windows系统使用“ \ ”(反斜杠),这是容易混淆的点。例如Linux中的路径 /home/ubuntu,对应Windows中的 C:Usersubuntu。

  • 命令结束:输入完命令后,按下回车键,系统才会执行该命令;若命令未输入完成,终端会显示提示符(如“>”),提示用户继续输入。

  • 特殊字符转义:若命令、参数中包含特殊字符(如空格、*、?、&等),需使用“ \ ”进行转义,否则系统会误解字符的含义。例如创建名为“test file”(包含空格)的目录,需输入 mkdir test\ file ,用 \ 转义空格,否则系统会认为是创建“test”和“file”两个目录。

1.4.3. 命令行的实用技巧

掌握以下实用技巧,可大幅提升命令行操作效率,减少重复输入,避免错误:

  • Tab键自动补全:输入命令名、选项、路径或文件名的前几个字符,按下Tab键,系统会自动补全剩余内容;若有多个匹配项,按下两次Tab键,系统会列出所有匹配项,供用户选择。例如输入 cd /ho ,按下Tab键,系统会自动补全为 cd /home ;若输入 ls /s ,按下两次Tab键,会列出所有以“s”开头的文件目录。

  • 上下箭头切换历史命令:终端会记录用户输入过的所有命令,按下键盘“上箭头”(↑),可依次切换到之前输入的命令;按下“下箭头”(↓),可切换到后续输入的命令,无需重复输入常用命令。

  • Ctrl+C终止命令执行:若命令执行时间过长、陷入死循环,或输入错误命令导致无法退出,按下Ctrl+C组合键,可强制终止当前命令的执行,返回终端提示符。

  • Ctrl+L清屏:当终端显示内容过多,影响查看时,按下 Ctrl+L 组合键,可清空终端屏幕,将提示符移至屏幕顶部。

  • 历史命令查询:输入 history 命令,可查看所有历史命令,默认记录最近1000条;输入 !n (n为历史命令的序号,如!10),可快速执行第n条历史命令;输入 !命令名 ,可快速执行最近一次输入的该命令(例如 !ls ,执行最近一次的ls命令)。

  • 命令换行输入:若命令过长,可在命令中间加入“ \ ”,按下回车键,即可换行继续输入命令,系统会将换行后的内容视为同一命令。例如:

1
2
3
4
ls -la \
/home/

等同于 ls -la /home/

1.5. 核心常用命令

Linux命令繁多,但日常开发和学习中,常用的基础命令仅有几十种。 本节将按“帮助命令”、“文件/目录操作”、“系统查询”、“权限管理”、“文件查看与编辑”、“网络基础”分类, 详细讲解每个命令的功能、格式、选项和实操案例,确保学习者能熟练掌握、灵活运用。

1.5.1. 帮助命令

Linux系统中有大量命令,每个命令又有多个选项和参数,学习者无法记住所有命令的用法。 此时,可通过系统自带的帮助命令,快速查询命令的功能、选项、参数和使用实例

1.5.1.1. man命令

man是“manual”(手册)的缩写,使用该命令可查看几乎所有Linux命令的详细手册,包括命令功能、选项说明、参数含义、使用实例等,是最权威、最详细的帮助方式。

基本格式:

1
man 命令名

使用方法:

  • 如输入 man ls ,即可查看ls命令的详细手册。

  • 手册页面的操作方法:

  1. 按上或下方向键:向上或下翻一行;

  2. 按空格键:向下翻一页;

  3. 按Enter键:向下翻一行;

  4. 按b键:向上翻一页;

  5. 按/关键词:在手册中搜索关键词(例如输入 / -l,可搜索ls命令中“-l”选项的说明);

  6. 按q键:退出手册页面,返回终端。

实例:查看mkdir命令的帮助手册,输入 man mkdir ,手册中会详细说明mkdir命令的功能、选项和使用实例。

1.5.1.2. help选项

大多数Linux命令都支持 --help 选项,使用该选项可快速查看命令的核心功能、常用选项和基本用法,输出内容简洁,适合快速查询,无需进入详细手册。

基本格式:

1
命令名 --help

实例:

  • 输入 ls --help ,会输出ls命令的常用选项(如 -a、-l、-h等)和简单说明,无需进入man手册,即可快速了解用法;

  • 输入 cd --help ,会输出cd命令的功能、常用参数(如 ~、..、-等)和使用说明。

注意:部分命令的短选项帮助可使用 -h (如ls -h),但并非所有命令都支持,建议优先使用 --help ,兼容性更强。

1.5.1.3. info命令

info命令与man命令类似,均可查看命令的详细帮助信息,但info命令的帮助内容更详细、更结构化,通常包含命令的背景、使用场景、高级用法等,适合深入学习命令的使用。

基本格式:

1
info 命令名

实例:

  • 输入 info ls ,即可查看ls命令的info帮助页面;

  • 页面操作与man命令类似,按空格键翻页、Enter键翻行、q键退出;

  • info页面中,带有“*”的内容移动到对应行,按Enter键进入查看更详细的子内容。

注意:info命令的帮助内容较复杂,日常快速查询建议使用–help或man命令,info命令适合深入研究命令的高级用法。

1.5.2. 文件/目录操作命令

文件和目录是Linux系统中最基础的存储单元,所有数据都以文件形式存储,文件按目录分类管理。

1.5.2.1. cd命令

功能:切换当前终端的工作目录,是最常用的命令之一。

基本格式:

1
cd [目录路径]

常用参数/用法:

  • cd 绝对路径:从根目录(/)开始定位目录,路径完整,无论当前在哪个目录,都能准确切换。例如 cd /etc/apt/:切换到/etc/apt/目录;

  • cd 相对路径:相对于当前工作目录定位目录,路径不完整,需结合当前目录位置。例如当前目录为/etc,输入 cd apt ,等同于 cd /etc/apt

  • cd ~:快速切换到当前用户的主目录(~ 代表主目录)。例如普通用户输入 cd ~ ,切换到/home/用户名,管理员用户输入 cd ~ ,切换到/root;

  • cd ..:切换到当前目录的上一级目录(.. 代表上一级目录)。例如当前目录为/home/cat/test/,输入 cd .. ,切换到/home/cat,输入 cd ../.. ,切换到/home目录,即上两级目录。

  • cd -:切换到上一次工作的目录。例如先输入 cd /home/ ,再输入 cd /etc ,最后输入 cd - ,会切换回/home/目录。

注意事项:

  • 若目录路径不存在,终端会提示“no such file or directory”(无此文件或目录),需检查路径是否输入正确;

  • 普通用户无法直接切换到/root超级管理员家目录,需输入 sudo cd /root ,才能进入。

1.5.2.2. ls命令

功能:查看当前目录或指定目录下的文件和目录,是最常用的命令之一,可通过选项控制查看的内容和格式。

基本格式:

1
ls [选项] [目录路径]

常用选项:

  • -l:以长格式显示文件/目录的详细信息,包括权限、所有者、大小、修改时间等;

  • -a:显示所有文件和目录,包括隐藏文件,Linux中,以“.”开头的文件/目录为隐藏文件;

  • -h:以人类可读的格式显示文件大小,如KB、MB、GB,而非默认的字节数;

  • -d:仅显示目录本身的信息,不显示目录下的内容;

  • -t:按文件/目录的修改时间排序,最新修改的排在前面;

  • -r:反向排序,默认按字母顺序,-r则按反向字母顺序;结合-t,可按修改时间反向排序。

常用参数/用法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#查看当前目录下的所有非隐藏文件和目录
ls

#查看当前目录下所有非隐藏文件/目录的详细信息
#输出内容包括:权限、链接数、所有者、所属组、大小、修改时间、文件名
ls -l

#查看当前目录下所有文件/目录的详细信息
ls -la

#查看/home目录下的文件/目录,以人类可读格式显示大小,且显示详细信息
ls -lh /home

#仅显示/home目录本身的详细信息,不显示其下的文件/目录
ls -d /home

#查看当前目录下的文件/目录,按修改时间排序
ls -lt

输出结果解读,以ls -l为例:

1
2
3
ls -l

-rw-r--r-- 1 cat cat   20 Feb 27 10:38 test.txt

各部分含义:

  • -rw-r–r–:文件权限;

  • 1:文件的硬链接数量;

  • cat:文件所有者;

  • cat:文件所属组;

  • 20:文件大小,默认字节数,加-h选项后显示为KB/MB;

  • Feb 27 10:38:文件的最后修改时间;

  • test.txt:文件名。

1.5.2.3. mkdir命令

功能:创建一个或多个新的目录,支持一次性创建单个目录或多级目录。

基本格式:

1
mkdir [选项] 目录名1 [目录名2 ...]

常用参数/用法:

  • -p:递归创建多级目录,若上级目录不存在,自动创建上级目录;

  • -m:创建目录时,直接指定目录的权限。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#在当前目录下,创建名为test的目录
mkdir test

#在当前目录下,同时创建test1、test2、test3三个目录
mkdir test1 test2 test3

#递归创建多级目录,即创建test目录,再在test下创建a目录,a下创建b目录,b下创建c目录
#若不使用-p选项,会提示“no such file or directory”
mkdir -p test/a/b/c

#创建名为test4的目录,并指定其权限为755
mkdir -m 755 test4

注意事项:

  • 若要创建的目录已存在,终端会提示“cannot create directory ‘test’: File exists”(无法创建目录,文件已存在);

  • 创建目录时,需确保当前用户有该目录所在路径的写入权限,否则会提示“permission denied”(权限拒绝)。

1.5.2.4. rmdir命令

功能:删除空目录,支持一次性删除单个空目录或多级空目录。

基本格式:

1
rmdir [选项] 目录名1 [目录名2 ...]

常用参数:

  • -p:递归删除空目录,删除指定目录后,若其上级目录也为空,自动删除上级目录。

实操案例:

1
2
3
4
5
6
7
#删除当前目录下的空目录test,若test目录下有文件,会删除失败
rmdir test

#递归删除test/a/b/c目录
#若删除c后b为空,则删除b;删除b后a为空,则删除a;删除a后test为空,则删除test
#仅适用于所有目录均为空的情况
rmdir -p test/a/b/c

注意事项:

  • rmdir仅能删除空目录;

  • 删除目录前,建议先使用ls命令查看目录下的内容,避免误删。

1.5.2.5. touch命令

功能:有两个核心用途:

  • 创建一个或多个空文件;

  • 修改已有文件的访问时间和修改时间,不改变文件内容。

基本格式:

1
touch [选项] 文件名1 [文件名2 ...]

常用选项:

  • -a:仅修改文件的访问时间;

  • -m:仅修改文件的修改时间;

  • -d:指定文件的访问时间和修改时间(格式:YYYY-MM-DD HH:MM:SS)。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#在当前目录下,创建一个名为test.txt的空文件,若该文件已存在,仅修改其时间
touch test.txt

#同时创建file1.txt、file2.txt、file3.txt三个空文件
touch file1.txt file2.txt file3.txt

#仅修改test.txt的访问时间,不改变修改时间和文件内容
touch -a test.txt

#将test.txt的访问时间和修改时间,指定为2025年5月20日15:30:00
touch -d "2025-05-20 15:30:00" test.txt

注意事项:

  • touch创建的文件默认为空文件,若要创建有内容的文件,需使用编辑器,如Vim;

  • 若文件已存在,touch不会删除文件内容,仅修改其时间属性。

1.5.2.6. cp命令

功能:将文件或目录从一个路径复制到另一个路径,支持复制单个文件、多个文件,或复制目录。

基本格式:

1
cp [选项] 源文件/目录 目标路径

常用选项:

  • -r:递归复制目录,复制目录时必须使用该选项,否则无法复制目录;

  • -v:显示复制过程,详细提示正在复制的文件/目录;

  • -f:强制复制,若目标路径已存在同名文件/目录,直接覆盖,不提示;

  • -i:交互式复制,若目标路径已存在同名文件/目录,提示用户是否覆盖,默认选项,可省略;

  • -a:归档复制,等同于-r -p,复制目录时,保留文件的权限、所有者、时间等属性,适合备份。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#复制文件,将当前目录下的test.txt文件,复制到/home/cat/test目录下
cp test.txt /home/cat/test

#复制多个文件,将test1.txt和test2.txt,同时复制到/home/cat/test目录下
cp test1.txt test2.txt /home/cat/test

#复制目录,将当前目录下的test目录,包括其下所有文件和子目录,复制到/home/cat/test2目录下
cp -r test /home/cat/test2

#强制覆盖复制,若目标目录已存在test.txt,直接覆盖,不提示
cp -f test.txt /home/cat/test

#归档复制,复制test目录,并保留其所有属性,如权限、时间等,适合备份
cp -a test /home/cat/backup

注意事项:

  • 复制目录时,必须加 -r 选项,否则终端会提示“omitting directory”(忽略目录);

  • 若目标路径是一个已存在的目录,源文件/目录会被复制到该目录下;若目标路径是一个不存在的文件/目录,会将源文件/目录重命名为该目标名称。

1.5.2.7. mv命令

功能:有两个核心用途:

  1. 将文件/目录从一个路径移动到另一个路径;

  2. 重命名文件/目录,同一目录下移动,即重命名。

基本格式:

1
mv [选项] 源文件/目录 目标路径

常用选项:

  • -i:交互式移动,若目标路径已存在同名文件/目录,提示用户是否覆盖,默认选项;

  • -f:强制移动,直接覆盖同名文件/目录,不提示;

  • -v:显示移动过程。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#移动文件,将当前目录下的test.txt,移动到指定目录
mv test.txt /home/cat/test

#移动目录,将当前目录下的test目录,移动到指定目录,无需加-r选项,与cp命令不同
mv test /home/cat/test2

#重命名文件,将当前目录下的test.txt,重命名为newtest.txt,同一目录下移动
mv test.txt newtest.txt

#重命名目录,将当前目录下的test目录,重命名为test_new
mv test test_new

#强制移动,若目标目录已存在test.txt,直接覆盖,不提示
mv -f test.txt /home/cat/test

注意事项:

  • mv命令移动目录时,无需加-r选项,直接指定源目录和目标路径即可;

  • 移动文件/目录时,若目标路径已存在同名文件/目录,默认会提示是否覆盖,若误操作,可能导致文件丢失,建议谨慎使用-f选项。

1.5.2.8. rm命令

功能:删除文件或目录,是Linux中最危险的命令之一,删除后无法恢复,除非有备份,使用时需格外谨慎。

基本格式:

1
rm [选项] 文件/目录1 [文件/目录2 ...]

常用选项:

  • -r:递归删除目录,删除目录时必须使用该选项,会删除目录下所有文件和子目录;

  • -f:强制删除,不提示用户确认,直接删除文件/目录,即使文件权限为只读;

  • -i:交互式删除,删除前提示用户确认,默认选项,可省略;

  • -v:显示删除过程。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#删除文件,删除当前目录下的test.txt文件
#默认提示“rm: remove regular file ‘test.txt’?”(确认删除),输入y确认,n取消
rm test.txt

#强制删除文件,直接删除test.txt文件,不提示确认
rm -f test.txt

#删除目录,删除当前目录下的test目录,包括其下所有文件和子目录,默认提示确认每个文件/目录的删除
rm -r test

#强制删除目录,强制删除test目录及其下所有内容,不提示确认
#最常用,但最危险,谨慎使用!
rm -rf test

#删除多个文件,强制删除多个文件,不提示
rm -f file1.txt file2.txt

注意事项:

  • rm命令删除的文件/目录,无法通过系统自带的回收站恢复,删除前务必确认文件/目录的内容和路径,避免误删;

  • 禁止使用 rm -rf / 命令( 极其危险 ),该命令会强制删除根目录下所有文件和目录,导致系统崩溃,无法恢复;

  • 删除目录时,必须加 -r 选项,否则无法删除目录;

  • 普通用户无法删除管理员用户创建的文件/目录,需加sudo权限。

1.5.3. 权限管理命令

Linux系统是多用户、多任务操作系统,为了保障系统安全,每个文件和目录都有对应的“权限”,用于控制不同用户对文件/目录的操作权限。 权限管理是Linux系统的核心特性之一,也是避免误操作、防止文件被篡改的重要保障。

Linux系统中,每个文件/目录都有3类用户身份,分别对应不同的权限:

  • 所有者(Owner):文件/目录的创建者,默认是创建该文件/目录的用户,拥有最高的操作权限;

  • 所属组(Group):文件/目录所属的用户组,该组内的所有用户,会拥有相同的组权限;

  • 其他用户(Others):既不是文件/目录的所有者,也不属于所属组的用户,权限最低。

每类用户都拥有3种基本权限,分别是:

  • 读取权限(r,read):允许查看文件内容、列出目录下的文件/目录;

  • 写入权限(w,write):允许修改文件内容、创建/删除目录下的文件/目录;

  • 执行权限(x,execute):允许执行文件、进入目录。

权限的表示方式:分为两种,一种是字符表示法(如rwx、rw-),另一种是数字表示法(如7、6、5),两种方式可以相互转换,日常使用中两种方式都会用到。

  • 字符表示法:

用r、w、x分别表示读取、写入、执行权限,-表示无该权限,每3个字符为一组,分别对应所有者、所属组、其他用户的权限。

例如:

1
2
3
4
5
6
7
8
#所有者拥有rwx(读取、写入、执行)权限,所属组拥有r-x(读取、执行)权限,其他用户拥有r--(仅读取)权限
rwxr-xr--

#所有者拥有rw-(读取、写入)权限,所属组和其他用户均拥有r--(仅读取)权限
rw-r--r--

#所有用户都拥有全部权限,风险极高,不建议设置
rwxrwxrwx
  • 数字表示法:

用数字对应权限,r=4、w=2、x=1,无权限=0,每类用户的权限为对应数字之和,共3个数字,分别对应所有者、所属组、其他用户的权限。

例如:

1
2
3
4
5
6
7
8
#对应数字表示法754
rwx(4+2+1=7)、r-x(4+0+1=5)、r--(4+0+0=4#对应数字表示法644,普通文件默认权限
rw-(4+2+0=6)、r--(4+0+0=4)、r--(4+0+0=4#对应数字表示法777
rwxrwxrwx(7+7+7)

1.5.3.1. ls -l命令

功能:查看文件/目录的详细信息,其中最左侧的字段就是权限信息,这是查看权限最常用、最直接的方法,前文讲解ls命令时已简要提及,此处重点聚焦权限字段的解读。

实操案例与解读:

执行ls -l后,输出示例如下,重点解读权限字段:

1
2
-rw-r--r-- 1 cat cat   20 May 20  2025 test.txt
drwxr-xr-x 2 cat cat 4096 Feb 27 10:43 test

test.txt普通文件:

  • 最左侧-rw-r–r–:权限字段,共10个字符,第一个字符-表示文件类型,-表示普通文件,d表示目录,l表示链接文件;

  • 第2-4个字符rw-:所有者(cat)的权限,拥有读取、写入权限,无执行权限;

  • 第5-7个字符r–:所属组(cat)的权限,仅拥有读取权限;

  • 第8-10个字符r–:其他用户的权限,仅拥有读取权限;

  • 数字表示法:所有者rw-(6)、所属组r–(4)、其他用户r–(4),即644。

test目录:

  • 最左侧drwxr-xr-x:第一个字符d表示目录;

  • 第2-4个字符rwx:所有者的权限,拥有读取、写入、执行权限(执行权限允许进入目录);

  • 第5-7个字符r-x:所属组的权限,拥有读取、执行权限;

  • 第8-10个字符r-x:其他用户的权限,拥有读取、执行权限;

  • 数字表示法:所有者rwx(7)、所属组r-x(5)、其他用户r-x(5),即755。

注意事项:

  • 目录的执行权限(x)是进入目录的前提,若没有执行权限,即使有读取权限,也无法使用cd命令进入目录;

  • 普通文件的执行权限(x)仅对可执行文件(如脚本、程序)有效,对文本文件、日志文件等,无需设置执行权限;

  • 默认情况下,普通用户创建的文件权限为644,创建的目录权限为755,管理员用户创建的文件/目录权限默认也是644/755。

1.5.3.2. chmod命令

功能:修改文件/目录的权限,是权限管理中最常用的命令,支持字符表示法和数字表示法两种修改方式, 可灵活修改所有者、所属组、其他用户的权限,满足不同场景下的权限控制需求。

基本格式:

1
2
字符表示法:chmod [用户类型][操作符][权限] 文件/目录名
数字表示法:chmod 权限数字 文件/目录名

核心参数说明:

  1. 用户类型:

  • u(user)所有者;

  • g(group)所属组;

  • o(others)其他用户;

  • a(all)所有用户。

  1. 操作符:

  • +:添加权限;

  • -:移除权限;

  • =:设置权限。

  1. 权限:

  • r(读取);

  • w(写入);

  • x(执行)。

实操案例:

假设当前有一个test.txt文件,初始权限为rw-r–r–(644),一个test目录,初始权限为rwxr-xr-x(755),以下是常用修改场景:

  • 字符表示法修改

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#给test.txt文件的所有者,添加执行权限
chmod u+x test.txt

#给test.txt文件的所属组,添加写入权限
chmod g+w test.txt

#给test.txt文件的其他用户,移除读取权限
chmod o-r test.txt

#给test目录的所有用户,添加执行权限
chmod a+x test

#给所有者设置rwx权限,所属组设置rx权限,其他用户设置r权限
chmod u=rwx,g=rx,o=r test.txt
  • 数字表示法修改

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#将test.txt文件权限设置为755(rwxr-xr--)
chmod 755 test.txt

#将test.txt文件权限设置为664(rw-rw-r--)
chmod 664 test.txt

#将test目录权限设置为770(rwxrwx---)
chmod 770 test:将test目录权限设置为770(rwxrwx---)

#将test.txt文件权限设置为600(rw-------)
chmod 600 test.txt

注意事项:

  • 只有文件/目录的所有者,或管理员用户(sudo),才能修改该文件/目录的权限,普通用户无法修改不属于自己的文件/目录权限;

  • 修改目录权限时,若要同时修改目录下所有文件和子目录的权限,需加-R(递归)选项,例如 chmod -R 755 test ,递归修改test目录及其下所有内容的权限为755;

  • 禁止将系统核心文件、目录的权限设置为777,否则会导致系统安全漏洞,可能被恶意用户篡改文件、破坏系统;

  • 修改权限时,需结合实际需求,避免过度开放权限,如普通文件无需设置执行权限,也避免权限不足导致无法正常操作,如目录无执行权限,无法进入。

1.5.3.3. chown命令

功能:修改文件/目录的所有者(Owner)和所属组(Group),当需要将文件/目录移交其他用户管理,或调整所属组时,需使用该命令, 只有管理员用户(sudo)才能修改不属于自己的文件/目录的所有者和所属组。

基本格式:

1
chown [选项] 所有者[:所属组] 文件/目录名

常用选项:

  • -R:递归修改目录及其下所有文件、子目录的所有者和所属组;

  • –reference=参考文件:以参考文件的所有者和所属组,为目标文件/目录设置相同的所有者和所属组。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#将test.txt文件的所有者,修改为cat用户,需管理员权限,sudo
sudo chown cat test.txt

#将test.txt文件的所属组,修改为cat组
sudo chown :cat test.txt

#将test.txt文件的所有者修改为cat,所属组修改为root组
sudo chown cat:root test.txt

#递归修改test目录及其下所有文件、子目录的所有者和所属组,均改为cat用户和cat组
sudo chown -R cat:cat test

#以test.txt文件的所有者和所属组,为newtest.txt文件设置相同的所有者和所属组
sudo chown --reference=test.txt newtest.txt

注意事项:

  • 修改所有者和所属组时,必须确保目标用户和目标组存在于系统中,否则会提示“invalid user”(无效用户)或“invalid group”(无效组);

  • 普通用户只能修改自己创建的文件/目录的所有者,无法修改不属于自己的文件/目录的所有者,必须使用sudo权限;

  • 修改目录的所有者和所属组时,若不加-R选项,仅修改目录本身的所有者和所属组,目录下的文件和子目录不会变化,通常需加-R选项,确保权限统一;

  • 修改所有者后,原所有者将失去对该文件/目录的操作权限,除非原所有者属于新的所属组,且所属组有对应权限。

1.5.4. 文件查看与编辑命令

日常开发和系统操作中,经常需要查看文件内容、编辑文件,本节讲解最常用的文件查看和编辑命令, 涵盖快速查看、详细查看、简单编辑、专业编辑等场景,满足不同使用需求。

1.5.4.1. cat命令

功能:一次性显示文件的全部内容,适合查看内容较少的文件,操作简单,是最基础的文件查看命令。

基本格式:

1
cat [选项] 文件名1 [文件名2 ...]

常用选项:

  • -n:显示行号,给文件每一行添加序号,便于定位具体内容;

  • -b:仅给非空行显示行号,空行不编号,比-n选项更简洁;

  • -s:压缩空行,将文件中的多个连续空行,压缩为一个空行,避免内容过于松散。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#一次性显示文件的全部内容
cat /etc/ssh/ssh_config

#查看文件内容并给每一行添加行号
cat -n /etc/ssh/ssh_config

#压缩连续空行压缩为一个,便于阅读
cat -s test1.txt

#依次查看多个文件,拼接在一起
cat test1.txt test2.txt

注意事项:

  • cat命令适合查看小文件,若文件内容过多,如几MB以上,会一次性输出全部内容,导致终端滚动过快,无法查看前面的内容,此时建议使用less、more命令;

  • 若文件不存在,终端会提示“no such file or directory”,需检查文件名和路径是否正确。

1.5.4.2. less命令

功能:分页显示文件内容,支持上下滚动、搜索,不会一次性输出全部内容,适合查看大文件,如日志文件、系统配置文件,是日常查看大文件的首选命令。

基本格式:

1
less [选项] 文件名

常用选项:

  • -N:显示行号,便于定位内容;

  • -i:搜索时忽略大小写;

  • -S:不换行显示过长的行,超出终端宽度的部分会被截断,便于查看一行完整内容,按左右箭头可查看截断部分。

less界面常用操作:

  • 上下箭头:逐行上下滚动文件内容;

  • 空格键:向下翻一页;

  • b键:向上翻一页;

  • /关键词:搜索文件中的关键词,如/error,搜索包含error的内容,按n键查看下一个匹配项,按N键查看上一个匹配项;

  • g键:跳转到文件开头;

  • G键:跳转到文件结尾;

  • q键:退出less查看界面。

实操案例:

1
2
3
4
5
6
7
8
#查看系统日志文件,分页显示,可滚动查看
less /var/log/syslog

#查看日志并显示行号,便于定位错误信息
less -N /var/log/syslog

#忽略大小写搜索,进入查看界面后,输入/test,可搜索test、Test、TEST等匹配内容。
less -i test.txt

注意事项:

  • less命令查看文件时,不会将文件内容全部加载到内存中,对大文件的支持更好,比cat命令更高效;

  • 退出less界面必须按q键,否则会一直停留在查看界面,无法执行其他命令。

1.5.4.4. tail命令

功能:查看文件的后n行内容,默认查看后10行,最常用的场景是实时监控日志文件,支持实时刷新。

基本格式:

1
tail [选项] 文件名

常用选项:

  • -n 数字:指定查看的后n行,如-n 5表示查看后5行;

  • -f:实时监控文件内容,文件有新内容添加时,会自动刷新显示;

  • -F:与-f类似,实时监控文件,但当文件被删除或重命名后,会自动重新连接到新的文件,比-f更稳定,推荐使用。

实操案例:

1
2
3
4
5
6
7
8
#默认查看后10行
tail /var/log/syslog

#查看后5行
tail -n 5 /var/log/syslog

#实时监控系统日志,有新日志输出时会自动显示,按Ctrl+C终止监控
tail -F /var/log/syslog

注意事项:

  • 使用-f或-F选项实时监控时,需按Ctrl+C终止监控,否则会一直占用终端;

  • 监控日志时,推荐使用-F选项,避免因日志文件被切割或删除,导致监控中断。

1.5.4.5. vi/vim命令

功能:vi是Linux系统自带的文本编辑器,vim是vi的增强版,支持语法高亮、代码补全、行号显示等功能,几乎所有Linux发行版都默认安装, 是编写脚本、修改配置文件的核心工具,必须熟练掌握其基本操作。

说明:vim的使用分为“三种模式”,不同模式的操作不同,切换模式是使用vim的关键,三种模式分别是:命令模式、插入模式、末行模式。

基本格式:

1
2
#打开文件,若文件不存在,会自动创建该文件
vim 文件名
1.5.4.5.1. 命令模式

打开vim后,默认进入命令模式,该模式下无法直接编辑文本,只能执行vim命令,如移动光标、删除内容、复制粘贴等,核心操作如下:

1.光标移动:

  • 上下左右箭头(↑↓←→方向键):逐行/逐字符移动光标;

  • gg:跳转到文件开头;

  • G:跳转到文件结尾;

  • nG:跳转到第n行,n为数字,如5G跳转到第5行;

  • w:跳转到下一个单词的开头;

  • b:跳转到上一个单词的开头。

2.内容删除:

  • x:删除光标所在位置的单个字符;

  • dd:删除光标所在的一整行;

  • ndd:删除光标所在行及以下的n行,n为数字,如3dd删除3行;

  • d$:删除光标所在位置到该行末尾的内容;

  • d^:删除光标所在位置到该行开头的内容。

3.复制粘贴:

  • yy:复制光标所在的一整行;

  • nyy:复制光标所在行及以下的n行;

  • p:将复制的内容粘贴到光标所在行的下方;

  • P:将复制的内容粘贴到光标所在行的上方。

  1. 模式切换

  • 按i键:进入插入模式;

  • 按a键:进入插入模式,在光标后插入内容;

  • 按o键:进入插入模式,在光标所在行的下方新建一行并插入内容;

  • 按Esc键:退出插入模式/末行模式,回到命令模式,万能切换键。

1.5.4.5.2. 插入模式

进入插入模式后,左下角会显示“INSERT”标识,此时可直接编辑文本,如输入文字、修改内容,与普通文本编辑器操作一致,编辑完成后,按Esc键回到命令模式。

1.5.4.5.3. 末行模式

在命令模式下,按“:”键,即可进入末行模式,左下角会显示“:”,此时可输入vim命令,如保存、退出、查找替换等,输入完成后按Enter键执行,核心命令如下:

  • 保存文件::w,保存当前编辑的内容,不退出vim;

  • 保存并退出::wq,保存内容并退出vim;

  • 强制退出::q!,不保存当前编辑的内容,强制退出vim,适用于编辑错误,不想保存的场景;

  • 退出::q,仅当文件未被修改时,才能成功退出,否则会提示无法退出;

  • 查找替换::%s/旧内容/新内容/g,全局替换文件中的旧内容为新内容,%表示全局,g表示全局替换,不加g仅替换每行第一个匹配项;

  • 显示行号::set nu,在vim中显示行号,便于定位内容;

  • 隐藏行号::set nonu,隐藏行号。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#1、创建并打开test.sh脚本文件,默认进入命令模式
vim test.sh

#2、进入插入模式:按i键,左下角显示INSERT
#输入以下内容
echo "Hello Linux"

#3、编辑完成:按Esc键,回到命令模式

#4、保存并退出:按:键进入末行模式,输入wq,按Enter键,保存内容并退出vim

#5、查看编辑的内容
cat test.sh

注意事项:

  • vim的核心是“模式切换”,忘记切换模式会导致操作失败,如在命令模式下输入文字,会执行对应命令,而非输入内容;

  • 若编辑文件后未保存,直接按Esc+:q会提示无法退出,此时可选择:wq保存退出,或:q!强制退出;

  • 部分Linux发行版默认未安装vim,可通过命令安装:如Ubuntu系统执行 sudo apt install vim 进行安装。

1.5.5. 系统查询命令

这类命令用于查询Linux系统的基本状态,如系统版本、进程状态、网络状态等,是系统管理和问题排查的基础,日常开发中常用。

1.5.5.1. uname命令

功能:查看Linux系统的内核版本、硬件架构等核心信息。

基本格式:

1
uname [选项]

常用选项:

  • -a:显示所有系统信息,包括内核版本、主机名、硬件架构、操作系统类型等;

  • -r:仅显示内核版本;

  • -m:仅显示硬件架构,如x86_64、arm64。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#显示所有系统信息
uname -a

#信息输出如下
#含义依次为:内核名称(Linux)、主机名(lubancat)、内核版本(4.19.232)、编译时间、硬件架构(aarch64)
Linux lubancat 4.19.232 #22 SMP Tue Dec 30 14:58:59 CST 2025 aarch64 GNU/Linux

#仅显示内核版本
uname -r

#信息输出如下
#仅内核版本
4.19.232

1.5.5.2. lsb_release命令

功能:查看Linux系统的发行版名称、版本号等信息。

基本格式:

1
lsb_release [选项]

常用选项:

  • -a:显示所有发行版信息;

  • -r:仅显示发行版版本号;

  • -d:仅显示发行版描述信息。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#显示所有发行版信息
lsb_release -a

#信息输出如下
4.19.232
cat@lubancat:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster
  • Distributor ID: 发行版名称,Debian;

  • Description: 发行版描述,Debian的buster版本;

  • Release: 版本号,10;

  • Codename: 版本代号,buster。

1.5.5.3. ps命令

功能:查看当前系统中运行的进程信息,常用于排查进程是否正常运行、查找进程ID(PID)、判断进程占用资源情况等,是系统进程管理和问题排查的核心命令之一。 与Windows系统的“任务管理器”功能类似,ps命令可通过不同选项,灵活查看进程的各类详细信息,满足不同场景下的查询需求。

基本格式:

1
ps [选项]

说明:ps命令的选项分为两种风格:

  • BSD风格,无短横线开头,如aux;

  • System V风格,有短横线开头,如-ef。

两种风格功能类似,日常使用中BSD风格更简洁、更常用,下文重点讲解BSD风格选项。

常用选项(BSD风格):

  • a:显示当前终端中所有用户的进程,包括其他用户启动的进程,不局限于当前用户;

  • u:以用户为中心显示进程信息,包括进程所有者、CPU占用率、内存占用率、进程启动时间等详细信息,便于查看进程的资源占用情况;

  • x:显示所有进程,包括不依附于任何终端的进程,如系统后台运行的进程、服务进程等,弥补“a”选项仅显示终端进程的不足;

  • e:显示系统中所有进程,与“x”选项功能类似,常与“f”选项搭配使用;

  • f:以全格式显示进程信息,包括进程ID、父进程ID、进程所有者、进程命令等,便于查看进程之间的父子关系;

  • aux:整合a、u、x三个选项的功能,显示系统中所有进程的详细信息,包括每个进程的资源占用、所有者、启动命令等,是日常排查进程的首选组合。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#查看系统中所有进程的详细信息,输出内容较多,可结合管道命令筛选所需进程
ps aux

#查看系统中前10个进程的详细信息,避免输出内容过多影响查看
ps aux | head -10

#以全格式显示所有进程,重点展示进程ID(PID)、父进程ID(PPID)和进程命令,便于查看进程的父子关系
ps ef

#查看当前root用户启动的所有进程,仅显示该用户相关的进程信息,适合多用户系统中快速定位自身进程
ps -u root

#查看系统中与ssh相关的进程,判断ssh服务是否正常运行(若有输出,说明ssh进程正在运行)。
ps -ef | grep ssh

输出结果解读:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#查看系统中前10个进程的详细信息
ps aux | head -10

#信息输出如下
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.9  0.4 165340  9456 ?        Ss   08:55   1:48 /sbin/init earlyprintk #jia-01/10/2026
root         2  0.0  0.0      0     0 ?        S    08:55   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        I<   08:55   0:00 [rcu_gp]
root         4  0.0  0.0      0     0 ?        I<   08:55   0:00 [rcu_par_gp]
root         8  0.0  0.0      0     0 ?        I<   08:55   0:00 [mm_percpu_wq]
root         9  0.0  0.0      0     0 ?        S    08:55   0:03 [ksoftirqd/0]
root        10  0.7  0.0      0     0 ?        I    08:55   1:19 [rcu_sched]
root        11  0.0  0.0      0     0 ?        I    08:55   0:00 [rcu_bh]
root        12  0.0  0.0      0     0 ?        S    08:55   0:00 [migration/0]
  • USER:进程的所有者,哪个用户启动的进程;

  • PID:进程ID,进程的唯一标识,后续终止进程、管理进程需用到该ID;

  • %CPU:进程占用的CPU百分比,数值越高,占用CPU资源越多;

  • %MEM:进程占用的内存百分比,数值越高,占用内存资源越多;

  • VSZ:进程占用的虚拟内存大小,单位:KB;

  • RSS:进程占用的物理内存大小,单位:KB;

  • TTY:进程依附的终端,?表示该进程不依附于任何终端,即后台进程;

  • STAT:进程的运行状态;

  • START:进程的启动时间;

  • TIME:进程占用的CPU总时间;

  • COMMAND:启动该进程的命令,包括命令名和选项、参数。

其中STAT字段用于表示进程的当前运行状态,不同状态对应不同的进程情况,日常排查中需重点关注以下几种状态:

核心状态字符(第一个字符):

核心状态字符

说明

R

运行状态,进程正在占用CPU,或处于就绪状态,是正常运行的进程状态;

S

睡眠状态,进程暂时不占用CPU,等待某个事件触发,是最常见的进程状态;

Z

僵尸进程,进程已经终止,但进程的资源未被系统完全释放,占用少量系统资源,若僵尸进程过多,会影响系统性能,需手动清理;

D

不可中断睡眠状态,进程正在等待某个硬件操作完成,此时无法强制终止进程,否则可能导致硬件异常;

T

停止状态,进程被暂停,如通过Ctrl+Z快捷键暂停的进程,可通过相关命令恢复运行或终止;

t

被调试器暂停,如gdb调试;

X

死亡状态,瞬间存在,几乎看不到;

I

空闲内核线程,仅内核进程会出现。

补充状态字符(第二个字符):

补充状态字符

说明

s

会话首进程,如shell、登录进程;

<

高优先级进程,不会被普通进程抢占CPU;

N

低优先级进程,nice值>0;

L

进程内存页被锁定,实时进程/IO密集进程;

l

多线程进程,使用CLONE_THREAD创建;

+

前台进程组,与终端交互,如当前shell的命令;

W

内存分页,已废弃,很少见。

常见状态如下:

  • Ss:S表示可中断睡眠,s表示是会话首进程;

  • I<:I表示内核空闲线程,<表示高优先级;

  • R+:R表示正在运行,+表示前台进程;

  • Ssl+:S睡眠、s会话首进程、l多线程、+前台。

注意事项:

  • ps命令默认仅显示当前终端中当前用户的进程,若要查看所有进程,必须加a、x或e选项;

  • 进程ID(PID)是唯一的,若要终止某个异常进程,可使用kill进程ID命令;

  • 僵尸进程(Z状态)无法通过常规kill命令终止,需先找到其对应的父进程,终止父进程后,僵尸进程会被系统自动清理;

  • 若ps aux输出内容过多,可结合grep命令筛选。

1.5.5.4. top命令

功能:与ps命令类似,用于查看系统进程信息,但top命令是“实时动态”的,默认每3秒刷新一次进程状态和资源占用情况,可实时监控CPU、内存的使用情况, 以及进程的动态变化,适合排查资源占用过高、进程异常等问题。

基本格式:

1
top

使用方法:

输入top命令,即可进入实时监控界面,界面分为上下两部分:上半部分显示系统整体资源状态,包括CPU、内存、交换分区使用情况, 下半部分显示所有进程的详细信息,按CPU占用率排序,默认从高到低。

top界面常用操作快捷键如下,无需输入命令,直接按键盘按键:

  • q:退出top实时监控界面;

  • P:按CPU占用率从高到低排序;

  • M:按内存占用率从高到低排序,快速定位内存占用过高的进程;

  • N:按进程ID(PID)从大到小排序;

  • k:终止指定进程,按下k后,输入要终止的进程ID(PID),再按Enter键,即可终止该进程,等同于kill命令;

  • s:修改刷新频率,按下s后,输入刷新间隔时间,单位:秒,默认3秒,例如输入5,即每5秒刷新一次;

  • h:查看top命令的帮助信息,了解更多操作快捷键。

注意事项:

  • top命令是实时监控,会持续占用少量系统资源,查看完成后,及时按q退出,避免不必要的资源消耗;

  • 若CPU空闲百分比(id)过低,说明CPU资源紧张,可按P键排序,定位占用CPU最多的进程,判断是否为异常进程,必要时终止;

  • 若交换分区(Swap)使用率过高,说明物理内存不足,长期使用会导致系统卡顿,需关闭不必要的进程,或增加物理内存;

  • 使用k键终止进程时,需确认进程ID是否正确,避免误终止系统核心进程,否则可能导致系统崩溃。

1.5.5.5. free命令

功能:专门用于查看系统物理内存(RAM)和交换分区(Swap)的使用情况,输出内容简洁直观,无需进入实时监控界面,适合快速查看内存整体使用状态,判断内存是否充足。

基本格式:

1
free [选项]

常用选项:

  • -h:以人类可读的格式显示内存大小,如KB、MB、GB;

  • -m:以MB为单位显示内存大小;

  • -g:以GB为单位显示内存大小;

  • -t:显示内存和交换分区的总使用情况。

注意事项:

  • 判断内存是否充足,主要看available(可用内存),而非free(空闲内存),因为buff/cache中的内存可被释放,供应用程序使用;

  • 若交换分区(Swap)的used值持续增加,说明物理内存不足,系统正在使用虚拟内存,会导致系统运行速度变慢,需优化内存使用;

1.5.5.6. ifconfig命令

功能:查看和配置网络接口信息,包括网卡IP地址、子网掩码、网关、MAC地址等,是网络配置和问题排查的基础命令, 常用于确认网卡是否正常启用、IP地址是否配置正确。

说明:部分Linux发行版默认未安装ifconfig命令,可通过以下命令安装:

如Ubuntu系统: sudo apt update && sudo apt install net-tools

基本格式:

1
ifconfig [网络接口名] [选项]

常用用法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#查看所有网络接口的详细配置信息
ifconfig

#查看指定网络接口,eth0是默认有线网卡名称,无线网卡通常为wlan0
ifconfig eth0

#启用eth0网卡
ifconfig eth0 up

#禁用eth0网卡
ifconfig eth0 down

输出结果解读,以ifconfig eth0为例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#查看eth0信息
ifconfig eth0

#信息输出如下
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500                      #UP表示网卡已启用,RUNNING表示网卡正在运行,MULTICAST表示支持组播
        inet 192.168.103.157  netmask 255.255.255.0  broadcast 192.168.103.255  #网卡的IP地址(inet)、子网掩码(netmask)、广播地址(broadcast)
        inet6 fe80::f72d:90aa:3452:f19c  prefixlen 64  scopeid 0x20<link>       #IPv6地址
        ether 06:42:0f:07:7f:4b  txqueuelen 1000  (Ethernet)                    #网卡的MAC地址
        RX packets 63  bytes 11307 (11.0 KiB)                                   #接收的数据包数量和数据量
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 43  bytes 5414 (5.2 KiB)                                     #发送的数据包数量和数据量
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 40

注意事项:

  • 不同Linux发行版的网卡名称可能不同,除了eth0、wlan0,还可能是ens33、enp0s3等,可通过ifconfig命令查看所有网卡名称;

  • 若执行ifconfig命令提示“command not found”,说明未安装net-tools工具,按前文说明安装即可。

1.5.5.7. ping命令

功能:测试本地主机与目标主机之间的网络连通性,通过发送ICMP数据包,判断目标主机是否可达、网络延迟是否正常,是排查网络不通问题的首选命令。

基本格式:

1
ping [选项] 目标主机IP地址或域名

常用选项:

  • -c n:指定发送的ICMP数据包数量(n为数字),发送完成后自动停止,避免持续发送;

  • -i n:指定发送数据包的间隔时间(n为数字,单位:秒),默认间隔1秒;

  • -s n:指定发送的数据包大小(n为数字,单位:字节),默认56字节;

  • -w n:指定超时时间(n为数字,单位:秒),若超过该时间未收到目标主机的响应,自动停止ping命令。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#测试与103.235.46.115(www.baidu.com的IP地址)的连通性,
#默认一直发送数据包,按Ctrl+C终止
ping 103.235.46.115

#发送4个数据包
ping -c 4 103.235.46.115

#测试与百度网站的连通性,通过域名测试,同时可验证DNS解析是否正常
ping -c 4 www.baidu.com

#发送3个数据包,间隔2秒发送一个
ping -c 3 -i 2 103.235.46.115

注意事项:

  • 若ping命令提示“Destination Host Unreachable”(目标主机不可达),说明目标主机未开机、网络中断,或目标主机防火墙拦截;

  • 若提示“Request timeout”(请求超时),说明网络延迟过高,或目标主机未响应,可能是网络拥堵、目标主机负载过高导致;

  • 部分服务器会开启防火墙,拦截ICMP数据包,此时ping命令会提示超时,但不代表网络不通,可通过telnet、ssh等命令进一步测试;

  • 默认情况下,ping命令会一直发送数据包,测试完成后,按Ctrl+C终止,避免占用过多网络资源。

1.5.6. 网络基础命令

除了前文讲解的ifconfig、ping命令,本节补充其他常用网络命令,涵盖网络连接测试、端口查看、远程连接等场景,满足日常网络操作和问题排查需求。

1.5.6.1. netstat命令

功能:查看系统的网络连接状态、端口占用情况、网络接口信息等,是网络问题排查的核心命令之一。

说明:部分Linux发行版默认未安装netstat,如Ubuntu系统可通过 sudo apt install net-tools 进行安装。

基本格式:

1
netstat [选项]

常用选项:

  • -t:仅显示TCP协议的网络连接;

  • -u:仅显示UDP协议的网络连接;

  • -l:仅显示处于监听状态的网络连接,如服务进程监听的端口;

  • -n:以数字形式显示IP地址和端口号,不解析域名;

  • -p:显示占用端口的进程名称和进程ID。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#显示所有TCP协议的监听端口,以数字形式展示
netstat -tln

#显示所有TCP监听端口,并显示占用端口的进程名称和PID
netstat -tlnp

#显示所有TCP和UDP的网络连接,以数字形式展示,包括已建立连接和监听连接
netstat -an

#查看指定端口占用
netstat -tlnp | grep 22

注意事项:

  • 若某个端口被占用,导致服务无法启动,可通过sudo netstat -tlnp | grep端口号找到占用进程,再用kill进程ID终止进程,释放端口。

1.5.6.2. telnet命令

功能:测试本地主机与目标主机的指定端口是否连通,与ping命令类似,但ping测试的是主机连通性,telnet测试的是“端口连通性”。

说明:部分Linux发行版默认未安装netstat,如Ubuntu系统可通过 sudo apt update && sudo apt install telnet 进行安装。

基本格式:

1
telnet 目标主机IP/域名 端口号

实操案例:

1
2
3
4
5
#测试百度80端口,若端口开放,会显示连接成功的提示;若端口关闭,会提示连接失败
telnet www.baidu.com 80

#测试服务器22端口
telnet 192.168.1.100 22

连接成功后,按Ctrl+],再输入quit,按Enter键退出。

注意事项:

  • 若telnet提示“Connection refused”(连接被拒绝),说明目标端口未开放,或目标主机未启动对应服务;

  • telnet协议不加密,传输数据明文显示,生产环境中不建议使用,可使用ssh命令替代。

1.5.6.3. ssh命令

功能:通过SSH协议远程连接Linux服务器,实现本地终端操作远程服务器,是远程操作Linux的必备命令,协议加密,传输安全。

基本格式:

1
ssh [选项] 用户名@目标主机IP/域名

常用选项:

  • -p 端口号:指定远程服务器的SSH端口;

  • -o ConnectTimeout=秒数:设置连接超时时间,避免长时间等待;

  • -v:显示详细的连接过程,便于排查连接失败问题。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#默认端口连接,以cat用户身份,连接IP为192.168.1.100的服务器,默认22端口
#输入该用户密码后,即可进入远程终端
#如果没有服务器,可使用ifconfig查看当前网络ip,进行自连接测试
ssh cat@192.168.1.100

#指定端口连接
ssh -p 2222 cat@192.168.1.100

#设置超时时间
ssh -o ConnectTimeout=5 cat@192.168.1.100

#退出远程连接:在远程终端中,输入exit,按Enter键,即可退出远程连接,回到本地终端。

注意事项:

  • 远程服务器必须开启SSH服务,若未开启,如Ubuntu系统需在服务器上执行sudo systemctl start ssh开启;

  • 连接时,用户名必须是远程服务器上已存在的用户,密码需正确,否则会提示“Permission denied”(权限拒绝)。

1.5.6.4. scp命令

功能:通过SSH协议,在本地主机和远程服务器之间传输文件/目录,传输过程加密,安全可靠,适合远程备份文件、上传下载脚本和配置文件。

基本格式:

1
2
3
4
5
#本地文件上传到远程
scp [选项] 本地文件路径  用户名@目标主机IP/域名:远程目标路径

#远程文件下载到本地
scp [选项] 用户名@目标主机IP/域名:远程文件路径  本地目标路径

常用选项:

  • -P 端口号:指定远程服务器的SSH端口,与ssh命令一致,默认22;

  • -r:递归传输目录,传输目录时必须使用该选项;

  • -v:显示传输过程,便于排查传输失败问题;

  • -P:保留文件的权限、所有者、时间等属性,适合备份文件。

实操案例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#将本地test.txt文件,上传到远程服务器的/home/ubuntu/Documents目录
scp test.txt ubuntu@192.168.1.100:/home/ubuntu/Documents

#将本地test目录,递归上传到远程服务器的/home/ubuntu目录
scp -r test ubuntu@192.168.1.100:/home/ubuntu

#将远程服务器的test.sh文件,下载到本地/home/cat目录
scp ubuntu@192.168.1.100:/home/ubuntu/test.sh /home/cat

#指定端口传输,如远程服务器SSH端口为2222,指定端口传输
scp -P 2222 test.txt ubuntu@192.168.1.100:/home/ubuntu

注意事项:

  • 传输目录时,必须加-r选项,否则无法传输目录。