mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
3654 字
14 分钟
Linux 网络编程(21):Linux 命令(1)——目录、权限与文件操作

Linux 命令(1):目录、权限与文件操作#

本节开始学习 Linux 常用命令,首先认识终端提示符、目录结构、绝对路径与相对路径,并理解 Shell 和环境变量在命令执行过程中的作用。

随后整理目录切换、文件创建与删除、内容查看、移动复制、权限识别和磁盘空间统计等基础操作,为后续在 Linux 环境中开发和调试网络程序打好基础。

一、终端提示符#

终端中出现的提示符形式如下:

colin@colinsoft:~$

各部分含义:

内容含义
colin当前登录的用户名
@分隔符
colinsoft当前主机名
:分隔符
~当前所在路径,这里表示当前用户的家目录
$普通用户提示符

切换为 root 用户后,提示符通常以 # 结尾。root 是 Linux 中权限最高的用户,普通用户不能随意修改系统目录中的内容。

操作时要经常先确认两个问题:

  1. 我是谁:当前是普通用户还是 root;
  2. 我在哪:当前所在目录是什么。

用户身份和当前路径共同决定当前操作是否有权限,以及是否可能误操作系统文件。

二、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/bash

2. 查看环境变量#

查看全部环境变量:

env

只查看当前 Shell:

echo $SHELL

其中:

  • echo 用于向终端输出字符串;
  • $变量名 表示取出变量中保存的值;
  • 若不写 $,则只是输出普通字符串。

示例:

echo SHELL
echo $SHELL
echo "hello world"

第一条输出字符串 SHELL,第二条输出变量 SHELL 的值,第三条输出指定字符串。

3. PATH 的作用#

PATH 环境变量保存了一组目录。执行命令时,系统会到这些目录中查找与命令同名的可执行文件。

echo $PATH

多个目录之间使用冒号 : 分隔。

正因为 /bin/usr/bin 等目录位于 PATH 中,所以无论当前位于哪里,都可以直接输入常用命令,而不用每次写出可执行文件的完整路径。

如果希望自己编写的程序也能在任意目录直接运行,可以:

  1. 把程序放进 PATH 已包含的目录;或
  2. 把程序所在目录加入 PATH

五、命令的基本书写规则与快捷操作#

命令的基本格式:

命令 [选项] [参数]

注意事项:

  • 命令、选项和参数之间必须使用空格分隔;
  • 一个命令可以有多个选项和多个参数;
  • 选项通常写在命令之后;
  • 多个目标可用空格依次列出。

快捷操作:

操作功能
Tab自动补全命令、文件名或目录名;有多个候选项时,先补到公共部分,再继续输入以区分
Ctrl + C终止当前正在执行的命令或进程
history查看以前执行过的命令

六、目录切换与当前位置#

1. cd:切换目录#

cd 来自 change directory,用来改变当前工作目录。

cd /etc
cd /home/colin
cd ..
cd ~
cd -
写法含义
cd 路径进入指定目录
cd ..进入上一级目录
cd ~回到当前用户家目录
cd -回到上一次所在目录
cd /进入根目录

若操作文件时不想写完整路径,可以先用 cd 进入文件所在目录,再直接使用文件名。

2. pwd:查看当前路径#

pwd

pwd 用于输出当前所在目录的绝对路径。

命令不仅可以直接在终端中使用,也会写入脚本。脚本通常由多条命令组成,用来自动完成重复性工作。

脚本对运行位置有要求时,可以用 pwd 检查当前路径,再用 cd 切换到目标目录。

七、创建和删除目录#

1. mkdir:创建目录#

创建一个目录:

mkdir 20251018

同时创建多个同级目录:

mkdir aa bb cc

创建带包含关系的多级目录:

mkdir -p xx/yy/zz

2. rmdir:删除空目录#

rmdir aa

rmdir 只能删除空目录。目录中只要还有文件或子目录,删除就会失败。

3. rm:删除文件或目录#

删除普通文件:

rm qq

递归、强制删除目录:

rm -rf 20250915

参数含义:

参数含义
-r递归处理目录内部的各层内容
-f强制执行,不再逐项询问确认

