目录

linux四大部分:

Linux内核: 操作系统

GUN:

GUI:

@系统目录

@基本命令

一. 文件

二. 系统

三. 父子shell

四. 环境变量

五. 安装软件

六. 用户和权限

七. 编辑器vim

@Git

Git基本配置与常见命令

@docker

一. 了解docker

二. docker安装

三. docker镜像管理命令

四. docker容器管理命令

使用镜像创建并运行容器 docker run xxx (最重要命令)

容器启停与管理

五. Dockerfile-构建镜像的蓝图

六. docker网络模式

七. docker compose命令


Linux四大部分
  1. Linux kernel 内核

  2. GNU工具 ( 通用许可证 )

  3. GUI Desktop环境

  4. Application应用

Linux内核: 操作系统
  1. 硬件设备 管理应用

  2. 软件程序 ---> 操作软件

  3. 系统内存

  4. 文件系统, 文件管理, 保存删除修改..

GUN:
  1. GUN核心: coreutils and shell

  2. shell命令

GUI:
  1. X Windows

  2. KDE

  3. GNOME

  4. Unity

@系统目录

@基本命令
一. 文件

~代表当前所在目录, /正斜线代表根目录( 区分windows路径反斜线\ )

ls -l 条件过滤, 使用通配符 ? * 占位单个字符, [ ] (类比正则) 等等进行条件( 多个 )过滤

cd 切换到目录

cd !$ 转到上一条命令最后一个目录

cp -i (-r 递归处理, 将指定目录下所有文件以及子目录一并处理)

mkdir 创建文件夹

touch 创建文件

mv 移动和重命名

rm -i 删除并询问

file 查看文件类型格式

@链接

Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

软链接

  • 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式

  • 2.软链接可以 跨文件系统 ,硬链接不可以

  • 3.软链接可以对一个不存在的文件名进行链接

  • 4.软链接可以对目录进行链接

硬链接

  • 1.硬链接,以文件副本的形式存在。但不占用实际空间。

  • 2.不允许给目录创建硬链接

  • 3.硬链接只有在同一个文件系统中才能创建

ln 建立文件硬链接(类似起别名副本) ln 1.java 1_linkfile

ln -s 建立文件软链接(类似快捷方式) ln -s 1.java 2_linkfile ====> 2_linkfile -> 1.java

cat more less(PgUp, PgDn上下翻页)查看文件内容

tail -n 3 文件名 查看后3行

head -n 3 文件名 查看前3行

二. 系统

任务管理器:

top 查看所有进程

ps 显示当前进程状态 ps-l ps -aux | grep named

kill 结束进程

ps -aux | grep named 找到进程ID, kill ID结束该进程

@挂载

挂载就是把一个设备放到一个目录下,方便系统管理这个设备中的文件

一般就是把一个分区挂载到一个目录

mount 挂载

umount 卸载

df -h 显示磁盘相关信息

du-h 显示磁盘文件占用空间大小

sort 显示排序数据, 并不会改变原有数据

grep 文本搜索命令 grep hello demo.txt 搜索demo文件中含有hello字符的行数据

tar.gz 打包压缩 打包是将一大堆文件或目录打包成一个总文件, 压缩是将一个大文件压缩为一个小文件, 因为linux 很多压缩程序只能对一个文件进行压缩

tar打包、压缩

tar-cvf 1.tar 1.txt 仅打包,不压缩

tar -zcvf log.tar.gz log2012.log 将文件全部打成tar包并以gzip压缩

tar -zxvf   example.tar.gz  将文件解压缩并在当前目录下恢复其中包含的文件和目录。

三. 父子shell

一个bash套用一个终端

sleep进程睡眠 sleep 300& 进程睡眠300s且最小化

jobs显示当前sleep进程

分号;分隔 执行多条命令

外部命令和内建命令(ps -f可查看)

外部命令有ps, 内部有cd等等

coproc创建协程

