Linux 基础指令入门:从目录结构到 ls、cd、touch、mkdir 和 rm

文章目录
- Linux 基础指令入门:从目录结构到 ls、cd、touch、mkdir 和 rm
前言
第一次接触 Linux 时,很多人会觉得它不如 Windows 直观。
Windows 中创建文件夹、查看文件和删除目录,通常只需要使用鼠标完成;到了 Linux 服务器上,屏幕里却只剩下一个终端窗口:
[root@xxx ~]#
看起来似乎什么都没有,实际却并不复杂。
Linux 命令行中的大部分操作,都可以归纳为三个问题:
我现在在哪里?
这里有什么?
我要对哪个文件或目录做什么?
对应到命令就是:
pwd:我现在在哪里
ls :这里有什么
cd :切换到其他目录
touch:创建文件或更新时间
mkdir:创建目录
rmdir:删除空目录
rm:删除文件或目录
本文从 Linux 的基本背景出发,逐步讲清目录树、绝对路径、相对路径和常用文件操作命令。
一、Linux 是怎么来的?
1.1 从 UNIX 说起
Linux 并不是凭空出现的,它在设计思想上深受 UNIX 影响。
UNIX 最初诞生于 20 世纪 60 年代末。贝尔实验室的 Ken Thompson、Dennis Ritchie 等人参与了早期 UNIX 的开发。
UNIX 在当时形成了许多影响深远的设计思想,例如:
多用户
多任务
层次化文件系统
小工具组合
文本作为通用接口
后来,UNIX 逐渐发展出不同分支,其中比较有代表性的两条路线是:
AT&T System V
BSD UNIX
不同 UNIX 系统虽然实现不完全相同,但许多命令、目录结构和编程接口具有共同的设计基础。
1.2 Linux 的诞生
1991 年,Linus Torvalds 开始开发一个类 UNIX 操作系统内核,这就是后来的 Linux 内核。
早期 Linux 可以运行 Bash、GCC 等 GNU 工具。随着越来越多开发者参与,Linux 内核不断完善,并在 1994 年发布了 1.0 版本。
Linux 的发展并不是某一家公司单独完成的,而是由大量个人、社区和企业共同推动的。
1.3 Linux 内核不等于完整操作系统
严格来说,Linux 指的是操作系统内核。
内核主要负责管理:
进程
内存
文件系统
硬件设备
网络
系统调用
但一台计算机只有内核还无法直接满足日常使用需求,还需要:
Shell
编译器
系统命令
软件包管理器
桌面环境
应用程序
系统服务
把 Linux 内核和这些用户空间工具组合起来,才形成一个可以安装和使用的 Linux 发行版。
可以简单理解为:
Linux 内核
+
GNU 工具和系统命令
+
软件包管理器
+
系统服务与应用程序
↓
Linux 发行版
二、开源和 Linux 发行版
2.1 什么是开源?
开源软件不仅向用户提供可执行程序,还按照许可证的规定提供源代码。
用户通常可以在许可证允许的范围内:
阅读源代码
学习实现原理
修改源代码
重新编译
分发修改后的版本
Linux 内核整体采用 GPLv2 许可证。开源并不简单等于“免费”,更重要的是源代码的使用、修改和分发受到公开许可证约束。
2.2 为什么会有不同发行版?
不同用户对操作系统的需求并不相同。
例如:
桌面用户关心易用性
开发者关心工具链
服务器管理员关心稳定性
企业关心支持周期
嵌入式设备关心体积和可定制性
因此,围绕 Linux 内核逐渐形成了许多发行版。
常见发行版包括:
| 发行版 | 主要特点 |
|---|---|
| Debian | 社区维护,强调自由软件与稳定性 |
| Ubuntu | 基于 Debian,桌面、服务器和云环境中都很常见 |
| Fedora | 更新较快,经常较早引入新技术 |
| RHEL | Red Hat 提供的企业级商业发行版 |
| CentOS Stream | 位于 Fedora 与 RHEL 之间的持续交付发行版 |
| Rocky Linux | 面向企业服务器场景的社区发行版 |
| AlmaLinux | 面向企业服务器场景的社区发行版 |
| Kali Linux | 面向安全测试和取证工具使用场景 |
旧资料中常把 CentOS 描述为 RHEL 的免费重构版本。这个描述主要适用于早期的 CentOS Linux。现在学习和部署时,应注意区分:
CentOS Linux
CentOS Stream
Rocky Linux
AlmaLinux
2.3 Linux 应用在哪些地方?
Linux 的应用范围很广,常见场景包括:
服务器
云计算平台
容器环境
超级计算机
网络设备
嵌入式设备
智能电视
路由器
Android 设备
开发环境
我们在学习 C、C++、操作系统、计算机网络和后端开发时,通常会频繁接触 Linux。
三、操作系统和 Shell 分别负责什么?
3.1 操作系统位于用户和硬件之间
从整体结构上看,计算机可以分成几层:
用户
↓
应用程序与命令
↓
操作系统
↓
设备驱动
↓
硬件
操作系统的核心作用,可以概括为两点:
管理计算机资源
为应用程序提供统一接口
例如,程序想读取文件时,不需要自己研究硬盘扇区,而是通过操作系统提供的接口完成。
操作系统负责把底层硬件细节封装起来,让上层程序更容易使用计算机。
3.2 Shell 是什么?
Shell 是用户与操作系统交互的一层命令解释器。
当我们输入:
[root@xxx ~]# ls
大致会经历下面的过程:
用户输入 ls
↓
Shell 解析命令
↓
找到对应程序
↓
创建进程并运行
↓
程序访问操作系统接口
↓
结果显示在终端中
Linux 中常见的 Shell 包括:
Bash
Zsh
Fish
Dash
初学阶段接触最多的是 Bash。
3.3 终端和 Shell 不是同一个东西
终端负责显示字符和接收键盘输入。
Shell 负责解释我们输入的命令。
可以把二者简单类比为:
终端:窗口和输入设备
Shell:运行在窗口中的命令解释器
当我们通过 SSH 连接服务器时,看到的是远程 Shell 在本地终端中的交互结果。
四、为什么服务器经常使用命令行?
Linux 也可以安装桌面环境,但服务器上更常见的是纯命令行环境。
主要原因包括:
4.1 节省资源
图形界面需要占用额外的:
内存
CPU
磁盘空间
图形相关服务
服务器更希望把资源留给业务程序。
4.2 便于远程管理
通过 SSH,只需要传输字符数据,就可以在网络另一端管理服务器。
即使网络速度一般,命令行仍然可以保持较好的响应速度。
4.3 便于自动化
图形界面操作通常需要人工点击,而命令可以放入脚本中反复执行。
例如:
mkdir -p project/src
touch project/src/main.cpp
相同命令可以在多台机器上执行,也可以交给自动部署工具执行。
4.4 操作过程容易复现
别人告诉你“点击某个按钮”,可能受到系统版本和界面布局影响。
命令行则可以直接记录:
mkdir -p /root/linux_demo
cd /root/linux_demo
touch test.txt
只要环境一致,操作过程通常就可以复现。
五、通过 SSH 远程登录 Linux
5.1 什么是 SSH?
SSH 是一种安全的远程登录协议。
我们可以在自己的电脑上打开 SSH 客户端,然后连接远程 Linux 主机。
常见客户端包括:
Windows Terminal
PowerShell
XShell
PuTTY
Linux 终端
macOS 终端
具体使用哪一个客户端并不重要,底层连接方式基本一致。
5.2 查看 Linux 主机地址
较新的 Linux 系统中,建议使用:
[root@xxx ~]# ip addr
也可以使用简化形式:
[root@xxx ~]# ip a
只想快速查看本机地址时,也可以尝试:
[root@xxx ~]# hostname -I
一些旧资料使用:
[root@xxx ~]# ifconfig
但不少现代发行版默认不再安装 ifconfig,更推荐使用 ip 命令。
5.3 使用 ssh 登录
基本语法:
ssh 用户名@服务器地址
例如:
ssh root@<服务器IP>
首次连接时,终端可能询问是否信任远程主机指纹。确认地址无误后输入:
yes
随后输入密码或使用 SSH 密钥完成认证。
登录成功后,可能看到:
[root@xxx ~]#
实际服务器通常不建议直接开放 root 密码登录。更常见的方式是先使用普通用户登录,再通过 sudo 执行管理操作。
六、看懂 Linux 命令提示符
一个常见提示符如下:
[root@xxx ~]#
可以拆成:
root:当前用户
xxx :当前主机名
~ :当前目录
# :超级用户提示符
普通用户通常使用 $:
[user@xxx ~]$
超级用户通常使用 #:
[root@xxx ~]#
这里的 # 不是需要输入的命令内容,它只是 Shell 显示的提示符。
例如,看到:
[root@xxx ~]# pwd
真正输入的只有:
pwd
七、Linux 中一切从目录树开始
7.1 Linux 没有盘符结构
Windows 中常见:
C:\
D:\
E:\
Linux 不使用这种盘符方式。所有文件和目录统一组织在一棵目录树中。
目录树的起点是:
/
它叫做根目录。
注意区分:
/ 根目录
/root root 用户的家目录
二者不是同一个目录。
7.2 一个简化的 Linux 目录结构
/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── root
├── tmp
├── usr
└── var
常见目录可以先简单理解为:
| 目录 | 常见用途 |
|---|---|
/ | 整棵目录树的根 |
/home | 普通用户的家目录 |
/root | root 用户的家目录 |
/etc | 系统和服务的配置文件 |
/usr | 大量程序、库和共享数据 |
/var | 日志、缓存等经常变化的数据 |
/tmp | 临时文件 |
/dev | 设备文件 |
/boot | 启动相关文件 |
初学阶段不需要一次背完所有目录,只需要先理解:
Linux 中所有文件都能从根目录
/出发,通过一条路径定位。
7.3 文件和目录都是目录树中的结点
在目录树中:
目录可以继续包含其他文件和目录
普通文件通常位于目录树的叶子位置
空目录也可以是叶子结点
例如:
/
└── root
└── linux_demo
├── notes.txt
└── project
└── main.cpp
notes.txt 的位置可以表示为:
/root/linux_demo/notes.txt
八、路径:如何准确找到文件?
8.1 什么是路径?
路径就是从某个起点出发,按照目录层次定位文件或目录的描述。
例如:
/root/linux_demo/project/main.cpp
表示:
从根目录 /
进入 root
进入 linux_demo
进入 project
找到 main.cpp
8.2 绝对路径
从根目录 / 开始的路径叫做绝对路径:
/root/linux_demo
/etc/ssh/sshd_config
/usr/bin/g++
特点是:
以 / 开头
不依赖当前所在目录
位置表达明确
无论当前处于哪个目录:
cd /root/linux_demo
定位到的都是同一个地方。
8.3 相对路径
相对于当前目录书写的路径叫做相对路径。
假设当前位于:
/root/linux_demo
进入 project 目录可以写:
cd project
进入其中的 src 目录可以写:
cd project/src
相对路径不以 / 开头,它的含义依赖当前工作目录。
8.4 几个特殊路径符号
当前目录:.
.
表示当前目录。
例如:
ls .
表示查看当前目录内容。
上级目录:..
..
表示当前目录的父目录。
例如:
cd ..
表示进入上一级目录。
家目录:~
~
表示当前用户的家目录。
对于 root 用户:
~ 等价于 /root
最近一次所在目录:-
cd -
可以在当前目录和上一次所在目录之间切换。
九、ls:查看目录中有什么
9.1 基本语法
ls [选项] [文件或目录]
不提供参数时,ls 查看当前目录:
[root@xxx ~]# ls
linux_demo
查看指定目录:
[root@xxx ~]# ls /root/linux_demo
file.txt project
9.2 为什么 ls 默认看不到隐藏文件?
Linux 中,以 . 开头的名字通常被视为隐藏文件或隐藏目录。
例如:
.bashrc
.ssh
.config
普通 ls 默认不会显示它们。
使用:
[root@xxx ~]# ls -a
. .. .bashrc .ssh linux_demo
其中:
. 表示当前目录
.. 表示上级目录
9.3 ls -l:查看详细信息
[root@xxx ~]# ls -l
total 4
drwxr-xr-x 3 root root 4096 Jul 31 20:10 linux_demo
这一行可以先粗略拆分为:
drwxr-xr-x:文件类型和权限
3 :链接数量
root :所有者
root :所属组
4096 :大小
Jul 31... :修改时间
linux_demo :名称
权限部分会在后续文章中单独展开。
9.4 常用选项
| 选项 | 作用 |
|---|---|
-a | 显示所有文件,包括隐藏文件 |
-l | 使用长格式显示详细信息 |
-h | 配合 -l 显示更容易阅读的文件大小 |
-d | 显示目录本身,而不是目录中的内容 |
-F | 在名称后添加类型标记 |
-i | 显示 inode 编号 |
-n | 使用数字 UID、GID 显示所有者 |
-r | 反向排序 |
-t | 按修改时间排序 |
-R | 递归查看子目录 |
-1 | 每行只显示一个名称 |
选项可以组合:
[root@xxx ~]# ls -alF
也可以写成:
[root@xxx ~]# ls -a -l -F
两者效果相同。
9.5 ls -F 的类型标记
[root@xxx linux_demo]# ls -F
app* project/ shortcut@ notes.txt
常见标记包括:
/ 目录
* 可执行文件
@ 符号链接
| 命名管道
= 套接字
普通文件通常不会添加符号。
9.6 ls -d 查看目录本身
直接执行:
ls /root/linux_demo
看到的是目录中的内容。
使用:
[root@xxx ~]# ls -ld /root/linux_demo
drwxr-xr-x 3 root root 4096 Jul 31 20:10 /root/linux_demo
看到的是 linux_demo 目录本身的信息。
9.7 ll 是什么?
一些 Linux 发行版中可以使用:
ll
它通常是:
ls -l
或:
ls -alF
的别名。
不过 ll 并不是所有系统都默认存在。为了保证命令具有更好的通用性,文章中主要使用:
ls -l
十、pwd:确认当前所在目录
10.1 基本语法
pwd
pwd 是:
print working directory
的缩写,用于显示当前工作目录。
例如:
[root@xxx ~]# pwd
/root
进入其他目录后:
[root@xxx ~]# cd /root/linux_demo
[root@xxx linux_demo]# pwd
/root/linux_demo
10.2 为什么经常先执行 pwd?
在图形界面中,我们可以通过窗口地址栏判断当前位置。
在命令行中,如果不确定自己位于哪里,最直接的方法就是:
pwd
特别是在执行删除或批量操作之前,建议先确认:
[root@xxx linux_demo]# pwd
/root/linux_demo
防止因为目录判断错误而操作了错误的文件。
十一、cd:切换工作目录
11.1 基本语法
cd 目录路径
cd 是:
change directory
的缩写。
11.2 进入指定目录
[root@xxx ~]# cd /root/linux_demo
[root@xxx linux_demo]# pwd
/root/linux_demo
这里使用的是绝对路径。
11.3 使用相对路径进入目录
假设当前结构为:
/root/linux_demo
├── project
└── temp
当前位于:
/root/linux_demo/project
切换到同级的 temp:
[root@xxx project]# cd ../temp
[root@xxx temp]# pwd
/root/linux_demo/temp
分析这条路径:
.. 回到 linux_demo
temp 进入 temp
11.4 返回上级目录
[root@xxx temp]# cd ..
[root@xxx linux_demo]# pwd
/root/linux_demo
连续返回两级:
cd ../..
11.5 返回家目录
下面几种写法都可以回到家目录:
cd
cd ~
对于 root 用户:
[root@xxx linux_demo]# cd ~
[root@xxx ~]# pwd
/root
11.6 回到根目录
[root@xxx ~]# cd /
[root@xxx /]# pwd
/
11.7 在两个目录之间切换
[root@xxx ~]# cd /root/linux_demo
[root@xxx linux_demo]# cd /
[root@xxx /]# cd -
/root/linux_demo
[root@xxx linux_demo]# cd -
/
cd - 很适合在两个常用目录之间往返。
11.8 带空格的目录名
如果目录名中包含空格,需要使用引号:
cd "my project"
或者使用反斜杠转义:
cd my\ project
在 Linux 项目目录中,一般更推荐使用:
my_project
my-project
避免使用空格,能够减少命令书写中的麻烦。
十二、touch:创建空文件或更新时间
12.1 基本语法
touch [选项] 文件...
touch 最常见的用途是创建空文件:
[root@xxx ~]# mkdir -p /root/linux_demo
[root@xxx ~]# cd /root/linux_demo
[root@xxx linux_demo]# touch newFile.txt
[root@xxx linux_demo]# ls
newFile.txt
此时创建了一个大小为 0 的普通文件。
12.2 touch 不只是创建文件
touch 的本质是更新文件时间戳。
如果文件不存在:
touch newFile.txt
默认会创建文件。
如果文件已经存在:
touch newFile.txt
通常不会清空原有内容,而是更新它的访问时间和修改时间。
12.3 使用 stat 查看文件信息
[root@xxx linux_demo]# stat newFile.txt
File: newFile.txt
Size: 0
Access: 2026-07-31 20:20:00
Modify: 2026-07-31 20:20:00
Change: 2026-07-31 20:20:00
常见时间包括:
Access:最后访问时间,简称 atime
Modify:文件内容最后修改时间,简称 mtime
Change:inode 状态最后变化时间,简称 ctime
ctime 不是文件的创建时间,而是文件元数据发生变化的时间。
12.4 只更新访问时间
[root@xxx linux_demo]# touch -a newFile.txt
-a 主要更新文件的访问时间。
12.5 只更新修改时间
[root@xxx linux_demo]# touch -m newFile.txt
-m 主要更新文件内容修改时间。
需要注意:
-a:access time
-m:modification time
不要把 -c 误认为修改时间选项。
12.6 文件不存在时不要创建
[root@xxx linux_demo]# touch -c not_exist.txt
[root@xxx linux_demo]# ls
newFile.txt
-c 或 --no-create 表示:
如果目标文件不存在,不要创建新文件。
12.7 一次创建多个文件
[root@xxx linux_demo]# touch main.cpp test.cpp README.md
[root@xxx linux_demo]# ls
README.md main.cpp newFile.txt test.cpp
Shell 会把多个文件名依次作为参数传递给 touch。
十三、mkdir:创建目录
13.1 基本语法
mkdir [选项] 目录...
创建一个目录:
[root@xxx linux_demo]# mkdir project
[root@xxx linux_demo]# ls -F
project/
13.2 一次创建多个目录
[root@xxx linux_demo]# mkdir src include build
[root@xxx linux_demo]# ls -F
build/ include/ project/ src/
13.3 创建多级目录时的问题
假设 lesson01 还不存在,直接执行:
[root@xxx linux_demo]# mkdir lesson01/code/src
mkdir: cannot create directory 'lesson01/code/src': No such file or directory
mkdir 默认只能在父目录已经存在时创建下一层目录。
13.4 使用 mkdir -p 创建完整路径
[root@xxx linux_demo]# mkdir -p lesson01/code/src
-p 或 --parents 会自动创建路径中缺失的父目录。
创建后结构为:
lesson01
└── code
└── src
可以使用:
[root@xxx linux_demo]# tree lesson01
lesson01
└── code
└── src
如果系统没有安装 tree,也可以使用:
find lesson01
或者:
ls -R lesson01
13.5 重复执行 mkdir -p
mkdir -p lesson01/code/src
即使目录已经存在,通常也不会报错。
因此,mkdir -p 经常出现在:
Shell 脚本
项目初始化脚本
自动部署脚本
构建脚本
中。
十四、rmdir:删除空目录
14.1 基本语法
rmdir [选项] 目录...
rmdir 专门用于删除空目录。
例如:
[root@xxx linux_demo]# mkdir empty_dir
[root@xxx linux_demo]# rmdir empty_dir
[root@xxx linux_demo]# ls
14.2 非空目录不能使用 rmdir 删除
[root@xxx linux_demo]# mkdir data
[root@xxx linux_demo]# touch data/file.txt
[root@xxx linux_demo]# rmdir data
rmdir: failed to remove 'data': Directory not empty
因为 data 中存在文件,所以删除失败。
这也是 rmdir 相对安全的地方:
它不会直接递归删除目录中的内容。
14.3 使用 rmdir -p 删除空路径
创建多级空目录:
[root@xxx linux_demo]# mkdir -p path1/path2/path3
删除最深层目录,并向上删除已经变空的父目录:
[root@xxx linux_demo]# rmdir -p path1/path2/path3
如果整个路径都为空,那么:
path3 被删除
path2 变空后被删除
path1 变空后被删除
14.4 父目录中有其他文件时会停止
[root@xxx linux_demo]# mkdir -p path1/path2/path3
[root@xxx linux_demo]# touch path1/keep.txt
[root@xxx linux_demo]# rmdir -p path1/path2/path3
rmdir: failed to remove directory 'path1': Directory not empty
此时:
path3 被删除
path2 被删除
path1 中还有 keep.txt,因此保留
十五、rm:删除文件或目录
15.1 基本语法
rm [选项] 文件或目录...
rm 是:
remove
的缩写。
它可以删除文件,配合选项后也可以删除目录。
15.2 删除普通文件
[root@xxx linux_demo]# touch file.txt
[root@xxx linux_demo]# ls
file.txt
[root@xxx linux_demo]# rm file.txt
[root@xxx linux_demo]# ls
删除后,file.txt 不再存在。
Linux 命令行中的 rm 通常不会把文件移动到桌面环境的回收站。删除完成后,普通用户很难直接恢复。
因此,执行删除操作前要认真检查路径。
15.3 一次删除多个文件
[root@xxx linux_demo]# touch a.txt b.txt c.txt
[root@xxx linux_demo]# rm a.txt b.txt c.txt
也可以使用通配符:
rm *.txt
这表示删除当前目录下所有以 .txt 结尾的匹配项。
使用通配符前,建议先查看匹配结果:
ls *.txt
确认无误后再执行:
rm *.txt
15.4 rm 默认不能删除目录
[root@xxx linux_demo]# mkdir project
[root@xxx linux_demo]# rm project
rm: cannot remove 'project': Is a directory
默认情况下,rm 只删除文件。
15.5 使用 rm -r 递归删除目录
[root@xxx linux_demo]# mkdir -p project/src
[root@xxx linux_demo]# touch project/src/main.cpp
[root@xxx linux_demo]# rm -r project
-r 表示递归删除:
先处理目录中的文件和子目录
再删除目录本身
它可以删除非空目录,所以风险明显高于 rmdir。
15.6 使用 rm -i 逐项确认
[root@xxx linux_demo]# touch important.txt
[root@xxx linux_demo]# rm -i important.txt
rm: remove regular empty file 'important.txt'? y
输入:
y
确认删除。
输入:
n
取消删除。
删除目录时也可以组合:
rm -ri project
系统会逐层询问是否进入和删除目录。
15.7 使用 rm -f 强制处理
rm -f file.txt
-f 表示:
忽略不存在的文件
尽量不进行交互询问
例如:
[root@xxx linux_demo]# rm -f not_exist.txt
文件不存在时通常也不会报错。
15.8 rm -rf 为什么危险?
rm -rf 目录
组合了:
-r:递归进入所有子目录
-f:不进行常规询问
例如:
[root@xxx linux_demo]# rm -rf project
可以直接删除整个 project 目录及其全部内容。
这条命令本身并不是错误命令,项目清理和自动化脚本中经常会用到。危险之处在于:
一旦路径写错,删除范围可能远大于预期。
尤其是在 root 用户下执行时,能够删除大量系统文件。
15.9 执行 rm 前的安全检查
第一步:确认当前目录
pwd
第二步:查看目标内容
ls -al target
第三步:先使用交互模式
rm -ri target
第四步:确认变量不为空
Shell 脚本中不要直接写:
rm -rf "$TARGET_DIR"
至少应先检查:
if [ -n "$TARGET_DIR" ] && [ "$TARGET_DIR" != "/" ]; then
rm -rf -- "$TARGET_DIR"
fi
第五步:使用 -- 分隔选项和文件名
假设有一个文件名为:
-f
直接执行:
rm -f
会被解释成选项。
可以写成:
rm -- -f
-- 表示后面的内容全部按照普通参数处理,不再解析成命令选项。
15.10 rmdir 和 rm 如何选择?
| 场景 | 推荐命令 |
|---|---|
| 删除普通文件 | rm file |
| 删除空目录 | rmdir dir |
| 删除非空目录 | rm -r dir |
| 删除前需要确认 | rm -i file |
| 递归删除并逐项确认 | rm -ri dir |
| 自动化中忽略不存在文件 | rm -f file |
| 强制递归删除目录 | rm -rf dir,必须谨慎 |
初学阶段可以形成一个习惯:
能够使用 rmdir 时,优先使用 rmdir
需要递归删除时,先使用 rm -ri
确认目标完全正确后,再考虑 rm -rf
十六、把这些命令串起来
前面看起来讲了很多命令,实际可以串成一条完整的文件操作流程。
16.1 创建练习环境
[root@xxx ~]# mkdir -p /root/linux_demo/project/src
目录结构变成:
/root/linux_demo
└── project
└── src
16.2 进入项目目录
[root@xxx ~]# cd /root/linux_demo/project
[root@xxx project]# pwd
/root/linux_demo/project
16.3 创建文件
[root@xxx project]# touch README.md
[root@xxx project]# touch src/main.cpp src/test.cpp
16.4 查看目录
[root@xxx project]# ls -alF
递归查看:
[root@xxx project]# ls -R
.:
README.md src
./src:
main.cpp test.cpp
16.5 删除一个文件
[root@xxx project]# rm -i src/test.cpp
rm: remove regular empty file 'src/test.cpp'? y
16.6 删除整个练习目录
先返回上级目录:
[root@xxx project]# cd ..
[root@xxx linux_demo]# pwd
/root/linux_demo
确认目标:
[root@xxx linux_demo]# ls -al project
再删除:
[root@xxx linux_demo]# rm -ri project
完整过程可以概括为:
mkdir 创建目录
↓
cd 进入目录
↓
pwd 确认位置
↓
touch 创建文件
↓
ls 查看结果
↓
rm 或 rmdir 删除
十七、常见错误整理
17.1 混淆 / 和 /root
/ 是根目录
/root 是 root 用户的家目录
执行:
cd /
进入的是整棵文件系统的根。
执行:
cd /root
进入的是 root 用户家目录。
17.2 认为 ~ 永远表示 /root
~ 表示当前用户的家目录。
对于 root:
~ -> /root
对于普通用户 student:
~ -> /home/student
17.3 把相对路径当成绝对路径
cd root/linux_demo
这是相对路径,表示从当前目录寻找 root/linux_demo。
绝对路径应写成:
cd /root/linux_demo
前面的 / 不能省略。
17.4 使用 ls 看不到隐藏文件
普通:
ls
不会显示以 . 开头的文件。
需要使用:
ls -a
17.5 把 ll 当成所有系统都有的命令
ll 通常只是 Shell 别名,不是所有环境都存在。
更通用的写法是:
ls -l
17.6 认为 touch 会清空文件
对已经存在的文件执行:
touch file.txt
通常只是更新时间,不会删除原有内容。
17.7 混淆 touch 的 -m 和 -c
正确含义:
touch -m:更新修改时间
touch -c:文件不存在时不要创建
17.8 mkdir 创建多级目录失败
错误:
mkdir a/b/c
如果 a、b 不存在,就会失败。
正确:
mkdir -p a/b/c
17.9 使用 rmdir 删除非空目录
rmdir data
只能删除空目录。
非空目录需要:
rm -r data
但执行前必须确认目录内容。
17.10 在错误目录执行 rm
执行删除前,建议养成下面的顺序:
pwd
ls -al
rm -i 目标
不要在不清楚当前位置时直接执行递归删除。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/Face_FeaR/article/details/163375322




