本专栏文章持续更新,新增内容使用蓝色表示。

第一部分:Linux文件系统层次结构

Linux 系统中的所有文件存储在文件系统中,被组织到一棵上下颠倒的树(树根在顶部,树根下方延伸出目录和子目录的分支)中,称为文件系统层次结构。如下图所示(虚线箭头是符号链接 )。

不同Linux发行版的文件系统层次结构大体上是相似的,会存在点小差异。 

/ 目录是根目录,位于文件系统层次结构的顶部。/ 字符还用作文件名中的目录分隔符。

第一层级目录 

目录

说明

bin

基础命令:存放所有用户可用的基本命令(如lscp等)

boot

引导文件:包含内核、引导加载程序(如GRUB)等启动必需文件

dev

设备文件:所有硬件设备(如磁盘、USB)的虚拟文件接口

etc

系统配置:全局配置文件(如网络配置、用户账户等)

home

用户目录:普通用户的主目录(图示含user1user2示例目录)

lib lib64等

系统库:lib为32位库文件,lib64为64位库文件

mnt

临时挂载:手动挂载外部设备(如U盘、网络存储)的临时位置

root

超级用户目录:root用户的主目录

run

运行时数据:存放系统运行时的进程ID、锁文件等(重启后清空)

sbin

系统命令:仅管理员可用的系统管理命令(如fdiskiptables

sys

内核对象:虚拟文件系统,实时反映内核管理的设备和驱动状态

tmp

临时文件:全局临时文件(所有用户可访问,通常重启清空)

usr

用户程序:二级层次结构,包含大部分用户安装的应用程序

var

可变数据:存放日志、缓存等频繁变化的文件

第二层级目录

 /usr 子目录

目录

说明

bin

用户命令:非必要的用户命令(如nanowget

local

本地软件:管理员手动安装的软件(避免与包管理器冲突)

lib lib64等

程序库/usr/bin中程序依赖的库文件

sbin

管理命令:非必要的系统管理命令

tmp

临时文件

/var 子目录

目录

说明

log

系统日志:记录系统和服务运行日志

tmp

临时文件

使用ls命令可以查看不同目录下的所有文件(关于ls命令的具体用法第三部分介绍),以下是查看根目录下文件的情况:

ls -l /

ubuntu22.04:

Red Hat:

第二部分:Bash Shell

CTRL+ALT+T 打开终端(或者右键选择打开终端)。

注:终端是一个基于文本的界面,负责接收用户输入并传递到Shell处理,再将结果输出到屏幕,是Shell的载体

Bash(Bourne-Again Shell)是Linux默认的命令行解释器,也是脚本编程语言,是UNIX系统上原始  Bourne Shell 的改进版本,后续有时间会出相关内容。

shell在等待用户输入时,普通用户显示$:

超级用户root用户显示#:

$或#前显示的是:当前用户名@主机名(登录的计算机的名称)工作目录。

普通用户切换为root用户,使用sudo命令,命令详解在本专栏【Linux】权限管理详解(一)的1.2.6 su 切换用户 中有介绍。

【Linux】权限管理详解(一):用户与组管理 | Redhat-CSDN博客

sudo -i

退出root用户:

exit

Linux命令结构

在 shell 提示符下输入的命令由三个基本部分组成

命令 [选项] [参数]

命令是要运行的程序的名称(系统中安装的可执行程序)。其后可能跟着一个或多个选项,通常以 - 或 -- 开头(e.g. -a 短选项,-all长选项,等价的,多个短选项可以合并),用于调整命令行为,以将其与参数区分。也可能会跟着一个或多个参数,通常用于指定命令操作的目标。

命令、选项、参数之间需要空格分隔,带空格的参数需要用引号包起来。 写好执行命令后,按 Enter 键,会执行命令。 

第三部分:常用命令教学

3.1 常用小tips

3.1.1 tab键补全

输入命令或者文件/目录时,可以按tab键进行提示补全,尤其是在输入文件目录/文件名时,没人想自己敲完全部吧?

按一次 Tab:如果前输入能唯一匹配一个文件/命令,则自动补全。

按两次 Tab:列出所有可能项。

  补全范围

      命令名:补全 $PATH 中的可执行程序。

      文件/目录路径:补全当前工作目录下的内容。

      命令选项:部分高级 Shell(如 Bash、Zsh)支持选项补全。

3.1.2 显示历史命令

history 命令显示之前执行的命令的列表,前缀为命令编号。搭配! 前缀的命令可以快速调用历史命令,无需复制粘贴,感兴趣可以了解一下。

比较常用的是UpArrow键 DownArrow键

按  显示上一条命令, 显示下一条命令,连续按  可以不断往前翻历史记录,连续按 同理往后翻。

3.1.3 多行编写长命令

使用反斜杠字符 ( \ ) ,再按 Enter 换行符,Shell 会将命令延续到下一行以延续提示符(称为辅助提示符)——大于号字符( > )进行显示,表示命令未结束,可继续输入,直到最后一行不加 \ 直接按 Enter 执行。

以下是示例,echo就是原样输出输入的东西,那这命令岂不是很无聊?不是的啦,只是这里简单示例一下,实际上它常用于配置环境变量之类的,搭配重定向,将输入的内容输出到指定的配置文件中(可追加可覆盖,后续章节会详细介绍)。另外,输出重定向使用的也是大于号( > )字符,如果使用多行编写,需要额外注意。

echo "注意看!" \
"这个女孩叫小墨," \
"她已经很久没有上学了," \
"因为她放暑假了。" \
"但是她还不能休息。" \
"因为她已经大三了," \
"这个暑假需要准备秋招。" \
"在此之前,她已经尝试了很久找实习。" \
"但是没结果,所以她选择换一个方向继续学," \
"让我们祝她成功!" \
"掌声(鼓掌)"

如果使用  显示上一条命令可以看到整个 echo 命令实际上是在一行中书写的,但是由于长度原因,在显示时被自动换行了。

3.1.4 一行编写多个命令

使用分号 (;) 作为命令分隔符。分号是一类称为元字符的字符的成员,对于 bash 具有特殊的解读。使用分号分隔多个命令之后,系统会显示这多个命令的输出,然后显示下一shell 提示符。

3.1.5 命令行编辑实用快捷键

觉得有用的可以记一下,不是必备。使用一段时间有感:还是记一下好用,vim 里也能用,尤其加粗的几个,本人较为常用。

快捷键 描述
Ctrl+A 跳到命令行的开头。
Ctrl+E 跳到命令行的末尾。
Ctrl+U 将光标处到命令行开头的内容清除。
Ctrl+K 将光标处到命令行末尾的内容清除。
Ctrl+LeftArrow 跳到命令行中前一字的开头。
Ctrl+RightArrow 跳到命令行中下一字的末尾。
Ctrl+R 在历史记录列表中搜索某一模式的命令。
Ctrl+Shfit+C 复制
Ctrl+Shfit+V 粘贴

3.1.6 补充知识

符号/路径类型 含义 示例
~ 用户主目录,通常是/home/用户名 /home/student
/ 根目录,文件系统的顶层目录 /root
. 当前目录 ./file.txt
.. 上一级目录 ../docs
- 进入此目录之前所在的目录(在cd命令中使用) cd -

相对路径:从当前目录开始。

绝对路径:从根目录(/)开始,全局唯一。

3.2 常用命令及其选项

以下命令结构均为:命令 [选项] [参数](本章节第二部分Linux 命令结构)。

3.2.1 查看命令帮助手册

Linux 的命令及其相关的选项很多,本章节涉及到的仅是部分常用命令和常用选项,命令的详细内容推荐查看man手册。

#命令替换为想要查看的命令
命令 --help       # 快速查看选项说明
man 命令          # 查看完整手册(按q退出)

以ls命令为例:

ls --help 
man ls

3.2.2 创建文件 touch

touch命令

  • 如果文件不存在创建一个空文件。

  • 如果文件已存在更新它的访问时间(atime)和修改时间(mtime)。

文件后缀最好显式给出,尤其是程序代码或者压缩后的文件,例如 .c ,.cpp,.tar.gz,.tar.bz2(后两个使用压缩命令tar时注意)等

touch hello.c       # C 语言源文件
touch main.cpp      # C++ 源文件
touch script.py     # Python 脚本

3.2.3 编辑文件内容 vim

vim——文本编辑器

相关内容很多,记住常用的几个就行:

使用时vim 文件名即可,没有文件时会自动创建打开。

vim file.txt          # 编辑file.txt文件(没有会创建)

使用Vim打开文件后,会进入命令模式,可用于导航、剪切和粘贴等。按特定按键可访问特定的模式功能。

以下均在普通模式下进行,在其他模式下需要先退回到普通模式,不知道自己在哪个模式下,就多按几次 Esc 回到普通模式:

  • i 键光标前进入插入模式,按a键光标后进入插入模式,插入模式可以编辑文件内容。按 Esc 键返回到普通模式。
  • 按 v 键进入字符可视模式,按 Shift+V (V)进入行可视模式,按 Ctrl+V 进入块可视模式,可选择多个字符进行文本操作。 按 Esc 键返回到普通模式。
  • 按 : 键进入命令行模式,可以执行的任务包括写入文件(进行保存),以及退出 Vim 编辑器等。

模式切换图 

注意以下都是在命令模式且英文输入法下输入:

:wq        # 保存并退出
:q!        # 强制退出不保存
:w newfile # 另存为(newfile替换为新文件名)
:set nu    # 显示行号

/keyword   # 向下搜索关键词(keyword替换为想要查找的关键词)
?keyword   # 向上搜索关键词(keyword替换为想要查找的关键词)
n          # 跳转到下一个匹配项

dd         # 删除整行
ndd        # 删除n行(n替换为想要删除的行数)
yy         # 复制当前行
nyy        # 复制n行(n替换为想要删除的行数)
p/P        # 粘贴到光标后/前

u          # 撤销
Ctrl+r     # 重做

补充:set paste命令,可以在粘贴文本时保持原始格式。

使用方法:在命令行模式下输入":set paste",然后回车,输入"i",进行粘贴即可。

3.2.4 显示文件内容 cat head tail less

以下file需要替换为已有的文件,没有的合适的文件,可以利用touch+vim命令创建一个。

cat

创建单个或多个文件,查看文件内容,串联不同文件中的内容,以及将文件内容重定向到终端或文件(重定向后面章节具体介绍)。

cat file                        #查看文件内容
cat file1 file2                 #串联不同文件中的内容

head

显示前 N 行(默认 10 行) 

head file            # 默认显示前10行
head -n file         # n替换为想要显示的行数

tail

显示后 N 行(默认 10 行)

tail file            # 默认显示后10行
tail -n file         # n替换为想要显示的行数

less

分页浏览(支持搜索/翻页),一次显示一页,按  向上, 向下翻页显示,/keyword 可以搜索关键词(keyword 替换为想要搜索的内容),按q退出

less file

3.2.5 创建目录 mkdir

mkdir——make dir

选项 作用
-p 递归创建目录
-v 显示创建过程
mkdir dir                       # 创建单级目录
mkdir -p dir/dir1 dir/dir2      # 创建多级目录(自动补全父目录)

3.2.6 统计文件内容数量 wc

计算文件中的行、字或者字符的数量

选项 作用
-l line 显示行数
-w word 显示字数
-c char 显示字符数
wc -l /etc/passwd                # 统计/etc/passwd文件的行数
wc -w /etc/passwd                # 统计字数
wc -c /etc/passwd                # 统计字符数

3.2.7 打印当前位置 pwd 

pwd

输出结果会是当前所在位置的绝对路径。 

3.2.8 进入目录 cd

cd

cd            # 进入当前用户的主目录中
cd ~          # 和上一个命令等价
cd ..         # 返回上级目录
cd -          # 回到上一个目录
cd /var/log   #绝对路径
cd log        #相对路径,当前工作目录为/var

3.2.9 显示文件 ls

ls——list

ls [选项] [参数]
选项 作用
-a 显示所有文件包括隐藏文件(以 . 开头的文件)
-l 使用详细列表格式
-h

人性化显示文件大小

-d 仅显示目录本身,而不是目录中的内容
-R 递归显示目录及其子目录中的内容

短选项可以搭配使用,此处的示例后面还需要加上参数,目标文件或者目录

ls            # 列出目录下的文件/目录
ls -l         # 详细列表(权限/大小/时间) 
ls -a         # 显示隐藏文件 
ls -lh        # 人类可读的文件大小(KB/MB/GB)
ls -lR        # 显示当前目录和子目录下的详细内容

以下file、dir之类的示例需要替换为已有的文件或目录

3.2.10 复制文件 cp

cp——copy

选项 作用
-r 递归复制目录
-i 覆盖前提示
-v 显示复制过程
cp file.txt file2.txt        # 复制文件file.txt并命名为file2.txt
cp -r dir1/ dir2/            # 递归复制目录dir1到dir2
cp -i file.txt file2.txt     # 若file2.txt 已存在,会提示是否覆盖
cp -v file.txt file2.txt     # 显示复制过程的详细信息

3.2.12 移动文件 mv

mv——move

注意:mv在遇到同名文件时,默认行为是覆盖且不会提示。

选项 作用
-i 移动前提示(如果目标文件已存在)
-v 显示移动过程的详细信息
mv file.txt newfile.txt        # 将file.txt重命名为newfile.txt
mv file.txt dir/               # 将file.txt移动到目录dir/ 中
mv -i file.txt newfile.txt     # 若newfile.txt 已存在,会提示是否覆盖

3.2.13 删除文件 rm

rm——remove

RHEL(红帽企业 linux) 命令行删除没有撤销功能,也没有可恢复的回收站,所以生产环境上,建议软删除,避免直接删除。

选项 作用
-r 递归删除目录
-f 强制删除不提示
-i 删除前提示确认

注意:如果同时指定 -i 和 -f 选项,-f 选项优先级更高,不会出现提示,而是直接强制删除文件。

rm file.txt           # 删除文件
rm -i file.txt        # 交互式确认删除
rm -r dir/            # 递归删除
rm -rf dir/           # 强制递归删除目录(慎用!)

3.2.14 删除目录 rmdir

rmdir——删除空目录 remove dir

选项 作用
-p 删除父目录(如果父目录为空)
rmdir empty_dir/      # 只能删除空目录

综合练习

打开终端后确认所处位置:
一般是在~(当前用户主目录)下,除非在其他目录下右键打开的终端。如果不在~,使用cd命令切换到~

pwd

 在~ 下创建一个空文件empty.txt文件,并查看它的相关信息

touch empty.txt
ls -l empty.txt

过一两分钟后再次使用touch命令,并查看文件相关信息,观察变化

sleep 120      #休眠两分钟,也可以直接等两分钟

向empty.txt中写入以下内容,并更名为info.txt

《好看电视剧》第一季
主演:张三, 李四
上映时间:2025年
vim empty.txt
mv empty.txt info.txt

分别使用cat head tail less查看info.txt文件内容,此处就不演示了

cat info.txt        # 完整显示
head -1 info.txt    # 只看第一行
tail -2 info.txt    # 只看最后两行
less info.txt       # 交互式浏览(按q退出)

创建一个多级目录,TV_Shows存放类别为电视剧的内容,Good_TV_Drama表示电视剧名称,内部存放剧集信息,Season_1表示第一季的内容

mkdir -p TV_Shows/Good_TV_Drama/Season_1

提示:以下步骤可使用tab补齐 

将刚才创建的info.txt文件移动到~/TV_Shows/Good_TV_Drama/Season_1目录下,并确认info.txt存在

mv info.txt TV_Shows/Good_TV_Drama/Season_1/
ls TV_Shows/Good_TV_Drama/Season_1/  # 确认文件存在

cd 到~/TV_Shows/Good_TV_Drama/目录下

cd TV_Shows/Good_TV_Drama/

递归复制Season_1目录创建副本目录Season_1_copy

cp -r Season_1 Season_1_copy

使用rmdir尝试删除Season_1_copy目录(无法删除,因为此命令只能用于删除空目录)

rmdir Season_1_copy 

删除~/TV_Shows/Good_TV_Drama/Season_1_copy目录下的info.txt文件

rm Season_1_copy/info.txt

此时使用rmdir就可以删除Season_1_copy目录了

rmdir Season_1_copy

尝试在当前目录下递归删除TV_Shows(失败,删除时不能在目录中)

rm -r TV_Shows

切换到~目录,再次尝试

cd ~                     # 返回主目录
rm -r TV_Shows           # 递归删除

预告下一篇

【已出】【Linux】文件操作篇(二):实战理解硬链接与软链接


如有问题或建议,欢迎在评论区留言~

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