linux基础知识点

4028 字
20 分钟
linux基础知识点

Linux系统#

1. 核心概念与系统认知#

  1. 图形界面 vs 命令行:

    • 所有操作系统最初都只有命令行界面。
    • Windows 和 Linux Desktop 虽有图形界面,但终端命令操作是核心与基础。
  2. 文件本质:

    • 文件 = 内容 + 属性。对文件的操作,本质上就是对内容或属性的操作。
    • 即使是空文件,也会占用少量磁盘空间(主要存储其属性信息)。
  3. 命令的本质:命令行中输入的命令(如 ls、pwd),本质上是存储在系统路径(如 /usr/bin/ls)下的可执行文件,与我们自己编写的 C/C++ 程序性质相同。

  4. “一切皆文件”:在 Linux 系统中,硬件设备、输入输出、乃至操作系统提供的功能,其访问接口大多被抽象为文件。这是理解后续所有操作的基础。

    • 应用实例:printf/cout(输出到显示器)、scanf/cin(从键盘输入),其本质都是文件操作。
    • 标准流文件:系统默认会为每个进程打开三个”文件”(流):
      • stdin(标准输入):对应键盘,文件描述符为 0。
      • stdout(标准输出):对应显示器,文件描述符为 1。
      • stderr(标准错误):对应显示器,文件描述符为 2。
    • 思考:为什么系统要帮我们打开这三个文件?为了方便程序进行最基础的输入输出交互。
  5. 目录结构:Linux 的文件系统是一棵从根目录 (/) 开始的多叉树。

    • 叶子节点:普通文件或空目录。
    • 非叶子节点:非空目录。
    • 路径分隔符:Linux 使用 /,Windows 使用 \。

2. Linux目录结构#

2.1 主要目录及其功能#

目录英文原意主要功能备注
/root根目录所有目录和文件的起点
/binbinary存放二进制可执行命令普通用户和root用户都可使用
/sbinsystem binary存放特权级二进制文件只有root用户可用
/bootboot存放内核与启动文件系统启动所需的核心文件
/devdevice存放抽象硬件设备文件所有硬件设备都以文件形式存在
/etcetcetera存放系统配置文件包含各种应用程序和服务的配置
/liblibrary存放系统库文件共享库文件
/homehome普通用户目录每个用户在此有独立子目录
/rootroot特权用户(root)目录root用户的家目录
/usrUnix System Resources存放安装程序(软件默认目录)用户安装的应用程序
/varvariable存放经常变化的文件如日志、邮件、缓存等
/mntmount文件挂载目录用于挂载U盘、光驱等外部设备
/optoptional大型软件存放目录非强制,第三方大型软件
/tmptemporary临时文件目录系统重启后可能清空

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. 路径理解#

  1. 目录树结构:Linux 所有文件和目录组成树形结构。

  2. 绝对路径:从根目录 / 开始的完整路径,具有唯一性。

    • 示例:/home/whb/test.c
    • 用途:配置文件、脚本中常用(配置文件建议使用绝对路径)
  3. 相对路径:以当前目录为参照的路径,日常操作更简便。

    • 示例:./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.txt
drwxr-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 时间戳详解#

  1. Access Time (atime):最后访问时间(读取文件)。
  2. Modify Time (mtime):最后修改时间(文件内容变更)。
  3. 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 命令组合技巧#

Terminal window
# 1. 查看详细文件信息(按时间排序)
$ ls -lht
# 2. 查找最大文件
$ ls -lS | head -5
# 3. 统计文件数量
$ ls | wc -l
# 4. 只显示目录
$ ls -d */
# 5. 显示隐藏文件(不包括.和..)
$ ls -A

5.3 实用技巧与注意事项#

  • 选项:命令可以有 0 个或多个选项,用空格隔开(如 ls -l -a 或 ls -la)。
  • 别名:可以为常用命令设置别名来简化操作。
  • 历史命令:按键盘的上下箭头键可以翻阅之前执行过的命令。
  • 终止异常:如果命令卡住或出现异常,可以尝试按 Ctrl + C 组合键来强制终止当前进程。
  • 全屏切换:在终端中,按 Alt + Enter 可以进入或退出全屏模式。

6. 文件重定向操作#

核心思想:改变默认的输入/输出”文件”(即键盘/显示器),将其关联到其他文件或设备。

  • 语法:在命令后使用 >、>>、< 等操作符。

