Linux 命令(1):目录、权限与文件操作
本节开始学习 Linux 常用命令,首先认识终端提示符、目录结构、绝对路径与相对路径,并理解 Shell 和环境变量在命令执行过程中的作用。
随后整理目录切换、文件创建与删除、内容查看、移动复制、权限识别和磁盘空间统计等基础操作,为后续在 Linux 环境中开发和调试网络程序打好基础。
一、终端提示符
终端中出现的提示符形式如下:
colin@colinsoft:~$各部分含义:
| 内容 | 含义 |
|---|---|
colin | 当前登录的用户名 |
@ | 分隔符 |
colinsoft | 当前主机名 |
: | 分隔符 |
~ | 当前所在路径,这里表示当前用户的家目录 |
$ | 普通用户提示符 |
切换为 root 用户后,提示符通常以 # 结尾。root 是 Linux 中权限最高的用户,普通用户不能随意修改系统目录中的内容。
操作时要经常先确认两个问题:
- 我是谁:当前是普通用户还是 root;
- 我在哪:当前所在目录是什么。
用户身份和当前路径共同决定当前操作是否有权限,以及是否可能误操作系统文件。
二、Linux 目录结构
1. 根目录
Linux 没有 Windows 中的 C:、D: 等盘符。整个文件系统从唯一的根目录 / 开始,所有文件和目录都位于 / 之下。
2. 主要目录
| 目录 | 作用说明 |
|---|---|
/bin | 存放常用命令所对应的可执行文件 |
/sbin | 存放系统管理相关的可执行文件 |
/boot | 存放系统启动相关文件和配置 |
/dev | 存放设备文件 |
/etc | 存放系统配置文件 |
/home | 存放普通用户的家目录 |
/lib | 存放库文件 |
/media | 与光盘、U 盘等可移动介质有关 |
/mnt | 挂载目录 |
/opt | 常用于存放额外安装的软件 |
/sys | 存放与系统相关的信息 |
/tmp | 存放临时文件 |
/usr | 存放用户程序及相关资源 |
3. 家目录与 ~
普通用户的家目录通常为:
/home/用户名例如,用户 colin 的家目录是:
/home/colin~ 是动态符号,表示当前用户的家目录。不同用户使用 ~ 时,对应的实际路径不同。
普通用户通常可以在自己的家目录中创建、修改和删除文件,但在根目录等系统区域中可能没有写权限。
4. Linux 文件名的特点
- 文件可以没有扩展名;
- 目录名中也可以带点号;
- 不能只根据扩展名或名称判断文件类型;
- 同一目录中不能同时存在同名文件和同名目录;
- 以
.开头的文件或目录是隐藏项,并且这个点是名称的一部分。
三、绝对路径与相对路径
1. 绝对路径
从根目录 / 开始书写的完整路径叫绝对路径:
/etc/shells/home/colin/20251018它的位置明确,不依赖当前所在目录。
2. 相对路径
相对于当前目录书写的路径叫相对路径。
| 符号 | 含义 |
|---|---|
. | 当前目录 |
.. | 当前目录的上一级目录 |
./文件名 | 当前目录下的文件 |
../文件名 | 上一级目录下的文件 |
总结:
- 以
/开始的是绝对路径; - 不以
/开始、需要结合当前目录确定位置的是相对路径; - 不写路径时,命令通常在当前目录中操作目标。
四、Shell 与环境变量
1. Shell 是什么
用户输入命令后,操作系统需要一个命令解释器理解命令并组织执行,这个解释器就是 Shell。
每条外部命令通常对应一个可执行文件。Shell 根据命令名找到相应程序,再让操作系统运行它。
Linux 中可以存在多种 Shell。使用以下命令查看系统中配置的 Shell:
cat /etc/shells本节使用的 Shell 是 Bash:
/bin/bash2. 查看环境变量
查看全部环境变量:
env只查看当前 Shell:
echo $SHELL其中:
echo用于向终端输出字符串;$变量名表示取出变量中保存的值;- 若不写
$,则只是输出普通字符串。
示例:
echo SHELLecho $SHELLecho "hello world"第一条输出字符串 SHELL,第二条输出变量 SHELL 的值,第三条输出指定字符串。
3. PATH 的作用
PATH 环境变量保存了一组目录。执行命令时,系统会到这些目录中查找与命令同名的可执行文件。
echo $PATH多个目录之间使用冒号 : 分隔。
正因为 /bin、/usr/bin 等目录位于 PATH 中,所以无论当前位于哪里,都可以直接输入常用命令,而不用每次写出可执行文件的完整路径。
如果希望自己编写的程序也能在任意目录直接运行,可以:
- 把程序放进
PATH已包含的目录;或 - 把程序所在目录加入
PATH。
五、命令的基本书写规则与快捷操作
命令的基本格式:
命令 [选项] [参数]注意事项:
- 命令、选项和参数之间必须使用空格分隔;
- 一个命令可以有多个选项和多个参数;
- 选项通常写在命令之后;
- 多个目标可用空格依次列出。
快捷操作:
| 操作 | 功能 |
|---|---|
Tab | 自动补全命令、文件名或目录名;有多个候选项时,先补到公共部分,再继续输入以区分 |
Ctrl + C | 终止当前正在执行的命令或进程 |
history | 查看以前执行过的命令 |
六、目录切换与当前位置
1. cd:切换目录
cd 来自 change directory,用来改变当前工作目录。
cd /etccd /home/colincd ..cd ~cd -| 写法 | 含义 |
|---|---|
cd 路径 | 进入指定目录 |
cd .. | 进入上一级目录 |
cd ~ | 回到当前用户家目录 |
cd - | 回到上一次所在目录 |
cd / | 进入根目录 |
若操作文件时不想写完整路径,可以先用 cd 进入文件所在目录,再直接使用文件名。
2. pwd:查看当前路径
pwdpwd 用于输出当前所在目录的绝对路径。
命令不仅可以直接在终端中使用,也会写入脚本。脚本通常由多条命令组成,用来自动完成重复性工作。
脚本对运行位置有要求时,可以用 pwd 检查当前路径,再用 cd 切换到目标目录。
七、创建和删除目录
1. mkdir:创建目录
创建一个目录:
mkdir 20251018同时创建多个同级目录:
mkdir aa bb cc创建带包含关系的多级目录:
mkdir -p xx/yy/zz2. rmdir:删除空目录
rmdir aarmdir 只能删除空目录。目录中只要还有文件或子目录,删除就会失败。
3. rm:删除文件或目录
删除普通文件:
rm qq递归、强制删除目录:
rm -rf 20250915参数含义:
| 参数 | 含义 |
|---|---|
-r | 递归处理目录内部的各层内容 |
-f | 强制执行,不再逐项询问确认 |
rm -rf 也可以删除普通文件,但风险很高。执行前应确认当前目录和目标路径,避免误删重要文件。
八、查看目录内容:ls
1. 基本使用
ls 用于列出目录内容。
lsls /ls /etcls 文件名- 不写路径:查看当前目录;
- 写目录路径:查看指定目录;
- 参数是文件:只显示该文件的信息,不显示文件内容;
- 查看文件内容应使用
cat、less等命令。
不同类型的文件可能显示为不同颜色,但颜色可以修改,因此不能只凭颜色判断文件类型。
2. ls -a:显示隐藏项
ls -a-a 表示显示全部内容,包括以 . 开头的隐藏文件和隐藏目录。
例如,.ssh 中的点是目录名的一部分,进入时必须写完整:
cd .ssh3. ls -R:递归查看
ls -R-R 表示递归。遇到目录后继续进入,依次列出各层目录中的内容。
递归查看范围过大时会产生大量输出,因此不要轻易从根目录 / 开始递归遍历。
4. 组合选项
多个选项可以组合使用:
ls -aR它会递归显示目录结构,并包含隐藏项。
5. ls -l:查看详细信息
ls -l-l 以长格式显示文件的详细信息。典型结果可按下列结构理解:
-rw-r--r-- 1 colin colin 12 日期时间 qq字段包括:
- 文件类型与权限;
- 硬链接数,详细含义将在后续文件系统内容中介绍;
- 文件所属用户;
- 文件所属组;
- 文件大小;
- 时间;
- 文件名。
目录常显示为 4096,这不是目录中全部文件内容的总大小,而是目录项自身占用的空间。文件系统相关原理会在后文继续介绍。
九、文件类型与权限
1. 文件类型标志
ls -l 结果的第一个字符表示文件类型。
| 标志 | 类型 |
|---|---|
- | 普通文件 |
d | 目录(directory) |
l | 符号链接文件(link) |
b | 块设备文件(block) |
c | 字符设备文件(character) |
s | 套接字文件(socket) |
p | 管道文件(pipe) |
2. 九个权限位
文件类型之后的九个字符表示权限,每三个一组:
rwx r-x r--权限字母含义:
| 字母 | 含义 | 权值 |
|---|---|---|
r | 读(read) | 4 |
w | 写(write) | 2 |
x | 执行(execute) | 1 |
- | 对应位置没有该权限 | 0 |
三组权限分别属于:
- 创建或拥有该文件的用户;
- 与文件所有者位于同一用户组的其他用户;
- 与文件所有者不在同一用户组的其他用户。
3. 权限的八进制表示
每组权限由三位组成,所以可以把 rwx 看成三位二进制权值:
r = 4w = 2x = 1有某权限就加上对应权值,没有则不加。
例如:
rwx = 4 + 2 + 1 = 7r-x = 4 + 0 + 1 = 5r-- = 4 + 0 + 0 = 4所以:
rwxr-xr-- = 0754开头的 0 用来表示这是八进制数。权限权值在后续文件操作代码中还会使用,必须会计算。
十、树形查看:tree
treetree 指定目录tree 按树状结构显示目录层级。它与 ls -R 都能递归查看内容,但 tree 的层级关系更直观。
示意:
.├── aa├── bb├── cc└── xx └── yy └── zz不要直接对根目录执行 tree /,否则遍历和输出内容过多。需要查看哪部分,就进入或指定哪部分。
tree 并非所有系统都默认安装。
十一、创建文件、输出与重定向
1. touch:创建文件或更新时间
创建一个空文件:
touch qq同时创建多个文件:
touch ww ee rrtouch 的行为:
- 目标不存在:创建一个新的空文件;
- 目标已经存在:不清空文件内容,只更新文件的访问时间和修改时间。
2. echo:输出字符串或变量
echo "hello world"echo $SHELL3. >:输出重定向
把 echo 的输出写入文件:
echo "hello world" > qqcat qq继续执行:
echo "ss" > qqcat qq第二次写入后,文件中只剩下 ss。
这说明 > 会先清空原文件,再写入新内容,而不是追加到原内容之后。
十二、移动与重命名:mv
基本格式:
mv 源 目标mv 有两个功能:移动和重命名。
- 目标是一个已经存在的目录:执行移动;
- 目标不是已经存在的目录:按重命名处理。
1. 重命名
mv aa dd如果 dd 不存在,则把 aa 重命名为 dd。对象类型不会因改名而改变:目录改名后仍是目录,文件改名后仍是文件。
2. 移动
mv bb dd如果 dd 已经存在并且是目录,则把 bb 移动到 dd 中。文件和目录都可以移动到目录中。
3. 覆盖问题
如果重命名后的目标已经存在,并且源、目标是可以相互覆盖的同类对象,旧目标可能被直接覆盖,而且不一定提示。
因此使用 mv 前要确认:
- 目标是否已经存在;
- 目标是不是目录;
- 是否会覆盖原有同名文件。
十三、复制:cp
复制文件:
cp ww cc复制目录:
cp -r cc aa复制目录时需要使用 -r,因为必须递归复制目录内部的所有内容。
cp 与 mv 的核心区别:
| 命令 | 操作后源位置是否保留原对象 |
|---|---|
cp | 保留,目标位置得到一份副本 |
mv | 不保留,原对象被移动或改名 |
十四、查看文件内容
1. cat:查看较小文件
cat /etc/shellscat qqcat 会一次性把文件内容全部输出到终端,适合内容较少的文件。文件很大时,终端会快速刷出大量内容,不方便阅读。
2. less:分页查看较大文件
less Kernel.cppless 一次显示一屏内容,可以向上、向下滚动查看,按 q 退出。
相对于 cat,less 更适合较大的代码或文本文件,退出后也不会把整份文件内容留满终端。
3. head 与 tail
查看文件前若干行:
head -5 文件名查看文件后若干行:
tail -5 文件名示例中的 -5 表示显示 5 行;不指定时通常显示 10 行。
4. clear:清理当前显示
clearclear 会让当前终端画面看起来被清空。它并不是删除历史内容,而是把已有显示内容向上滚动到当前可视区域之外。
十五、文件内容与空间统计
1. wc:统计文本
wc -c 文件名wc -l 文件名wc -w 文件名| 参数 | 含义 |
|---|---|
-c | 统计字节数 |
-l | 统计行数(line) |
-w | 统计单词数(word) |
wc -w 主要依据空白字符分隔单词,适合英文文本。中文词语之间通常没有空格,因此不能把该结果直接当成中文词数。
2. df -h:查看磁盘空间
dfdf -hdf 查看各磁盘设备的容量、已用空间和剩余空间。直接使用 df 时数字不便阅读,常用:
df -h-h 会换算成适合阅读的单位,例如 MB、GB。
在工作中若出现磁盘空间不足,可以用 df -h 判断哪个磁盘设备空间不足,再决定清理数据或扩容。
Linux 的目录树统一从 / 开始,但底层仍可能对应不同的磁盘或分区。
如果这篇文章对你有帮助,欢迎分享给更多人!