rm -rf 也可以删除普通文件,但风险很高。执行前应确认当前目录和目标路径,避免误删重要文件。

八、查看目录内容:ls#

1. 基本使用#

ls 用于列出目录内容。

ls
ls /
ls /etc
ls 文件名
  • 不写路径:查看当前目录;
  • 写目录路径:查看指定目录;
  • 参数是文件:只显示该文件的信息,不显示文件内容;
  • 查看文件内容应使用 catless 等命令。

不同类型的文件可能显示为不同颜色,但颜色可以修改,因此不能只凭颜色判断文件类型

2. ls -a:显示隐藏项#

ls -a

-a 表示显示全部内容,包括以 . 开头的隐藏文件和隐藏目录。

例如,.ssh 中的点是目录名的一部分,进入时必须写完整:

cd .ssh

3. ls -R:递归查看#

ls -R

-R 表示递归。遇到目录后继续进入,依次列出各层目录中的内容。

递归查看范围过大时会产生大量输出,因此不要轻易从根目录 / 开始递归遍历。

4. 组合选项#

多个选项可以组合使用:

ls -aR

它会递归显示目录结构,并包含隐藏项。

5. ls -l:查看详细信息#

ls -l

-l 以长格式显示文件的详细信息。典型结果可按下列结构理解:

-rw-r--r-- 1 colin colin 12 日期时间 qq

字段包括:

  1. 文件类型与权限;
  2. 硬链接数,详细含义将在后续文件系统内容中介绍;
  3. 文件所属用户;
  4. 文件所属组;
  5. 文件大小;
  6. 时间;
  7. 文件名。

目录常显示为 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

三组权限分别属于:

  1. 创建或拥有该文件的用户;
  2. 与文件所有者位于同一用户组的其他用户;
  3. 与文件所有者不在同一用户组的其他用户。

3. 权限的八进制表示#

每组权限由三位组成,所以可以把 rwx 看成三位二进制权值:

r = 4
w = 2
x = 1

有某权限就加上对应权值,没有则不加。

例如:

rwx = 4 + 2 + 1 = 7
r-x = 4 + 0 + 1 = 5
r-- = 4 + 0 + 0 = 4

所以:

rwxr-xr-- = 0754

开头的 0 用来表示这是八进制数。权限权值在后续文件操作代码中还会使用,必须会计算。

十、树形查看:tree#

tree
tree 指定目录

tree 按树状结构显示目录层级。它与 ls -R 都能递归查看内容,但 tree 的层级关系更直观。

示意:

.
├── aa
├── bb
├── cc
└── xx
└── yy
└── zz

不要直接对根目录执行 tree /,否则遍历和输出内容过多。需要查看哪部分,就进入或指定哪部分。

tree 并非所有系统都默认安装。

十一、创建文件、输出与重定向#

1. touch:创建文件或更新时间#

创建一个空文件:

touch qq

同时创建多个文件:

touch ww ee rr

touch 的行为:

  • 目标不存在:创建一个新的空文件;
  • 目标已经存在:不清空文件内容,只更新文件的访问时间和修改时间。

2. echo:输出字符串或变量#

echo "hello world"
echo $SHELL

3. >:输出重定向#

echo 的输出写入文件:

echo "hello world" > qq
cat qq

继续执行:

echo "ss" > qq
cat qq

第二次写入后,文件中只剩下 ss

这说明 > 会先清空原文件,再写入新内容,而不是追加到原内容之后。

十二、移动与重命名:mv#

基本格式:

mv 目标

mv 有两个功能:移动和重命名。

  • 目标是一个已经存在的目录:执行移动;
  • 目标不是已经存在的目录:按重命名处理。

1. 重命名#

mv aa dd

如果 dd 不存在,则把 aa 重命名为 dd。对象类型不会因改名而改变:目录改名后仍是目录,文件改名后仍是文件。

2. 移动#

mv bb dd

如果 dd 已经存在并且是目录,则把 bb 移动到 dd 中。文件和目录都可以移动到目录中。

3. 覆盖问题#