6.1 输出重定向 (>)#

  • 功能:将命令的标准输出,从显示器重定向到指定文件。
  • 特性:若文件不存在则创建;若文件存在则先清空原有内容,再写入。
  • 示例:
Terminal window
$ echo "helloworld" > hello.txt # 将"helloworld"写入hello.txt,并清空原文件
$ cat hello.txt # 显示文件内容
helloworld

6.2 追加重定向 (>>)#

  • 功能:将命令的输出追加到指定文件的末尾,不清空原内容。
  • 示例:
Terminal window
$ echo "new line" >> hello.txt # 在hello.txt末尾追加一行"new line"
$ cat hello.txt
helloworld
new line

6.3 输入重定向 (<)#

  • 功能:将命令的标准输入,从键盘重定向为从指定文件读取。
  • 示例:
Terminal window
$ wc -l < hello.txt # 统计hello.txt的行数,结果直接显示
2

7. 管道与文本处理#

7.1 管道 (|)#

  • 功能:将一个命令的标准输出,作为另一个命令的标准输入。用于组合多个简单命令完成复杂任务。
  • 示例:
Terminal window
# 查看 log.txt 文件的第 510 行
$ head -510 log.txt | tail -1
hello 510
# 组合命令:查看第510行 -> 反向排列 -> 统计行数(此例中反向排列后行数不变)
$ cat log.txt | head -510 | tail -1 | tac | wc -l
1

7.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。向这个文件写入内容,就会显示在对应的终端窗口上。

Terminal window
$ echo "Message to terminal 1" > /dev/pts/1

9. 系统时间与时间戳#

9.1 时间戳概念#

  • 定义:Unix 时间戳,指从 1970年1月1日 00:00<00> UTC(北京时间 1970-01-01 08:00<00>)起所经过的秒数。
  • 用途:
    1. 用于系统内部记录时间(如文件修改时间)。
    2. 在日志中记录事件发生的精确时刻,便于排查和追踪。
  • 计算机为何能持续计时:主板上有一颗纽扣电池,用于在关机后维持 CMOS 芯片(存储 BIOS 设置和系统时钟)的运行。

9.2 时间戳操作命令#

获取当前时间戳:

Terminal window
$ date +%s
1725974746

格式化当前时间:

Terminal window
$ date +%Y-%m-%d_%H:%M:%S
2024-09-10_21:21:43

将时间戳转换为可读时间:

Terminal window
$ date -d @1725974749 +%Y-%m-%d_%H:%M:%S
2024-09-10_21:25:49

查看时间戳起点:

Terminal window
$ date -d @0 +%Y-%m-%d_%H:%M:%S
1970-01-01_08:00:00

10. 查找命令文件#

10.1 which 命令#

  • 功能:在环境变量 $PATH 指定的路径中,查找可执行命令的位置。
  • 特点:用于查找我们将要执行的命令的绝对路径。
  • 示例:
Terminal window
$ which ls
alias ls='ls --color=auto' # 显示别名
/usr/bin/ls # 实际命令位置
$ which pwd
/usr/bin/pwd

10.2 whereis 命令#

  • 功能:查找二进制程序、源代码文件和手册页的位置,搜索范围比 which 更广。
  • 示例:
Terminal window
$ whereis man
man: /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互传)#

  • 压缩:
Terminal window
zip -r dst.zip src # 递归压缩源文件/目录为目标压缩包
  • 解压:
Terminal window
unzip XXX.zip # 解压到当前目录
unzip XXX.zip -d 指定目录 # 解压到指定目录

11.2.2 tar(适用于Linux与Linux互传)#

  • 打包压缩:
Terminal window
tar czf XXX.tgz 源文件/目录 # 创建gzip压缩的tar包
  • 参数说明:

    • c:创建归档
    • z:使用gzip压缩
    • f:指定文件名
  • 解压:

Terminal window
tar xzf XXX.tgz # 解压到当前目录
tar xzf lesson4.tgz -C /root # 解压到指定目录/root
  • 参数说明:
    • x:解压
    • z:使用gzip解压
    • f:指定文件名
    • C:指定解压目录

11.3 文件传输#

11.3.1 scp命令(基于SSH的安全复制)#

  • 上传到远程服务器:
Terminal window
scp lesson.tgz whb@8.137.19.140:/home/whb/code/113
scp dst.tgz 用户名@你的公网IP:目标机器指定的路径
  • 从远程服务器下载:
