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的英文原意是“壳”的意思,也是为了把它与内核区分开来。
在平时的交流中,有时我们会说打开Shell、终端(Terminal)或控制台(Console), 严格来说它们实际上不是同一种的东西,但只要明白,当我们说打开Shell、终端或控制台的时候, 通常就是为了使用命令行控制系统。它们的严格区分如下:
Shell:指命令行解释器,常见的解释器有bash,sh,在Ubuntu系统默认用的是bash解释器, 所以有时说bash也是指命令行。
终端(Terminal):通常指用来运行Shell的程序,视场景的不同有不一样的名称, 如Ubuntu系统自带的叫本地终端,嵌入式开发板常常提供串口进行输入输出的串口终端, 通过网络访问的ssh终端。
控制台(Console):特指某些终端,通常是指它的物理形态,如带键盘和显示器的物理设备。
1.2. 终端的启动方法¶
不同Linux发行版的终端启动方式略有差异,以下是最常用的3种启动方法,适配绝大多数场景:
桌面打开
串口连接
ssh连接
1.2.1. 桌面启动终端¶
连接鼠标和键盘,可以通过以下两种方式打开:
可以在软件管理里打开Terminal(终端)。
可以同时按下键盘“Ctrl + Alt + T”打开桌面终端。
使用虚拟机打开终端如下图:
1.2.2. 串口连接终端¶
串口模块连接板卡方法:
安装能够进行串口通讯的工具,这里推荐Mobaxterm。
使用串口线连接板卡。
配置Mobaxterm,使得Mobaxterm可与板卡通信。
具体方法可参考快速使用手册 《启动系统与系统登录》 章节。
串口连接终端如下图:
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命令的详细手册。手册页面的操作方法:
按上或下方向键:向上或下翻一行;
按空格键:向下翻一页;
按Enter键:向下翻一行;
按b键:向上翻一页;
按/关键词:在手册中搜索关键词(例如输入 / -l,可搜索ls命令中“-l”选项的说明);
按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 | 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 权限数字 文件/目录名
|
核心参数说明:
用户类型:
u(user)所有者;
g(group)所属组;
o(others)其他用户;
a(all)所有用户。
操作符:
+:添加权限;
-:移除权限;
=:设置权限。
权限:
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.3. head命令¶
功能:查看文件的前n行内容,默认查看前10行,适合快速查看文件的开头部分。
基本格式:
1 | head [选项] 文件名
|
常用选项:
-n 数字:指定查看的行数,如-n 5表示查看前5行;
-c 数字:指定查看的字节数,而非行数,如-c 100表示查看文件前100个字节。
实操案例:
1 2 3 4 5 6 7 8 | #默认查看前10行
head /var/log/syslog
#查看前5行
head -n 5 /var/log/syslog
#查看前200字节
head -c 200 /var/log/syslog
|
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:将复制的内容粘贴到光标所在行的上方。
模式切换:
按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选项,否则无法传输目录。