alias起别名

四. 环境变量

环境变量,全局变量,局部变量

(centos8)环境变量文件路径: /etc/profile,

常见四种名称:

  1. .bashrc

  2. .bash_profile

  3. .profile

  4. .bash_login

局部变量直接定义: fuck = "hello" 输出: echo $fuck(注意刀乐符)

全局变量定义: export fuck = "hello" 输出: echo $fuck(注意刀乐符)

eg: 定义局部变量或者用户变量务必小写, 只有系统全局变量才大写

删除变量: unset fuck

值得注意的是以上定义变量均要注意父子shell范围, 且关闭终端之后变量消失, 若要永久定义需要修改系统环境变量文件

五. 安装软件

PMS系统和软件安装命令区别如下:

任务REDHAT(CENTOS)UBUNTU(DEBIAN)
服务管理 (以apache为例)
启动服务service httpd start/etc/init.d/apache2 startsystemctl start apache2
停止服务service httpd stop/etc/init.d/apache2 stopsystemctl stop apache2
随系统启动自动运行chkconfig httpd onupdate-rc.d apache2 defaultssystemctl enable apache2
禁止启动自动运行chkconfig httpd offupdate-rc.d apache2 removesystemctl disable apache2
基本信息
软件包后缀*.rpm*.deb
软件源配置文件/etc/yum.conf/etc/apt/sources.list
安装、删除、升级软件包
更新软件包列表每次运行yum时自动更新apt update
从软件仓库安装软件yum install packageapt install package
安装已下载的软件包yum localinstall pkg.rpmrpm -ivh pkg.rpmdpkg -i pkg.deb
删除软件包yum remove packageapt remove package
软件包升级测试yum check-updateapt -s upgradeapt -s dist-upgrade
升级软件包yum update packagerpm -Uvh [args]apt upgrade package
升级整个系统yum updateapt dist-upgrade

六. 用户和权限
任务REDHAT(CENTOS)UBUNTU(DEBIAN)通用说明
用户管理
创建用户useradd usernameadduser usernameuseradd usernameadduser 是交互式工具,useradd 是底层命令
删除用户userdel usernamedeluser usernameuserdel usernamedeluser 提供更多选项,userdel 更基础
修改用户信息usermod [options] usernameusermod [options] username通用命令,如修改主组、附加组、家目录等
设置用户密码passwd usernamepasswd username通用命令,用于设置或更改用户密码
查看用户信息id usernamefinger usernameid usernamefinger usernameid 显示用户和组ID,finger 显示详细信息(需安装)
切换用户su - usernamesu - username- 表示切换到目标用户的环境
以其他用户身份执行命令sudo -u username commandsudo -u username command需要配置 sudoers 文件

组管理
创建组groupadd groupnameaddgroup groupnamegroupadd groupnameaddgroup 是交互式工具
删除组groupdel groupnamedelgroup groupnamegroupdel groupname
修改组信息groupmod [options] groupnamegroupmod [options] groupname例如修改组名
将用户添加到组usermod -a -G groupname usernameusermod -a -G groupname username-a 表示追加,不替换原有组
从组中删除用户gpasswd -d username groupnamegpasswd -d username groupname通用命令
查看组信息groups usernamegetent group groupnamegroups usernamegetent group groupnamegroups 显示用户所属组,getent 查询组数据库

注意事项:

  • 大多数用户和权限管理命令在RedHat/CentOS和Ubuntu/Debian中是通用的。

  • adduser/deluseraddgroup/delgroup 在Debian系中是Perl脚本,提供更友好的交互;而在RHEL系中通常直接使用 useradd/userdelgroupadd/groupdel

  • 使用 sudo 命令时,需要确保用户已被添加到 sudoers 文件中(通常通过 visudo 命令编辑)。

  • 修改系统用户或组信息时建议使用 sudo 或以 root 用户执行。

文件和文件夹权限rwx, 自学chmod命令