Terminal window
scp whb@8.137.19.140:/home/whb/code/113/lesson.tgz .

11.3.2 rz/sz命令(Zmodem协议传输)#

  • 安装(如未安装):
yum install lrzsz # CentOS/RHEL
apt install lrzsz # Ubuntu/Debian
  • 使用:
Terminal window
rz # 从本地上传文件到服务器
sz 文件名 # 从服务器下载文件到本地

12. 系统信息与维护#

12.1 系统信息查看#

  • 查看体系结构:
uname -m # 显示机器硬件名称
  • 常见架构:

    • x86:32 位 Intel/AMD 处理器
    • x86_64(x64):64 位 Intel/AMD 处理器
    • arm/aarch64:ARM 架构处理器
  • 查看内核版本:

Terminal window
uname -r # 显示内核发行版本

12.2 系统维护命令#

  • 关机/重启:
Terminal window
shutdown -h now # 立即关机
shutdown -r now # 立即重启
halt # 关机
reboot # 重启
  • 注意:云服务器通常设计为永不停机,除非进行维护或不再使用。

13. 命令行操作技巧#

13.1 快捷键#

  • Ctrl + C:终止当前运行的任务
  • Ctrl + D:退出当前用户(相当于输入 exit)
  • Ctrl + R:反向搜索历史命令
  • Tab 键(按两次):自动补全命令或路径

13.2 历史命令管理#

  • 查看历史命令:
Terminal window
history # 显示所有历史命令
!n # 执行历史记录中第n条命令
!string # 执行最近以string开头的命令
  • 搜索历史命令:
    • 按 ↑/↓ 键:上下翻阅历史命令
    • Ctrl + R:反向搜索历史命令

13.3 环境变量#

  • 查看命令位置:
Terminal window
which 命令名 # 查看命令的可执行文件位置
whereis 命令名 # 查看命令的二进制文件、源文件和手册页位置

14. Shell原理与用户权限#

14.1 Shell基础概念#

  • 定义:Shell 是命令行解释器(Command Interpreter)
  • 功能:
    1. 将用户的命令翻译给内核(kernel)处理
    2. 将内核的处理结果翻译给用户
  • 重要性:
    • 方便用户操作操作系统
    • 保护内核,防止用户直接操作

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:
Terminal window
echo $SHELL # 显示默认Shell
echo $0 # 显示当前Shell

14.4 Linux权限体系#

14.4.1 用户分类#

  • root 用户:超级管理员,拥有最高权限
  • 普通用户:权限受限,受系统管控
    • 类比 Windows:管理员(admin)vs 普通用户

14.4.2 权限规则#

  • 普通用户不允许修改系统关键文件和目录
  • 权限不足时会出现错误:
cp: cannot create regular file /usr/bin/myprocess: Permission denied

14.4.3 用户切换(su/su-)#

  • 普通用户 → root 用户:
Terminal window
su # 切换用户,环境变量不变
su - # 切换用户,并加载目标用户的环境变量(推荐)

需要输入 root 密码

  • root 用户 → 普通用户:
Terminal window
su 用户名 # 切换到指定用户

不需要密码

14.4.4 sudo命令(临时提权)#

Terminal window
sudo 命令 # 以root权限执行单条命令
  • 需要用户有 sudo 权限(在 /etc/sudoers 中配置)
  • 第一次使用需要输入当前用户密码

15. 总结#

  1. 压缩传输:根据跨平台需求选择 zip(Windows 兼容)或 tar(Linux 间高效传输)
  2. 安全复制:scp 基于 SSH,传输过程加密安全
  3. 系统信息:uname 命令快速获取系统架构和内核版本
  4. 效率工具:善用快捷键和历史命令搜索提升操作效率
  5. Shell 角色:作为用户与内核间的翻译官和保护层
  6. 权限管理:理解 root 与普通用户的权限差异,掌握安全的用户切换方法
  7. 云服务器:设计为高可用,非必要不重启,通过 SSH 远程管理

文章分享

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

Profile Image of the Author
HandlerOne
おかえり
公告
本站已整理 138 篇技术笔记,并按 8 条主线排成学习路线(141 站);站内搜索与桌宠对话均已上线。
分类
标签
最新动态
站点统计
文章
138
分类
12
标签
42
总字数
597,044
站点信息
构建平台
腾讯云 · Nginx
博客版本
v6.16.8
文章目录