如果重命名后的目标已经存在,并且源、目标是可以相互覆盖的同类对象,旧目标可能被直接覆盖,而且不一定提示。

因此使用 mv 前要确认:

  1. 目标是否已经存在;
  2. 目标是不是目录;
  3. 是否会覆盖原有同名文件。

十三、复制:cp#

复制文件:

cp ww cc

复制目录:

cp -r cc aa

复制目录时需要使用 -r,因为必须递归复制目录内部的所有内容。

cpmv 的核心区别:

命令操作后源位置是否保留原对象
cp保留,目标位置得到一份副本
mv不保留,原对象被移动或改名

十四、查看文件内容#

1. cat:查看较小文件#

cat /etc/shells
cat qq

cat 会一次性把文件内容全部输出到终端,适合内容较少的文件。文件很大时,终端会快速刷出大量内容,不方便阅读。

2. less:分页查看较大文件#

less Kernel.cpp

less 一次显示一屏内容,可以向上、向下滚动查看,按 q 退出。

相对于 catless 更适合较大的代码或文本文件,退出后也不会把整份文件内容留满终端。

3. headtail#

查看文件前若干行:

head -5 文件名

查看文件后若干行:

tail -5 文件名

示例中的 -5 表示显示 5 行;不指定时通常显示 10 行。

4. clear:清理当前显示#

clear

clear 会让当前终端画面看起来被清空。它并不是删除历史内容,而是把已有显示内容向上滚动到当前可视区域之外。

十五、文件内容与空间统计#

1. wc:统计文本#

wc -c 文件名
wc -l 文件名
wc -w 文件名
参数含义
-c统计字节数
-l统计行数(line)
-w统计单词数(word)

wc -w 主要依据空白字符分隔单词,适合英文文本。中文词语之间通常没有空格,因此不能把该结果直接当成中文词数。

2. df -h:查看磁盘空间#

df
df -h

df 查看各磁盘设备的容量、已用空间和剩余空间。直接使用 df 时数字不便阅读,常用:

df -h

-h 会换算成适合阅读的单位,例如 MB、GB。

在工作中若出现磁盘空间不足,可以用 df -h 判断哪个磁盘设备空间不足,再决定清理数据或扩容。

Linux 的目录树统一从 / 开始,但底层仍可能对应不同的磁盘或分区。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Linux 网络编程(21):Linux 命令(1)——目录、权限与文件操作
https://joyanblog.com/posts/linux-network-programming-21-linux-commands-1-filesystem-permissions/
作者
Joyan
发布于
2026-08-13
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
Linux 网络编程(22):Linux 命令(2)——权限、进程与网络管理
Linux 网络编程 Linux 网络编程系列第 22 篇,整理 Linux 权限与用户组、文件查找、软件包和压缩包管理,以及用户、进程、环境变量与网络管理等常用命令。
2
Linux 网络编程(27):Linux 文件系统——目录操作、VFS 与文件描述符复制
Linux 网络编程 Linux 网络编程系列第 27 篇,整理文件属性与路径接口、硬链接和符号链接、unlink 临时文件、目录操作、虚拟文件系统 VFS,以及 dup、dup2 与文件描述符共享。
3
Linux 网络编程(26):Linux 文件 I/O 与 ext2 文件系统
Linux 网络编程 Linux 网络编程系列第 26 篇,整理阻塞与非阻塞 I/O、fcntl、ext2 文件系统布局、inode 寻址、目录与路径查找、硬链接与符号链接,以及 stat、access 和 chmod 等文件接口。
4
Linux 网络编程(25):Linux 文件 I/O——文件描述符与系统调用
Linux 网络编程 Linux 网络编程系列第 25 篇,整理标准 I/O 与系统 I/O、文件描述符、open 和 close、错误处理、命令行参数、文件权限,以及 read、write 和 lseek 等系统调用。
5
Linux 网络编程(24):Makefile——增量编译、变量与规则
Linux 网络编程 Linux 网络编程系列第 24 篇,整理 Makefile 的增量编译原理、基本规则、自定义变量与自动变量、模式规则、内置函数,以及编译、清理和安装等功能目标。

目录