https://www.runoob.com/linux/linux-comm-chmod.html

七. 编辑器vim

https://blog.csdn.net/qq_46207024/article/details/116562319

@Git
Git基本配置与常见命令

Git GUI: Git提供的图形界面工具

Git Bash: Git提供的命令行工具

常见命令:

初始化 git init

-- 工作区==>暂存区 git add.

-- 暂存区==>仓库 git commit -m '描述'

-- 查看状态 git status

-- 查看提交记录 git log git-log

-- 版本回退 git reset --hard <commitID>

-- 查看分支 git branch

-- 创建/切换分支 git checkout -b <branchname>

-- 分支合并 git merge <branchname>

(首先要切换到目标分支上)

-- 删除分支 git branch -d <branchname>

** 远程仓库

-- 添加远程仓库 git remote add origin <remote-url>

-- 将远程仓库克隆到本地 git clone <项目地址>

-- 将本地推送到远程仓库 git push origin master

整体步骤: add commit push(先加入到暂存区再提交到仓库)

-- 将远程仓库拉取到本地 git fetch / git pull( git fetch + git merge )

@docker
一. 了解docker

Docker 是一种开源的 容器化平台,用于快速构建、部署和运行应用程序。

docker三大要素:

  • 镜像

  • 容器

  • 仓库

  1. 其中镜像相当于软件的模版或者快照, 可以理解为一个只读的光盘, 里面打包好了各种系统环境,配置文件,依赖库等等所以镜像是静态的,不可修改的

  2. 而容器就是利用镜像( 模版 )生产出来的产品, 用来跑我们开发的应用, 容器可以启动 停止 删除 暂停的

  3. 仓库顾名思义就是存储镜像的地方,用来下载别人做好的镜像

docker就是一个总工厂或者引擎进行部署管理,实现自动化运维

docker的作用:

  1. 保证环境一致, 解决"在我电脑上能跑,到你电脑就报错"的问题.

  2. 快速部署与启动, 容器启动只需要几秒钟, 比虚拟机快的多

  3. 使容器之间相互隔离, 多个容器可以基于同一个镜像创建, 但彼此互相隔离, 互不影响

  4. 可移植且资源利用率高

二. docker安装

Docker 容器技术最初就是为 Linux 设计的,因此在 Linux 系统上运行 Docker 具有最高的原生性能和最少的抽象层。这意味着容器的启动速度更快,资源占用更少,效率更高。

安装步骤链接:【Docker】CentOS 8.2 安装Docker教程_centos8安装docker-CSDN博客

三. docker镜像管理命令
  1. sudo docker pull xxx -下载镜像

    • 功能: 从docker仓库下载镜像到本地

    • 镜像引用: registry/imagename[:tag]

    • 部分说明示例
      registry镜像仓库地址(注册表)docker.io, quay.io, gcr.io
      namespace命名空间(用户或组织名)library, bitnami, nginx
      imagename镜像名称nginx, redis, mysql
      tag标签(通常是版本号)latest, 1.21, alpine
    • 示例:

      docker pull nginx: 从Docker Hub官方仓库下载最新版Nginx镜像。

      docker pull n8n/n8n: 从N8n的私有仓库下载N&n镜像。

      docker pull docker.io/library/mysql:8.0.16: 从官方仓库下载8.0.16版本的mysql

    • Docker Hub网站:

      [dockerhub]  hub.docker.com 

      是官方仓库,可搜索、查看镜像详情(如官方镜像、版本号、使用说明)

    • Registry (注册表)与 Repository (镜像库):

      • Registry: 整个Docker Hub网站可视为一个Registry。

      • Repository: 一个Repository(如Nginx)存储了同一个镜像的不同版本。

    • 网络问题解决方案(镜像站配置):

      • Linux: 修改/etc/docker/daemon.json 文件,添加 "registry-mirrors": ["https://<your-mirror-address>"],然后重启Docker服务(sudo systemctl restart docker)

  2. sudo docker images -列出本地镜像

    • 功能: 列出所有已下载到本地的docker镜像

  3. docker rmi xxx -删除镜像

    • 功能: 删除本地的docker镜像

    • 参数: 指定镜像id

  4. 镜像cpu架构( -platform )

    • 背景: docker镜像作为软件, 在不同cpu架构中有不同的版本

    • 默认行为: docker pull命令会默认选择最适合当前宿主机cpu架构的镜像

    • 特殊情况:

      • 对于某些低功耗主机cpu架构通常为ARM64, 需确认镜像是否提供ARM64版本

      • Mac电脑(ARM64架构)的docker desktop会使用QEMU模拟x86-64指令集, 以兼容部分AMD64镜像

