linux基础知识点
4028 字
20 分钟
linux基础知识点
Linux系统
1. 核心概念与系统认知
-
图形界面 vs 命令行:
- 所有操作系统最初都只有命令行界面。
- Windows 和 Linux Desktop 虽有图形界面,但终端命令操作是核心与基础。
-
文件本质:
文件 = 内容 + 属性。对文件的操作,本质上就是对内容或属性的操作。- 即使是空文件,也会占用少量磁盘空间(主要存储其属性信息)。
-
命令的本质:命令行中输入的命令(如
ls、pwd),本质上是存储在系统路径(如/usr/bin/ls)下的可执行文件,与我们自己编写的 C/C++ 程序性质相同。 -
“一切皆文件”:在 Linux 系统中,硬件设备、输入输出、乃至操作系统提供的功能,其访问接口大多被抽象为文件。这是理解后续所有操作的基础。
- 应用实例:
printf/cout(输出到显示器)、scanf/cin(从键盘输入),其本质都是文件操作。 - 标准流文件:系统默认会为每个进程打开三个”文件”(流):
stdin(标准输入):对应键盘,文件描述符为0。stdout(标准输出):对应显示器,文件描述符为1。stderr(标准错误):对应显示器,文件描述符为2。
- 思考:为什么系统要帮我们打开这三个文件?为了方便程序进行最基础的输入输出交互。
- 应用实例:
-
目录结构:Linux 的文件系统是一棵从根目录 (
/) 开始的多叉树。- 叶子节点:普通文件或空目录。
- 非叶子节点:非空目录。
- 路径分隔符:Linux 使用
/,Windows 使用\。
2. Linux目录结构
2.1 主要目录及其功能
| 目录 | 英文原意 | 主要功能 | 备注 |
|---|---|---|---|
| / | root | 根目录 | 所有目录和文件的起点 |
| /bin | binary | 存放二进制可执行命令 | 普通用户和root用户都可使用 |
| /sbin | system binary | 存放特权级二进制文件 | 只有root用户可用 |
| /boot | boot | 存放内核与启动文件 | 系统启动所需的核心文件 |
| /dev | device | 存放抽象硬件设备文件 | 所有硬件设备都以文件形式存在 |
| /etc | etcetera | 存放系统配置文件 | 包含各种应用程序和服务的配置 |
| /lib | library | 存放系统库文件 | 共享库文件 |
| /home | home | 普通用户目录 | 每个用户在此有独立子目录 |
| /root | root | 特权用户(root)目录 | root用户的家目录 |
| /usr | Unix System Resources | 存放安装程序(软件默认目录) | 用户安装的应用程序 |
| /var | variable | 存放经常变化的文件 | 如日志、邮件、缓存等 |
| /mnt | mount | 文件挂载目录 | 用于挂载U盘、光驱等外部设备 |
| /opt | optional | 大型软件存放目录 | 非强制,第三方大型软件 |
| /tmp | temporary | 临时文件目录 | 系统重启后可能清空 |
2.2 目录结构示意图
/├── bin/ # 基础命令├── sbin/ # 系统管理命令├── boot/ # 启动文件├── dev/ # 设备文件├── etc/ # 配置文件├── home/ # 用户目录│ ├── user1/│ ├── user2/│ └── ...├── root/ # root用户目录├── usr/ # 用户程序├── var/ # 可变数据├── lib/ # 系统库├── mnt/ # 挂载点├── opt/ # 可选程序└── tmp/ # 临时文件2.3 用户目录
- 普通用户:
/home/用户名 - root 用户:
/root - 新建用户:系统自动在
/home下创建同名目录 - 用户登录后,默认所处的路径称为其家目录
3. 路径理解
-
目录树结构:Linux 所有文件和目录组成树形结构。
-
绝对路径:从根目录
/开始的完整路径,具有唯一性。- 示例:
/home/whb/test.c - 用途:配置文件、脚本中常用(配置文件建议使用绝对路径)
- 示例:
-
相对路径:以当前目录为参照的路径,日常操作更简便。
- 示例:
./test.c(当前目录下的文件) - 示例:
../server.cc(上级目录下的文件) - 示例:
test.c(等同于./test.c)
- 示例:
4. 文件类型与属性
4.1 文件类型识别(ls -l 首字符)
| 符号 | 类型 | 说明 |
|---|---|---|
- | 普通文件 | 文本、可执行程序、数据等。Linux不依赖文件后缀区分类型,但工具(如gcc)会关心。 |
d | 目录文件 | 文件夹。 |
l | 符号链接文件 | 快捷方式(软链接)。 |
c | 字符设备文件 | 以字符流形式访问的设备,如键盘、显示器、终端 (/dev/pts/),输入有顺序性。 |
b | 块设备文件 | 以数据块形式访问的设备,如磁盘。 |
p | 管道文件 | 用于进程间通信。 |
s | 套接字文件 | 用于网络/本机进程间通信。 |
- 隐藏文件:在 Linux 中,以
.开头的文件或目录是隐藏的。 - 特殊目录:任何一个目录下,默认都存在两个特殊目录:
.:代表当前目录。..:代表上级目录。
4.2 文件属性示例
-rw-r--r-- 1 root root 0 Aug 10 11:07 hello.txtdrwxr-xr-x 2 root root 4096 Aug 10 09:20 mydir- 首字符:
-表示普通文件,d表示目录。 - 后续 9 个字符:文件权限(
r读,w写,x执行)。 - 数字
1或2:链接数。 - 第一个
root:文件所有者。 - 第二个
root:文件所属组。 - 数字
0或4096:文件大小(字节)。目录通常为 4096 的倍数。 - 时间戳:最后修改时间。
4.3 时间戳详解
- Access Time (atime):最后访问时间(读取文件)。
- Modify Time (mtime):最后修改时间(文件内容变更)。
- Change Time (ctime):最后改变时间(文件元数据/属性变更,如权限、所有者)。
5. 命令行基础与文件操作
5.1 基本命令
pwd:打印当前工作目录(Print Working Directory)。whoami:显示当前登录的用户名。ls:列出目录内容。默认只显示文件名(非隐藏文件)。-l:以长格式显示,查看文件的详细属性(权限、所有者、大小、时间等)。-a:显示所有文件,包括以.开头的隐藏文件。-A:显示隐藏文件(但不包括.和..)。-h:以人类可读的方式显示文件大小。-t:按时间排序。-S:按文件大小排序。-d:查看目录本身的属性,而非其内部内容。例如ls -ld /查看根目录属性。
touch <文件名>:创建一个新的普通空文件。cd:切换目录。cd ~或cd:切换到当前用户的家目录。cd .:切换到当前目录(无变化)。cd ..:切换到上级目录。
cp:复制文件或目录。cp src dst:将源文件复制为目标文件。cp src dir/:将源文件复制到指定目录内。cp -rf src_dir dst_dir:递归强制复制目录(常用于目录拷贝)。
5.2 命令组合技巧
# 1. 查看详细文件信息(按时间排序)$ ls -lht
# 2. 查找最大文件$ ls -lS | head -5
# 3. 统计文件数量$ ls | wc -l
# 4. 只显示目录$ ls -d */
# 5. 显示隐藏文件(不包括.和..)$ ls -A5.3 实用技巧与注意事项
- 选项:命令可以有 0 个或多个选项,用空格隔开(如
ls -l -a或ls -la)。 - 别名:可以为常用命令设置别名来简化操作。
- 历史命令:按键盘的上下箭头键可以翻阅之前执行过的命令。
- 终止异常:如果命令卡住或出现异常,可以尝试按
Ctrl + C组合键来强制终止当前进程。 - 全屏切换:在终端中,按
Alt + Enter可以进入或退出全屏模式。
6. 文件重定向操作
核心思想:改变默认的输入/输出”文件”(即键盘/显示器),将其关联到其他文件或设备。
- 语法:在命令后使用
>、>>、<等操作符。
6.1 输出重定向 (>)
- 功能:将命令的标准输出,从显示器重定向到指定文件。
- 特性:若文件不存在则创建;若文件存在则先清空原有内容,再写入。
- 示例:
$ echo "helloworld" > hello.txt # 将"helloworld"写入hello.txt,并清空原文件$ cat hello.txt # 显示文件内容helloworld6.2 追加重定向 (>>)
- 功能:将命令的输出追加到指定文件的末尾,不清空原内容。
- 示例:
$ echo "new line" >> hello.txt # 在hello.txt末尾追加一行"new line"$ cat hello.txthelloworldnew line6.3 输入重定向 (<)
- 功能:将命令的标准输入,从键盘重定向为从指定文件读取。
- 示例:
$ wc -l < hello.txt # 统计hello.txt的行数,结果直接显示27. 管道与文本处理
7.1 管道 (|)
- 功能:将一个命令的标准输出,作为另一个命令的标准输入。用于组合多个简单命令完成复杂任务。
- 示例:
# 查看 log.txt 文件的第 510 行$ head -510 log.txt | tail -1hello 510
# 组合命令:查看第510行 -> 反向排列 -> 统计行数(此例中反向排列后行数不变)$ cat log.txt | head -510 | tail -1 | tac | wc -l17.2 实用命令组合
head -N:显示文件前 N 行。tail -N:显示文件后 N 行。tac:反向显示文件内容(cat的反写)。wc -l:统计行数。
8. 文件类型与C语言文件操作
8.1 C语言文件操作函数(fopen 模式)
fopen() 函数用于打开文件,其模式参数与重定向逻辑相通:
"r":只读打开文本文件。"w"/"w+":写入模式。文件不存在则创建,存在则清空(类似于>)。"a"/"a+":追加模式。写入内容始终追加到文件末尾(类似于>>)。"r+":读写模式,文件必须存在。
8.2 设备文件示例
终端本身就是一个字符设备文件,路径类似于 /dev/pts/1。向这个文件写入内容,就会显示在对应的终端窗口上。
$ echo "Message to terminal 1" > /dev/pts/19. 系统时间与时间戳
9.1 时间戳概念
- 定义:Unix 时间戳,指从 1970年1月1日 00:00<00>00> UTC(北京时间 1970-01-01 08:00<00>00>)起所经过的秒数。
- 用途:
- 用于系统内部记录时间(如文件修改时间)。
- 在日志中记录事件发生的精确时刻,便于排查和追踪。
- 计算机为何能持续计时:主板上有一颗纽扣电池,用于在关机后维持 CMOS 芯片(存储 BIOS 设置和系统时钟)的运行。
9.2 时间戳操作命令
获取当前时间戳:
$ date +%s1725974746格式化当前时间:
$ date +%Y-%m-%d_%H:%M:%S2024-09-10_21:21:43将时间戳转换为可读时间:
$ date -d @1725974749 +%Y-%m-%d_%H:%M:%S2024-09-10_21:25:49查看时间戳起点:
$ date -d @0 +%Y-%m-%d_%H:%M:%S1970-01-01_08:00:0010. 查找命令文件
10.1 which 命令
- 功能:在环境变量
$PATH指定的路径中,查找可执行命令的位置。 - 特点:用于查找我们将要执行的命令的绝对路径。
- 示例:
$ which lsalias ls='ls --color=auto' # 显示别名 /usr/bin/ls # 实际命令位置$ which pwd/usr/bin/pwd10.2 whereis 命令
- 功能:查找二进制程序、源代码文件和手册页的位置,搜索范围比
which更广。 - 示例:
$ whereis manman: /usr/bin/man /usr/share/man /usr/share/man/man1/man.1.gz # 程序本身和手册页位置11. 文件打包与压缩
11.1 基本概念
- 打包:将多个文件合并为一个文件(防止文件丢失)
- 压缩:通过算法减少文件体积(节省存储空间和网络传输时间)
- 注意:在 Linux 中,打包和压缩通常不做明显区分,常通过组合命令同时完成
11.2 常用压缩命令
11.2.1 zip/unzip(适用于Linux与Windows互传)
- 压缩:
zip -r dst.zip src # 递归压缩源文件/目录为目标压缩包- 解压:
unzip XXX.zip # 解压到当前目录unzip XXX.zip -d 指定目录 # 解压到指定目录11.2.2 tar(适用于Linux与Linux互传)
- 打包压缩:
tar czf XXX.tgz 源文件/目录 # 创建gzip压缩的tar包-
参数说明:
c:创建归档z:使用gzip压缩f:指定文件名
-
解压:
tar xzf XXX.tgz # 解压到当前目录tar xzf lesson4.tgz -C /root # 解压到指定目录/root- 参数说明:
x:解压z:使用gzip解压f:指定文件名C:指定解压目录
11.3 文件传输
11.3.1 scp命令(基于SSH的安全复制)
- 上传到远程服务器:
scp lesson.tgz whb@8.137.19.140:/home/whb/code/113scp dst.tgz 用户名@你的公网IP:目标机器指定的路径- 从远程服务器下载:
scp whb@8.137.19.140:/home/whb/code/113/lesson.tgz .11.3.2 rz/sz命令(Zmodem协议传输)
- 安装(如未安装):
yum install lrzsz # CentOS/RHELapt install lrzsz # Ubuntu/Debian- 使用:
rz # 从本地上传文件到服务器sz 文件名 # 从服务器下载文件到本地12. 系统信息与维护
12.1 系统信息查看
- 查看体系结构:
uname -m # 显示机器硬件名称-
常见架构:
- x86:32 位 Intel/AMD 处理器
- x86_64(x64):64 位 Intel/AMD 处理器
- arm/aarch64:ARM 架构处理器
-
查看内核版本:
uname -r # 显示内核发行版本12.2 系统维护命令
- 关机/重启:
shutdown -h now # 立即关机shutdown -r now # 立即重启halt # 关机reboot # 重启- 注意:云服务器通常设计为永不停机,除非进行维护或不再使用。
13. 命令行操作技巧
13.1 快捷键
Ctrl + C:终止当前运行的任务Ctrl + D:退出当前用户(相当于输入 exit)Ctrl + R:反向搜索历史命令Tab键(按两次):自动补全命令或路径
13.2 历史命令管理
- 查看历史命令:
history # 显示所有历史命令!n # 执行历史记录中第n条命令!string # 执行最近以string开头的命令- 搜索历史命令:
- 按
↑/↓键:上下翻阅历史命令 Ctrl + R:反向搜索历史命令
- 按
13.3 环境变量
- 查看命令位置:
which 命令名 # 查看命令的可执行文件位置whereis 命令名 # 查看命令的二进制文件、源文件和手册页位置14. Shell原理与用户权限
14.1 Shell基础概念
- 定义:Shell 是命令行解释器(Command Interpreter)
- 功能:
- 将用户的命令翻译给内核(kernel)处理
- 将内核的处理结果翻译给用户
- 重要性:
- 方便用户操作操作系统
- 保护内核,防止用户直接操作
14.2 Shell工作流程
用户输入命令 → Shell解释 → 创建新进程 → 内核执行 → 返回结果 → Shell显示结果- 每个命令执行时,Shell 会创建一个新的进程来运行该命令
- 执行出错时,会返回错误信息给用户
14.3 Shell与Bash
- 常见 Shell 类型:
- sh:Bourne Shell(早期标准)
- bash:Bourne Again Shell(Linux 默认,功能更强大)
- zsh:Z Shell(功能丰富,macOS Catalina 后默认)
- csh/tcsh:C Shell(语法类似 C 语言)
- 查看当前 Shell:
echo $SHELL # 显示默认Shellecho $0 # 显示当前Shell14.4 Linux权限体系
14.4.1 用户分类
- root 用户:超级管理员,拥有最高权限
- 普通用户:权限受限,受系统管控
- 类比 Windows:管理员(admin)vs 普通用户
14.4.2 权限规则
- 普通用户不允许修改系统关键文件和目录
- 权限不足时会出现错误:
cp: cannot create regular file /usr/bin/myprocess: Permission denied14.4.3 用户切换(su/su-)
- 普通用户 → root 用户:
su # 切换用户,环境变量不变su - # 切换用户,并加载目标用户的环境变量(推荐)需要输入 root 密码
- root 用户 → 普通用户:
su 用户名 # 切换到指定用户不需要密码
14.4.4 sudo命令(临时提权)
sudo 命令 # 以root权限执行单条命令- 需要用户有 sudo 权限(在
/etc/sudoers中配置) - 第一次使用需要输入当前用户密码
15. 总结
- 压缩传输:根据跨平台需求选择
zip(Windows 兼容)或tar(Linux 间高效传输) - 安全复制:
scp基于 SSH,传输过程加密安全 - 系统信息:
uname命令快速获取系统架构和内核版本 - 效率工具:善用快捷键和历史命令搜索提升操作效率
- Shell 角色:作为用户与内核间的翻译官和保护层
- 权限管理:理解 root 与普通用户的权限差异,掌握安全的用户切换方法
- 云服务器:设计为高可用,非必要不重启,通过 SSH 远程管理
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!

