文章目的#
希望 linux 初学者可以通过本章内容,快速入门 linux。文章引用了菜鸟教程的优秀文章,以及网络上的一些图片
linux 的必要性#
linux 是一个稳定, 安全, 开源,免费的操作系统内核。 支持多用户同时使用。成为了各大公司服务器的首选。
掌握 Linux 可以提高技术就业竞争力。许多 IT 岗位将熟练使用 Linux 作为必备技能。
基于 linux 内核的主流发行版#
| 发行版 | 基础 | 特点描述 | 适合用户类型 | 软件安装工具 |
|---|---|---|---|---|
| Debian | 独立 | 强调自由软件,非常稳定,是许多其他发行版的基础。 | 需要高度稳定性的用户 | apt, apt-get, dpkg |
| Ubuntu | Debian | 易于使用,提供桌面和服务器版本,有长期支持版本(LTS)。 | 广泛应用于个人电脑、服务器及云计算 | apt, snap |
| Fedora | 独立 | 包含最新开源软件包和技术,由Red Hat赞助,强调创新和技术领先性。 | 追求新技术特性的高级用户 | dnf |
| Red Hat Enterprise Linux (RHEL) | 独立 | 面向企业的付费发行版,提供高度的安全性和稳定性,适合关键业务应用。 | 企业级用户 | yum / dnf |
| SUSE Linux Enterprise (SLE) | 独立 | 企业级发行版,在欧洲市场流行,openSUSE为社区版本,提供Leap(稳定)和Tumbleweed(滚动发布)。 | 需要企业级服务和支持的用户 | zypper |
| Arch Linux | 独立 | 滚动发布,适合喜欢自己动手定制系统的高级用户,始终获得最新的软件包。 | 技术爱好者和高级用户 | pacman |
| Manjaro | Arch Linux | 提供更友好的安装过程和默认设置,基于Arch Linux但对新手更加友好。 | 新手及希望体验Arch Linux的用户 | pacman |
| Linux Mint | Ubuntu | 提供更加传统的桌面体验,默认带有媒体编解码器等实用工具,非常适合从Windows过渡过来的新手用户。 | Windows用户迁移或寻求简单易用的用户 | apt |
| Elementary OS | Ubuntu | 受macOS启发的设计风格,美观且直观的桌面环境,旨在提供简洁高效的计算体验。 | 寻求美观高效界面的用户 | apt |
# 查看发行版
cat /etc/os-release初级阶段#
systemd服务管理器#
systemd 是 Linux 系统中一个强大的初始化系统和服务管理器
systemctl 是 systemd 的一个命令行工具,用于管理 systemd 系统和服务。通过 systemctl,我们可以方便地控制系统和服务的启动、停止、重启、查看状态等
以mysql为例子
# 查看所有服务
systemctl list-units --type=service
systemctl status mysql
systemctl start mysql
systemctl stop mysql
systemctl restart mysql
systemctl reload mysql
# 开机自动启动
systemctl enable mysql
systemctl disable mysql用户与 Linux 系统交互的基本原理#
用户使用终端(Terminal)通过命令或脚本与 Shell 进行通信, shell 与操作系统进行通信
graph TB
U[用户] -->|输入命令| T[终端 Terminal]
T -->|提供界面| S[Shell]
S -->|解释命令| P[命令解析]
S -->|管理环境变量| E[环境变量]
S -->|处理脚本| SC[脚本执行]
P --> K[内核系统调用]
E --> K
SC --> K
K -->|文件操作| F[文件系统]
K -->|进程管理| PM[进程管理]
K -->|内存管理| M[内存管理]
K -->|设备管理| D[设备驱动]
subgraph Shell层
S
P
E
SC
end
subgraph 操作系统层
K
F
PM
M
D
end
style T fill:#f9f,stroke:#333,stroke-width:2px
style S fill:#bbf,stroke:#333,stroke-width:2px
style K fill:#bfb,stroke:#333,stroke-width:2px
相关概念总结:
| 名称 | 作用 |
|---|---|
| 终端 | 一个供用户输入的黑框 |
| shell | 一个命令解释器,它不仅仅是提供了命令解释的功能,还允许用户编写脚本,将多个命令组合在一起以完成更复杂的任务。 |
| 命令 | 操作系统中提供的工具(可执行文件),供用户使用。 |
shell相关知识#
常见的 linux shell 包括: bash(默认 shell), zsh, fish, csh, dash
bash 的配置文件:
| 状态 | 文件路径 |
|---|---|
| 非登录(子shell) | ~/.bashrc |
| 登录(首次登录系统的shell) | ~/.bash_profile, ~/.bash_login, ~/.profile |
加载配置文件的配置到当前 bash: source ~/.bashrc
- shell启动和退出时加载的文件
| 文件路径 | 描述 | 设置内容 |
|---|---|---|
/etc/profile | 所有用户的默认环境设置 | |
/etc/bash.bashrc | 全局 Bash 配置文件 | |
~/.bash_profile | 用户级的 登录Shell(首次登录系统的shell) 配置文件 | |
~/.profile | 没有 ~/.bash_profile 时被读取, 通常会调用 ~/.bashrc | 环境变量, bin |
~/.bashrc | 用户级的 非登录Shell(子shell) 配置文件 | alias, 函数 |
~/.bash_logout | 用户注销时执行的脚本 | |
~/.inputrc | 配置 readline 库的行为 | |
~/.Xresources 或 ~/.Xdefaults | 配置 X11 环境 | |
~/.xsession 或 ~/.xinitrc | 启动图形界面会话时读取的文件 |
命令#
命令学习手册, 可以查看命令的作用和相关参数
# man是自带的工具
man zip
# tlrc是另一个开源的命令学习手册
brew install tlrc
tlrc zip命令的优势
- 相比于图形界面 GUI,命令可以更方便的通过脚本,自动化执行一系列的操作
- 输入命令,完成各种操作,比图形界面 GUI 更高效
环境变量#
- 概念
操作系统提供给程序的一种配置机制, 以键值对存储,它可以存储系统和用户自定义的配置信息。通过设置环境变量,我们可以灵活地配置程序的行为,提高系统的可配置性和可移植性。
- 重要的环境变量
| 名称 | 作用 |
|---|---|
| PATH | 指定了可执行文件的搜索路径,使得在命令行中可以直接运行这些程序,而无需输入完整路径 |
| USER | 当前用户 |
| HOME | 家目录 |
| SHELL | 当前shell类型 |
- 增删改查
# 查
env
env | grep path
# 增改
# 仅终端设置, 关闭终端后, 设置的环境变量失效
export AAA=111
# 用户级别设置, 影响所有后续登录的终端
echo 'export AAA=111' >> ~/.bashrc
source ~/.bashrc
# 删除
unset AAA文件管理#
linux 中 一切皆文件
linux 目录结构:https://www.runoob.com/linux/linux-system-contents.html
以下是 Linux 系统中根目录(/)下的常见一级目录及其功能简要说明。
| 目录 | 作用说明 | 常见使用场景 |
| -------- | ------------------------------------------------------------------------ | ---------------------------------------------- |
| `/` | 根目录,一切从此开始,是所有文件和目录的起点。 | 一般不会直接操作;系统启动时自动挂载。 |
| `/bin` | 存放系统启动和基本操作所需的二进制可执行文件(如 `ls`, `cp`, `rm` 等)。 | 恢复模式下使用基础命令;系统正常运行依赖。 |
| `/boot` | 存放启动加载器(如 GRUB)相关文件及 Linux 内核(如 `vmlinuz`)。 | 内核升级、修复启动引导问题。 |
| `/dev` | 包含系统中的设备文件,如硬盘、终端、USB 等(设备以文件形式存在)。 | 查看磁盘 `/dev/sd*`;与挂载、格式化有关操作。 |
| `/etc` | 存放系统和应用程序的配置文件,几乎所有系统配置都在这里。 | 编辑网络、服务、用户配置等;如 `/etc/hosts`。 |
| `/home` | 普通用户的主目录,如 `/home/username`。 | 用户文件存储、桌面环境配置、个人数据备份。 |
| `/lib` | 系统启动和 `/bin` 程序运行所需的共享库。 | 程序运行依赖;开发时查阅库路径。 |
| `/media` | 挂载可移动媒体设备(如 U 盘、CD-ROM)的挂载点。 | 插入 U 盘、自动挂载路径。 |
| `/mnt` | 临时挂载其他文件系统的目录,常用于手动挂载。 | 临时访问硬盘、ISO 文件、远程文件系统。 |
| `/opt` | 可选软件包的安装目录(通常是第三方软件)。 | 安装非系统标准路径的应用,如 Chrome。 |
| `/proc` | 内存中的虚拟文件系统,提供系统和进程信息接口,如 `/proc/cpuinfo`。 | 查看硬件信息、内核参数、运行进程。 |
| `/root` | 超级用户(root)的主目录(不是 `/home/root`)。 | `sudo -i` 后默认进入的目录;管理员的私有空间。 |
| `/run` | 系统运行时的信息(PID 文件、套接字等),是临时目录。 | 临时文件、守护进程 PID 文件、socket 通信等。 |
| `/sbin` | 存放系统管理员使用的二进制命令,如 `shutdown`, `mount` 等。 | 系统管理操作,如重启、挂载、网络配置。 |
| `/srv` | 服务数据目录,如 FTP、HTTP 的根目录等。 | 搭建网站、FTP 服务器时使用。 |
| `/sys` | 内核提供的系统和硬件信息接口,通常只读。 | 观察设备信息,热插拔设备自动更新。 |
| `/tmp` | 临时文件存储目录,系统重启后通常会清空。 | 程序或用户临时存放文件。 |
| `/usr` | 包含只读的用户应用程序和文件(如 `/usr/bin`, `/usr/lib`)。 | 安装软件、运行系统级应用。 |
| `/var` | 存放可变数据文件,如日志、缓存、邮件等。 | 查看系统日志 `/var/log`,服务缓存等。 |文件类型:
- 文件 f
- 文件夹 d
- 符号链接 l
文件路径分类
- 绝对路径
- 从根目录/开始
- 相对路径
- . 当前路径
- .. 当前路径的上级路径
相关命令
- 最基本命令
- pwd :当前绝对路径
- cd 路径:移动
- ls :查看当前文件夹内容
ls -1 | wc -l: 查看文件夹内的文件数量
- tree: 以树形结构查看当前文件夹内容
tree -L 2: 查看两层深度
- 文件文件夹相关
- mkdir 文件夹名: 创建文件夹, {}内不能有空格!!!
- mkdir -p fold1/{subfold1,subfold2}
- touch 文件名:创建文件, {}内不能有空格!!!
- touch xxx/{aaa.txt,bbb.json}
- rm 文件名: 删除文件或文件夹
- mv 文件名 移动位置: 移动文件或文件夹
- cp 文件名 新文件名:复制文件或文件夹
- cat 文件名:查看文件
- tail 文件名:查看文件末尾
- mkdir 文件夹名: 创建文件夹, {}内不能有空格!!!
文件编辑#
编辑配置 ~/.xxxrc file settings#
~/.bashrc
# auto ls function cd { builtin cd "$@" && ls } # alias alias ls='ls --time-style=long-iso' alias ll='ls -alFh' # browser alias edge='microsoft-edge' alias chrome='google-chrome'~/.profile
~/.vimrc
syntax on set autoindent set tabstop=4 set shiftwidth=4 set cursorline set backup set backupdir=~/.vim/undo~/.nanorc
include "/usr/share/nano/*.nanorc" set tabsize 4 set backup
nano编辑#
快捷键用如下方式进行表示: 控制键序列使用一个“^”符号标记,它可以用 Ctrl键或按 Esc 键两次的方式进行输入。 Meta 键序列使用“M-”符号标记,它可以用Alt、Cmd 或 Esc 键输入,具体取决于您的键盘设置。
| 快捷键 | 功能描述 |
|---|---|
| ^G (F1) | 显示帮助 |
| ^X (F2) | 关闭当前缓冲区 / 离开 nano |
| M-U | 撤销上次操作 |
| M-E | 重做撤销的操作 |
| M-Q | 向后搜索下一个出现位置 |
| M-W | 向前搜索下一个出现位置 |
| M-Del | 去除当前行(或者标记的行) |
vi/vim 编辑#
配置文件 ~/.vimrc
三种模式
- 命令模式
- 操作
- 查找: / 关键字 , 之后按 n 找下一个匹配, 按 N 找上一个匹配
- 操作
- 编辑模式
- 进入方式
- a 增加的方式进入编辑模式
- i 插入的方式进入编辑模式
- o 另起一行的方式进入编辑模式
- 退出方式
- esc
- 进入方式
- 末行模式
- 进入方式
- : 进入末行模式
- 退出方式
- enter 退出末行模式
- 操作
- 退出保存 wq
- 退出不保存 q!