四. docker容器管理命令
  1. 使用镜像创建并运行容器 docker run xxx (最重要命令)
    • 功能: 使用指定的镜像创建并运行一个容器

    • 自动拉取: 如果本地不存在指定镜像, docker run会先自动拉取镜像, 再创建并运行容器

    • docker ps: 查看正在运行的容器

      • 输出信息: Container ID(容器唯一id), Image(基于哪个镜像创建), Names(容器名称)

    • docker ps -a: 查看所有容器(包括正在运行和已经停止的)

    • -d (detached mode 分离模块):

      • 功能: 让容器在后台运行, 不阻塞当前终端窗口

      • 效果: 控制台只打印容器id, 容器日志不直接输出到终端

    • -p (port mapping 端口映射)

      • 背景: docker容器运行在独立的虚拟网络环境当中, 默认无法直接从宿主机访问容器内部网络

      • 功能: 将宿主机的端口映射到容器内部的端口

      • 语法: -p <宿主机端口>:<容器内端口> (先外后内)

      • 示例: -p 80:80 将宿主机的80端口转发到容器内的80端口

    • -v (volume mounting 挂载卷)

      • 功能: 将宿主机的文件目录与容器内的文件目录进行绑定

      • 目的: 实现数据的持久化保存, 当前容器被删除时, 容器内的数据也会被删除, 但挂载卷可确保数据保存在宿主机上

      • 类型:

        1. 绑定挂载 (bind mount): 直接将宿主机目录路径写入命令

          语法: -v <宿主机目录路径>:<容器内部目录命令>

          注意: 宿主机目录内容会覆盖容器内对应目录的原始内容,且docker惠子doing创建路径和文件夹

        2. 命名卷挂载 (named volume): 让docker自动创建一个存储空间, 并为其命名

          • 创建命名卷: docker volume create <卷名称>

          • 使用命名卷: -v <卷名称>:<容器内部目录路径>

          • 特点: 命名卷在第一次使用时, docker会将容器的文件夹内容同步到命名卷进行初始化(绑定挂载无此功能)

      • 卷管理命令

        • docker volume ls: 列出所有创建过的卷

        • docker volume inspect <卷名称>: 查看卷的详细信息, 包括宿主机的真实目录

        • docker volume rm <卷名称>: 删除一个卷

        • docker volume prune -a: 删除所有未被任何容器使用的卷

    • -e (environment variables 环境变量)

      • 功能: 为容器内部传递环境变量

      • 语法: -e <key>=<value>

      • 用途: 常用于配置数据库账号密码等

      • 查找: 可在docker hub镜像文档或开源项目的github仓库中查找可用的环境变量

    • --name (自定义容器名称)

      • 功能: 为容器指定一个自定义的, 在宿主机上唯一的名称

      • 好处: 方便记忆和管理

    • -it (interactive & TTY 交互式终端)

      • 功能: 让控制台进入容器内部, 获得一个交互式的命令行环境

      • 用途: 临时调试容器, 执行linux命令

      • 语法: docker run -it <镜像名称> /bin/bash

    • --rm (运行结束后自动删除)

      • 功能: 当容器停止时, 自动将其从宿主机上删除

      • 常用组合: 与-it联用, 用于临时调试场景

        eg: sudo docker run -it --rm nginx

    • --restart (重启策略)

      • 功能: 配置容器停止时的重启行为

      • 常用策略:

        1. always: 只要容器停止 (包括内部错误崩溃, 宿主机断电等), 就会立即重启

        2. unless-stopped: 除非手动停止容器, 否则都会尝试重启, 对于生产环境非常有用, 可自动重启因意外停止的容器, 而手动停止的容器不会再重启

        eg: sudo docker run -d --restart always/unless-stopped nginx

  2. 容器启停与管理
    • docker stop <容器id或名称>: 停止一个正在运行的容器

    • docker start <容器id或名称>: 重新启动一个已停止的容器

    • 参数保留: 使用stop和start启停容器时, 之前docker run时设置的端口映射, 挂载卷, 环境变量等参数都会被docker记录并保留, 无需重新设置

    • docker inspect <容器id或名称>: 查看容器的详细配置信息,可借助AI辅助分析

    • docker create <镜像名称>: 只创建容器,但不立即启动, 若要启动, 需后续执行docker start命令

    • docker rm -f <容器id或名称>: 删除一个容器, -f表示可以删除正在运行的容器

  3. 容器内部操作与调试

    • docker logs <容器id或名称>: 查看容器的运行日志

      • -f: 滚动查看日志, 实时刷新

    • docker技术原理简述:

      • Cgroups (control groups): 用于限制和隔离进程的资源使用(CPU, 内存, 网络带宽等), 确保容器资源消耗不影响宿主机或其他容器

      • Namespaces: 用于隔离进程的资源视图, 使得容器只能看到自己内部的进程id, 网络资源和文件目录,而看不到宿主机的

      • 本质: docker容器本质上是一个特殊的进程, 但进入容器内部后, 其表现似一个独立的操作系统

    • docker exec -在容器内部执行命令

      • 功能: 在一个正在运行的docker容器内部执行linux命令

      • 语法: docker exec <容器id或名称> <命令>

      • 示例: docker exec my_nginx ps -ef 查看容器内进程

      • 进入交互环境: docker exec -it <容器id或名称> /bin/sh 可进入容器内部获得交互式命令行环境, 进入文件系统查看, 进程管理或深入调试

      • 注意: 容器内部通常是极简操作系统, 可能缺失vi等常用工具, 需要自行安装 (如centos使用 yum install vim)