- 进入方式
磁盘管理#
相关命令
df -h:检查pc的磁盘空间占用情况du -hd 1 | sort -rh:查看各文件大小, 有些文件看不到du -sh * | sort -rh:查看各文件大小
sudo apt install ncdu
# 分析当前目录
ncdu
# 分析指定目录
ncdu /var/log软件安装#
如果下载很慢的话,需要切换下载源
相关命令
- ubuntu
- sudo apt update && sudo apt upgrade : 更新
- sudo apt install xxx : 下载
- sudo apt remove xxx : 卸载
- centos
- yum update : 更新
- yum install xxx : 下载
- yum remove xxx : 卸载
中级阶段#
文件进阶#
Shell 通配符模式(Glob Pattern)#
Glob Pattern (Shell 通配符模式): 是一种用于匹配文件名的模式匹配工具,广泛应用于 Unix 和类 Unix 操作系统(如 Linux 和 macOS)的命令行界面中
regex: 更适合细致或复杂的文本分析
字符集功能:
在 ASCII 编码中:
数字字符(0-9)按顺序排列。 小写字母(a-z)按顺序排列。 大写字母(A-Z)按顺序排列。
# * 匹配任意数量的任意字符
*.jpg
*report*
**/*.txt
# ? 匹配任意单个的任意字符
?.txt
# []
[1-9].jpg
[a-z].jpg
[A-Z].jpg
# [!]
[!A].jpg # 匹配除了A的其他字符find 删除#
仅用于文件名匹配
文本处理
# yeshi duocengji?
find . -name "*your-regex-pattern*" -print
find . -name "*your-regex-pattern*" -delete
# 多层级
find . -wholename "./**/*4eaG8*"
# # 正则
# find . -maxdepth 1 -regex ".*your-regex-pattern.*" -print
# find . -maxdepth 1 -regex ".*your-regex-pattern.*" -deletediff比较#
# 比较文件
diff file1/ file2/
# 比较文件夹
diff -r dir1/ dir2/文件共享#
/tmp:
通常用于存放临时文件,可能位于磁盘或内存中,具体取决于系统配置。 适合存放需要在系统重启后仍然保留的临时数据。
/dev/shm:
专为共享内存设计,位于 RAM 中,访问速度更快。 适合存放需要高速访问且不需要持久化的数据。
打包和压缩#
| 属性 | tar(打包)+gzip(压缩, 大小约为打包文件的 1/7) | zip |
|---|---|---|
| 文件后缀 | .tar.gz 或 .tgz | .zip |
| 多文件支持 | 使用 tar 打包多个文件并压缩 | 原生支持多文件和目录结构 |
| 压缩率 | 高,适合大文件和数据集 | 一般,适合较小的文件或目录 |
| 兼容性 | Linux/Unix 中常用工具,Windows 较少用 | Windows、Mac、Linux 全面支持 |
| 是否支持加密 | 不支持,需借助其他工具 | 支持基本密码加密 |
| 是否支持分卷压缩 | 不支持 | 支持 |
命令:
# tar
tar -czvf xxx.tar.gz f1 f2 f3
tar -xzvf xxx.tar.gz
# zip
zip -r xxx.zip f1 f2
unzip xxx.zip -d xxx文件权限和用户管理#
linux 系统支持多用户同时使用。可以为每个用户设置群组, 通过群组间接进行权限控制. 组的主要作用是简化权限管理. 超级用户 root, 拥有最高权限. 普通用户, 拥有有限的权限. sudo 命令 提升权限 visudo.
sudo -i
用户 和 组 是 多对多的关系
文件信息
- /etc/passwd 用户的信息文件
- /etc/group 用户组的信息文件
FilePermission#
Linux 文件基本属性 | 菜鸟教程 (runoob.com)
权限分类
- r 4 读权限(read)
- w 2 写权限(write)
- x 1 执行权限(execute)
常用权限
- 755: 自己可读可写可执行,用户组和其他人可读可执行,不可写
- 700: 自己可读可写可执行,用户组和其他人没有任何权限
文件权限的设置
# 查看权限
ls -l
chown -R newowner:newgroup filename
chown :newgroup filename
chmod -R 775 filenameGroup#
组的增删改查
getent group
groupadd 组名
groupmod -n 新组名 旧组名
groupdel 组名User#
组中 用户的增删改查
# 组内用户
getent group 组名
# 组内用户
id 用户名
gpasswd -a 用户名 组名
gpasswd -d 用户名 组名进程管理#
相关概念
- 进程:操作系统进行资源分配的基本单位
- 线程:进程中最小的执行单位
- 协程:用户态线程
进程分类
- 孤儿进程
- 僵尸进程
相关命令
- top :查看进程,内存,交换空间等, 相当于 windows 的 任务管理器
- htop:top 的彩色加强版, 需要安装, 但是无法复制文字
- glances: top 的彩色加强版 plus,需要安装
- ps :查看进程
- kill -9 pid:杀死进程
top#
h 帮助文档 xb <> 自由排序
f 设置 按 Shift + W(大写 W) 这个命令会把当前配置写入 ~/.toprc 文件
Help for Interactive Commands - procps-ng 3.3.17
Window 1:Def: Cumulative mode Off. System: Delay 3.0 secs; Secure mode Off.
Z,B,E,e Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale
l,t,m,I Toggle: 'l' load avg; 't' task/cpu; 'm' memory; 'I' Irix mode
0,1,2,3,4 Toggle: '0' zeros; '1/2/3' cpu/numa views; '4' cpus two abreast
f,F,X Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width
L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right
R,H,J,C . Toggle: 'R' Sort; 'H' Threads; 'J' Num justify; 'C' Coordinates
c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify
x,y . Toggle highlights: 'x' sort field; 'y' running tasks
z,b . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria
n,#,^O . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s)
V,v . Toggle: 'V' forest view; 'v' hide/show forest view children
k,r 操作进程:'k' 杀死;'r' 设置优先级
d or s 设定更新间隔
W,Y,! Write config file 'W'; Inspect other output 'Y'; Combine Cpus '!'
q Quit
( commands shown with '.' require a visible task display window )
Press 'h' or '?' for help with Windows,htop 使用#
- f10 失灵的问题: 快捷键冲突
- 自定义列名: f2进入添加 swap ppid
- 显示混乱:
按 H
- H = Hide user threads(隐藏用户线程) 这样就能让列表干净很多,避免一堆重复的线程。
# 配置文件位置
~/.config/htop/htoprcps -p 4155167 -o pid,ppid,cmd
shell 后台作业#
一个shell 可以同时运行多个进程. 有的可见, 有的不可见. 就像桌面, 多窗口切换
# 暂停前台任务,将其放到后台
ctrl+z
# 终止指定的后台任务
kill %<job_id>
# 后台关闭也始终运行
# 默认输出 nohup.out
nohup 命令 &
# 指定文件输出
nohup 命令 > output.log 2>&1 &高级阶段#
ssh#
ssh 是一种安全的网络协议。 可以安全的远程连接电脑。
远程连接的意义
- 方便随时随地的查看状态,处理故障
- 可以远程连接多个地区的服务器,统一管理 可以看出 远程连接服务器的优势: 高效,安全
相关命令
- ssh 用户名@服务器IP地址
fail2ban - 入侵防护系统
# 安装
sudo apt install fail2ban
# fail2ban基本配置
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# 创建SSH防护配置(可选)
sudo tee /etc/fail2ban/jail.local << 'EOF'
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
EOF
sudo systemctl restart fail2ban# 查看fail2ban状态
sudo fail2ban-client status
# 查看SSH防护状态
sudo fail2ban-client status sshd
# 手动解封IP
sudo fail2ban-client set sshd unbanip 192.168.1.100scp#
scp localfile.txt username@remoteip:/directory
scp username@remoteip:/file.txt /local_directory
scp -r localfiles username@remoteip:/directory
scp -r username@remoteip:/directory /local_directorysftp#
FTP: 客户端和服务器之间传输文件的标准网络协议
网络管理#
常用命令
ifconfig
ping
curl
# 网上文件下载 curl httpaddr -o filename # 发送post请求 curl -X POST "http://xxxxx" -H "" -d'{"k1":"v1", "k2":"v2"}'wget
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml查看port#
本机
netstat -tulnp | grep :3306
ss -tulnp | grep 3306
lsof -i:3306
kill -9 3306远程机器
curl ip:port防火墙#
常用命令
- iptables
shell 脚本#
概念: 在文件中,按照语法规则,编写一系列的能够被 shell 解释的shell 命令,供操作系统执行, 这个文件就是 shell 脚本。 通常命名为*.sh
shell 脚本的优势:
- 自动化执行一系列操作,无需手动一个一个命令的执行
- 可以设置定时执行
- 学习难度不大
主要学习内容:
- 编写范式
- 判断
- 条件
- 循环
- 函数
- debug
学习 link: https://wangdoc.com/bash/intro
# 查看系统已经配置的shell
cat /etc/shells示例shell:
- 首行, 指明文件类型
- 设置安全检查
#!/bin/sh
set -eu安全检查工具#
shellcheck
文件服务#
cd target_path
python -m http.server 8080局域网访问文件
路径跳转#
- autojump
autojump 会根据你访问目录的频率来“记住”你常去的路径, 智能模糊匹配,
安装:
apt install autojump
# 在 ~/.bashrc 添加
[[ -s /usr/share/autojump/autojump.sh ]] && source /usr/share/autojump/autojump.sh
source ~/.bashrc# 路径导航
j xxx
# 查看权重
j -s- alias
命令缩写
alias ll='cd /aa/bb/cc'查看 alias
alias怎么排查内存占用情况的历史
sudo apt install sysstat
# 看昨天内存情况
sar -r
# ps aux --sort=-%mem | head
sar -r -u -p
ps aux --sort=-%mem | head