五. Dockerfile-构建镜像的蓝图
  • 定义: dockerFile是一个文本文件, 详细列出了如何制作docker镜像的步骤和指令, 可类比为制作模具的图纸

    把程序打包成docker镜像需要创建一个Dockerfile文件, 然后写入指令

  • 基本结构与指令:

    • FROM <基础镜像>: 所有Dockerfile的第一行, 选择一个基础镜像, 表示新镜像在此基础上构建

    • WORKDIR <目录路径>: 将宿主机的文件或目录拷贝到镜像内的指定路径, 类似cd

    • RUN <命令>: 在镜像构建过程中执行的命令 (比如安装依赖)

    • EXPOSE <端口号>: 声明镜像提供服务的端口 (仅声明, 实际端口映射仍有-p参数决定)

    • CMD <命令>: 容器运行时默认执行的启动命令, 一个DockerFile只能有一个CMD命令, 命令最好写成数组形式如: CMD ["python3", "main.py"]

    • ENTRYPOINT <命令>: 与CMD类似, 但优先级更高, 不易被docker run 命令覆盖

  • docker build -构建镜像

    • 功能: 根据DockerFile构建Docker镜像

    • 语法: docker build -t <镜像名称> [:<版本号>] <DockerFile所在目录> 版本号可不写若写的话加:

    • 示例: docker build -t docker-test:1.2.1 . 在当前目录下构建名为docker-test的镜像, .代表当前目录

  • 镜像推送至Docker Hub

    1. 登录Docker Hub: docker login

    2. 重新标记镜像: docker tag <本地镜像名称> <你的用户名>/<镜像名称>[:<版本号>] 推送时镜像名称必须包含用户名作为命名空间

    3. 推送镜像: docker push <你的用户名>/<镜像名称>[:版本号]

    4. 验证: 在Docker Hub网站上可以搜索到已推送的镜像, 其他用户即可通过 docker pull 下载使用

六. docker网络模式
  • bridge (桥接模式)

    • 默认模式: 所有容器默认连接到此网络

    • 内部ip: 每个容器被分配一个内部ip地址 (通常是172.17.x.x开头)

    • 通信: 同一bridge网络内的容器可以通过内部ip地址互相访问, 容器网络与宿主机网络默认隔离, 需通过端口映射-p才能从宿主机访问

    • 自定义子网

      1. 创建: docker network create <子网名称>

      2. 加入: docker run --network <子网名称> <容器id或名称>

      3. 优势:

        1. 同一子网内的容器可以使用容器名称互相访问 (docker内部DNS机制)

        2. 不同子网之间默认隔离

  • host (主机模式)

    • 功能: docker容器直接共享宿主机的网络命名空间

    • ip地址: 容器直接使用宿主机的ip地址

    • 端口: 无需端口映射 -p, 容器内的服务直接运行在宿主机的端口上, 通过宿主机的ip和端口即可访问

    • 用途: 解决一些复杂的网络问题

    • 语法: docker run --network host xxx

  • none (无网络模式)

    • 功能: 容器不连接任何网络, 完全隔离

    • 语法: docker run --network none xxx

  • 网络管理命令

    1. docker network ls: 列出所有docker网络 (包括默认的bridge, host, none以及自定义子网)

    2. docker network rm <网络名称>: 删除自定义子网 (默认网络不可删除)

七. docker compose命令

背景: 当一个完整的应用由多个模块 (如前端, 后端, 数据库) 组成时, 若将所有模块打包成一个巨大容器, 会导致故障蔓延, 伸缩性差. 若每个模块独立容器化, 则管理多个容器 (创建, 网络配置) 会增加复杂性

  • 解决方案: docker compose 是一种轻量级的容器编排技术, 用于管理多个容器的创建和协同工作

  • 核心: 使用yaml文件 (通常命名为docker-compose.yaml) 定义多服务应用

    创建文件: vi docker-compose.yaml

  • yaml文件结构: 可视为多个docker run命令按照特定格式组织在一个文件中

    • services: 顶级元素, 每个服务对应一个容器

    • 服务名称: 对应docker run中的 --name, 作为容器的一部分,每个services名对应一个容器名

    • image: 对应docker run中的镜像名

    • environment: 对应docker run中的-e参数

    • volumes: 对应docker run中的-v参数

    • ports: 对应docker run中的-p参数

    • 网络: docker compose会自动为每个compose文件创建一个默认子网, 文件中定义的所有容器会自动加入此子网, 并可以通过服务名称互相访问

    • depends_on: 定义容器的启动顺序, 确保依赖服务先启动

  • AI辅助: 可借助AI工具生成等价的docker compose文件

  • docker compose命令:

    • docker compose up: 启动yaml文件中定义的所有服务(容器)

      1. -d: 后台运行

      2. 会自动创建子网和容器

    • docker compose down: 停止并删除由compose文件定义的所有服务和网络

    • docker compose stop: 仅停止服务, 不删除容器

    • docker compose start: 启动已停止的服务

    • docker compose -f <文件名.yml> up: 指定非标准文件名的compose文件进行操作

  • 使用场景: docker compose适合个人使用和单机运行的轻量级容器编排需求

  • 与kubernetes对比: kubernetes是企业级服务器集群和大规模容器编排的解决方案, 功能更为复杂

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