Skip to content

linux精通

名称链接备注
视频链接https://www.bilibili.com/video/BV1Sv411r7vd

1. 简介

当计算机拥有了操作系统,就相当于拥有了灵魂,操作系统可以:

  • 调度CPU进行工作
  • 调度内存进行工作
  • 调度硬盘进行数据存储
  • 调度网卡进行网络通讯
  • 调度音响发出声音
  • 调度打印机打印内容

1.1 简介

诞生

Linux创始人:林纳斯 托瓦兹

Linux 诞生于1991年,作者上大学期间。因为创始人在上大学期间经常需要浏览新闻和处理邮件,发现现有的操作系统不好用,于是他决心自己写一个保护模式下的操作系统,这就是Linux的原型,当时他21岁,后来经过全世界网友的支持,现在能够兼容多种硬件,成为最为流行的服务器操作系统之一。

什么是内核?

linux系统的组成如下:

  • linux系统内核

    内核提供系统最核心的功能,如:调度CPU、调度内存、调度文件系统、调度网络通讯、调度IO等。

  • 系统级应用程序

    系统级应用程序,可以理解为出厂自带程序,可供用户快速上手操作系统,如:文件管理器、任务管理器、图片查看、音乐播放等。

image-20240822100640524

可以看出,内核是Linux操作系统最核心的所在,系统级应用程序只是锦上添花 Linux内核是免费开源的,任何人都可以下载内核源码并查看且修改。 可以通过:https://www.kernel.org 去下载Linux内核

image-20240822100831063

什么是发行版?

内核是免费、开源的,这也就代表了:

任何人都可以获得并修改内核,并且自行集成系统级程序。

提供了内核+系统级程序的完整封装,称之为Linux发行版

image-20240822101011961

1.2 安装

2. 入门

通用格式

bash
comand [-options] [parameter]
  • command:命令本身

  • -options:可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节

  • -parameter:「可选,非必填1命令的参数,多数用于命令的指向目标等

    语法中的[]表示可选的意思。

linux的系统目录

Linux的目录结构是一个树型结构

  • Windows 系统可以拥有多个盘符,如C盘、D盘、E盘
  • Linux没有盘符这个概念,只有一个根目录/,所有文件都在它下面

windows可以好几个顶级目录

linux路径的描述方式

  • 在Linux系统中,路径之间的层级关系,使用:/来表示
  • 在Windows系统中,路径之间的层级关系,使用:\来表示

在linux世界中,万物皆文件

一些常见目录

  • /bin [常用] (/usr/bin 、/usr/local/bin)

    是Binary的缩写,这个目录存放着最经常使用的命令

  • /sbin (/usr/sbin、/usr/local/sbin)

    s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。

  • /home[常用]

    存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账 号命名

  • /root[常用]

    该目录为系统管理员,也称作超级权限者的用户主目录

  • /lib 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。

    几乎所有的应用程序都需要用到这些共享库

  • /lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件

  • /etc[常用]

    所有的系统管理所需要的配置文件和子目录,比如安装mysql数据库 my.conf

  • /usr[常用]

    这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下 的program files目录。

  • /boot[常用】

    存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件

  • /proc这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息

  • /srv service缩写,该目录存放一些服务启动之后需要提取的数据

  • /sys 这是linux2.6内核的一个很大的变化。

    该目录下安装了2.6内核中新出现的一个文件系统sysfs

  • /tmp 这个目录是用来存放一些临时文件的

  • /dev类似于windows的设备管理器,把所有的硬件用文件的形式存储

  • /media[常用]

    linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识 别的设备挂载到这个目录下

  • /mnt[常用]

    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上然后进入该目录就可以查看里的内容了。d:/myshare

  • /opt 这是给主机额外安装软件所摆放的目录。

    如安装ORACLE数据库就可放到该目录下。默认为空

  • /usr/local[常用]

    这是另一个给主机额外安装软件所安装的目录。,一般是通过编译源码方式安装的程序

  • /var[常用]

    这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件

  • /selinux [security-enhanced linux]

    SELinux是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置

vim编辑器

正常模式

  • 以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中 ,你可以使用『上下 左右』按键来移动光标,你可以使用『删除字符』或「删除整行』来处理档案内容 ,也可以使用 「复制、粘贴』来处理你的文件数据。

  • 插入模式

    按下i, I, o,O, a, A,r,R 等任何一个字母之后才会进入编辑模式,一般来说按i即可.

  • 命令行模式

    在这个模式当中 ,可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作 则是在此模式中达成的。

    先输入esc,然后再输入冒号:,切换到命令行模式。

    wq 保存退出

    q退出

    q! 强制退出,不保存

三种模式的切换

image-20240822144121133

快捷键提示

  • 拷贝当前行yy,拷贝当前行向下的5行 5yy,并粘贴(输入p)。 先输入yy,在输入p
  • 删除当前行 dd,删除当前行向下的5行 5dd
  • 在文件中查找某个单词 [命令行下 /关键字 , 回车 查找,输入 n 就是查找下一个]
  • 设置文件的行号,取消文件的行号.[命令行下:set nu和:set nonu]
  • 编辑 /etc/profile 文件,使用快捷键到该文档的最末行[G]和最首行[gg]
  • 在一个文件中输入"hello",然后又撤销这个动作 u
  • 编辑 /etc/profile 文件,并将光标移动到 20行 shift+g
  • 更多的看整理的文档

img

关机重启

参数作用
shutdown-h now立该进行关机
shutdown-h 1"hello,1 分钟后会关机了"
shutdown-r now现在重新启动计算机
halt关机,作用和上面一样.
reboot现在重新启动计算机
sync把内存的数据同步到磁盘、

注意细节

  • 不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
  • 目前的 shutdown/reboot/halt 等命令均已经在关机前进行了 sync ,老韩提醒: 小心驶得万年船

用户管理

Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统 管理员申请一个账号,然后以这个账号的身份进入系统

  • 添加用户

    bash
    useradd 用户名

    应用案例

    案例1: 添加一个用户 milan

    细节说明

    当创建用户成功后,会自动的创建和用户同名的家目录

    bash
    useradd -m 用户名

    给新创建的用户指定目录

    bash
    useradd -d 指定目录 新的用户名

    创建一个新用户,并指定密码

    bash
    useradd -p password username

    创建一个新用户,并将其添加到其他组

    bash
    useradd -G group1,group2 username
  • 设置密码

    bash
    passwd 用户名
  • 删除用户

    bash
    userdel 用户名

    案例

    删除用户milan,但是要保留家目录

    bash
    userdel milan

    删除用户以及用户主目录,比如tom

    bash
    userdel -r milan
  • 查询用户信息

    bash
    id 用户名

    image-20240822154418126

  • 切换用户

    bash
    su -u 切换用户名

    从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。 当需要返回到原来用户时,使用exit/logout指令

  • 查看当前用户

    bash
    whoami
  • 添加用户组

    bash
    groupadd 用户名
  • 删除用户组

    bash
    groupdel 用户名
  • 修改用户的组

    bash
    usermod -g 用户组 用户名
  • /etc/passwd 文件

    用户(user)的配置文件,记录用户的各种信息 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

    image-20240822160428919

  • /etc/shadow 文件

    口令的配置文件 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时 间:失效时间:标志

    image-20240822160514185

  • /etc/group 文件

    组(group)的配置文件,记录Linux包含的组的信息 每行含义:组名:口令:组标识号:组内用户列表

    image-20240822160655794

  • 命令行: 即Linux终端(Terminal),是一种命令提示符页面。以纯“字符”的形式操作系统,可以使用各种字符化命令对系统发出操作指令。

  • 命令: 即Linux程序。一个命令就是一个Linux的程序。命令没有图形化页面,可以在命令行(终端中)提供字符化的反馈。

案例

ls -l /home/itheima,ls是命令本身,-是选项,/home/itheima是参数

意思是以列表的形式,显示/home/itheima目录内的内容

cp -r test1 test2, cp 是命令本身,-r是选项,test1和test2是参数

意思是复制文件夹test1 成为 test2

运行级别

运行级别说明:

  • 0:关机
  • 1:单用户【找回丢失密码】
  • 2:多用户状态没有网络服务
  • 3:多用户状态有网络服务
  • 4:系统未使用保留给用户
  • 5:图形界面
  • 6:系统重启

常用运行级别是3和5,也可以指定默认运行级别,后面演示

命令:init [0123456]应用案例 :通过init 来切换不同的运行级别,比如动 5-3 ,然后关机。

image-20240822162230542

bash
systemctl get-default

image-20240822162521093

image-20240822162403685

文件目录类

pwd

基本语法 :pwd

(功能描述:显示当前工作目录的绝对路径)

应用实例:案例:显示当前工作目录的绝对路径

ls

ls命令的作用是列出目录下的内容,语法细节如下:

bash
ls [-a -l -h] [linux路径]

-h 是可选的选项

-a 显示当前目录所有的文件和目录,包括隐藏的。

image-20240822163134460

-l 以列表的方式显示信息

image-20240822163153815

当不使用选项和参数,直接使用ls命令本体, 表示:以平铺形式, 列出当前工作目录下的内容

image-20240822103227639

还可以多个参数凭借在一块

image-20240822163230937

bash
ls -lh

image-20240827171235400

直接输入ls命令, 表示列出当前工作目录下的内容,当前工作目录是?

Linux系统的命令行终端,在启动的时候,默认会加载:当前登录用户的HOME目录作为当前工作目录, 所以ls命令列出的是HOME目录的内容

HOME目录: 每个Linux操作用户在Linux系统的个人账户目录, 路径在:/home/用户名

如,图中的Linux用户是itheima,其HOME目录是:/home/itheima。Windows系统和Linux系统,均设有用户的HOME目录,如图:

cd

基本语法: cd 参数, (功能描述:切换到指定目录)

理解:绝对路径和相对路径

cd ~ 或者cd :回到自己的家目录,此如 你是root ,cd ~ 到 cd .. 回到当前目录的上一级目录

mkdir

mkdir指令用于创建目录

基本语法 :

bash
mkdir [选项]  要创建的目录

常用选项 -p: 创建多级目录

image-20240822164502933

rm

rmdir指令删除空目录

基本语法

bash
rmdir [选项] 要删除的空目录

应用实例

案例:删除一个目录 /home/dog

使用细节 rmdir 删除的是空目录,如果目录下有内容时无法删除 提示:如果需要删除非空目录,需要使用

bash
rm -rf 要删除的目录

cp

cp 指令拷贝文件到指定目录

基本语法

bash
cp [选项] source dest

常用选项

-r:递归复制整个文件夹

应用实例

  • 案例1:将 /home/hello.txt 拷贝到/home/bbb 目录下
  • 案例2: 递归复制整个文件夹,举例,使用细节 强制覆盖不提示的方法:\cp

mv 指令

mv 移动文件与目录或重命名

基本语法

  • mv oldNameFile newNameFile (功能描述:重命名)
  • mv /temp/movefile /{argetFolder (功能描述:移动文件)

应用实例

  • 案例1: 将 /home/cat.txt 文件 重新命名为 pig.txt
  • 案例2:将 /home/pig.txt 文件 移动到 /root 目录下

cat

cat指令

cat 查看文件内容

基本语法

bash
cat [选项] 要查看的文件

常用选项

-n :显示行号

image-20240822171300110

应用实例

案例1:/etc/p rofile 文件内容,并显示行号

使用细节cat 只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more

管道命令 就是吧上一个命令的结果,给下一个命令处理

more

more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文件的内答。more指令中内置了若干快捷键(交互指令),详见操作说明。

image-20240822171851245

less

less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各 种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示 需要加载内容,对于是示大型文件具有较高的效率,

基本语法

bash
less 要查看的文件

案例: 采用less查看一个大文件文件/opt/杂文.txt

image-20240822172210226

echo指令

echo输出内容到控制台

基本语法

bash
echo [选项] [输出内容]

应用实例

  • 案例: 使用echo 指令输出环境变量
  • 案例: 使用echo 指令输出 hello,world!
bash
echo helloworld

head指令

head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容

基本语法

bash
head 文件 (功能描述:查看文件头10行内容)
head -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意行数)

应用实例

案例: 查看/etc/profile 的前面5行代码

tail

tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容。

基本语法

bash
1) tail 文件 (功能描述:查看文件尾10行内容)
2) tail -n 5 文件 (功能描述:查看文件尾5行内容,5可以是任意行数)
3) tail -f 文件 (功能描述:实时追踪该文档的所有更新 )

应用实例

  • 案例1: 査看/etc/profile 最后5行的代码

    image-20240822172950765

  • 案例2: 实时监控 mydate.txt,看看到文件有变化时,是否看到,实时的追加日期

    开2个窗口,一个负责监听,另一个负责写入。可以看到实时的变化

    image-20240822173114624

    image-20240822173122867

>命令 和>> 命令

>输出重定向和 >>追加

基本语法

  • ls -l > 文件

    功能描述:列表的内容写入文件a.txt中(覆盖写))

  • ls -al >>文件

    (功能描述:列表的内容追加到文件aa.txt的末尾)

  • cat 文件1 >文件2

    (功能描述:将文件1的内容覆盖到文件2)

  • echo "内容" >>文件

应用实例

  • 案例1: 将 /home 目录下的文件列表 写入到 /home/info.txt 中

    image-20240822173832136

  • 案例2: 将当前日历信息 追加到 /home/mycal 文件中

    追加了2种日历

    image-20240822173905798

    image-20240822174039399

ln指令

软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径

基本语法

bash
In -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)

应用实例

  • 案例1: 在/home 目录下创建一个软连接 myroot,连接到 /root 目录

    image-20240822175247186

  • 案例2: 删除软连接 myroot

history

查看已经执行过历史命令,也可以执行历史指令

基本语法

bash
history(功能描述:查看已经执行过历史命令 )

应用实例

  • 案例1: 显示所有的历史命令-history image-20240822180154093

  • 系例2: 显示最近使用过的10个指令。history 10 image-20240822180205706

  • 案例3:执行历史编号为5的指令!5

    image-20240822180408819

时间类型

date日期

date (功能描述:显示当前时间 )

  • date +%Y (显示当前年份)

    image-20240822182103372

  • date +%m(功能描述:显示当前月份)

    image-20240822182152251

  • date +%d (功能描述:显示当前是哪一天 )

    image-20240822182236670

  • date "+%Y-%m-%d %H:%M:%S" (功能描述:显示年月日时分秒

    image-20240822182250658

  • date -s 字符串时间

    设置系统当前时间,比如设置成 2020-11-11 11:22:22

应用实例

  • 案例1: 显示当前时间信息

  • 案例2: 显示当前时间年月日

  • 案例3: 显示当前时间年月日时分秒

cal指令

bash
cal [选项] (功能描述: 不加选项,显示本月日历)

image-20240822183024247

查找指令

find指令

find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端.。

基本语法

bash
find [搜索范围] [选项]

image-20240822183255042

  • 案例1: 按文件名:根据名称査找/home 目录下的hello.txt文件

  • 案例2:按拥有者:查找/opt目录下,用户名称为 nobody的文件

    bash
    find /opt -user nobody
  • 案例3:查找整个linux系统下大于200M的文件(+n 大于,-n小于,n等于。单位有k,M,G)

    bash
    find / -size 200M

locate指令

locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数 据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果 的准确度,管理员必须定期更新locate时刻

特别说明

由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库

bash
updatedb

应用实例

案例1: 请使用locate 指令快速定位 hello.txt 文件所在目录

bash
locate hello.txt

有些服务器没有,需要安装

bash
apt install locate

grep

grep指令和 管道符号

grep 过滤查找 ,管道符,“|” 表示将前一个命令的处理结果输出传递给后面的命令处理

基本语法

bash
grep [选项] 查找内容 源文件

image-20240827172045068

查找内容 源文件

案例1:请在hello.txt 文件中,查找'yes' 所在行,并且显示行号

bash
cat /home/hello.txt grep -n "yes"

写法2

bash
grep -n "yes" /home/hello.txt

压缩和解压

gzlp/gunzip 指令

gzip 用于压缩文件 , gunzip 用于解压的

基本语法

bash
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip 文件.gz (功能描述:解压缩文件命令)

应用实例

  • 案例1: gzip压缩 ,将/home下的 hello.txt文件进行压缩

    gzip /home/hello.txt

  • 案例2: gunzip压缩 ,将 /home下的 hello.txt.gz 文件进行解压缩

    gunzip /home/hello.txt.gz

zip/unzip 指令

zip 用于压缩文件,unzip 用于解压的,这个在项目打包发布中很有用的

基本语法

bash
zip [选项] XXX.zip 将要压缩的内容(功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)
  • zip常用选项 -r: 递归压缩,即压缩目录
  • unzip的常用选项 -d <目录>:指定解压后文件的存放目录

应用实例

  • 案例1:将 /home下的 所有文件进行压缩成 myhome.zip
  • 案例2:将 myhome.zip 解压到 /opt/tmp 目录下

tar

tar 指令 是打包指令,最后打包后的文件是 .tar.gz 的文件。 基本语法

bash
tar  [选项]  XXX.tar.gz  打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)

image-20240827175257405

应用实例

  • 案例1:压缩多个文件,将 /home/pig.txt和 /home/cat.txt 压缩成 pc.tar.gz

    bash
    touch /home/pig.txt
    touch /home/cat.txt
    tar -zcvf pc.tar.gz  /home/pig.txt /home/cat.txt
  • 案例2:将/home 的文件夹 压缩成 myhome.tar.gz

    bash
    tar -zcvf myhome.tar.gz  /home
  • 案例3:将 pc.tar.gz 解压到当前目录

    bash
    tar -zxvf pc.tar.gz
  • 案例4: 将myhome.tar.gz 解压到 /opt/tmp2目录下

    bash
    mkdir /opt/tmp2
    tar -zxvf pc.tar.gz -C /opt/tmp2

组管理和权限管理

在linux中的每个用户必须属于一个组,不能独立于组外。

在linux中每个文件都有,所有者、所在组、其它组的概念。

  1. 所有者
  2. 所在组
  3. 其它组
  4. 改变用户所在的组

一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者,

查看文件的所有者

指令 :

bash
ls -ahl
  • 应用实例-修改文件所有者

    指令:chown 用户名 文件名

  • 应用案例 要求:使用root 创建一个文件apple.txt,然后将其所有者修改成 tom

bash
groupadd 组名

创建一个组,,monster

bash
groupadd monster

创建一个用户 fox,并放入到 monster组中

bash
useradd -g monster fox
id fox

chgrp

修改文件所在的组

基本指令

bash
chgrp 组名 文件名

应用实例

使用root用户创建文件 orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组,修改到 fruit组。

  1. groupadd fruit
  2. touch orange.txt
  3. 看看当前这个文件属于哪个组 ->root组
  4. chgrp fruit orange.txt

image-20240827190757399

权限

0-9位说明

  • 第0位确定文件类型(d,-,l,c,d)

    • I是链接,相当于windows的快捷方式
    • d是目录,相当于windows的文件夹
    • c是字符设备文件,鼠标,键盘
    • b是块设备,比如硬盘
  • 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。--user

  • 第4-6位确定所属组(同用户组的)拥有该文件的权限,---Group

  • 第7-9位确定其他用户拥有该文件的权限 ---Other

文件

  • [r]代表可读(read):可以读取,查看在的目录有写权限,才能删除该文件.
  • [x]代表可执行(execute):可以被执行
  • [ w]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该上件所

目录

  • [r]代表可读(read):可以读取,ls查看目录内容
  • [w ]代表可写(write): 可以修改,对目录内创建+删除+重命名目录
  • [x]代表可执行(execute):可以进入该目录
bash
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc

第一个字符代表文件类型: - l d c b

其余字符每3个一组(rwx) 读(r) 写(w) 执行(x)

  • 第一组rwx:文件拥有者的权限是读、写和执行
  • 第二组rw-:与文件拥有者同一组的用户的权限是读、写但不能执行
  • 第三组r--:不与文件拥有者同组的其他用户的权限是读不能写和执行

可用数字表示为:r=4,w=2,x=1 因此rwx=4+2+1=7

  • 1 文件:硬连接数或 目录:子目录数
  • root 用户
  • root 组
  • 1213 文件大小(字节),如果是文件夹,显示 4096字节
  • Feb 2 09:39 最后修改日期
  • abc 文件名

chmod修改权限

通过chmod指令,可以修改文件或者目录的权限。

u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)

bash
chmod u=rwx,g=rx,o=x 文件/目录名
chmod o+w 文件/目录名
chmod a-x 文件/目录名

案例演示

  1. 给abc文件 的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限

    bash
    chmod u=rwx,g=rx,o=rx abc
  2. 给abc文件的所有者除去执行的权限,增加组写的权限

    bash
    chmod u-x,g+w abc
  3. 给abc文件的所有用户添加读的权限

    bash
    chmod a+r abc

chown

bash
chown newowner 文件/目录 改变所有者
chown newowner:newgroup 文件/目录 改变所有者和所在组
  • -R 如果是目录 则使其下所有子文件或目录递归生效

案例演示

  • 请将 /home/abc.txt 文件的所有者修改成 tom

    chown tom /home/abc.txt

  • 请将 /home/kkk 目录下所有的文件和目录的所有者都修改成tom

3. 进阶

4. 高阶

bash
imageUrl=registry.cn-shanghai.aliyuncs.com/jokerak/ai-back
echo "镜像网址---$imageUrl"
containerId=$(docker ps -a | grep -w ${imageUrl} | awk '{print $1}')
if [ "$containerId" != "" ]; then
          #停掉容器
            docker stop $containerId
              #删除容器
                docker rm $containerId
                  echo "成功删除容器"
          fi
          #查询镜像是否存在,存在则删除
          imageId=$(docker images | grep -w ${imageUrl} | awk '{print $3}')
          if [ "$imageId" != "" ]; then
                    #删除镜像
                      docker rmi -f $imageId
                        echo "成功删除镜像"
                fi
                # 登录Harbor私服
        docker login --username=fakerlove7 -p 1654697013wan registry.cn-shanghai.aliyuncs.com
        # 下载镜像
docker pull ${imageUrl}
# 启动容器
docker run -di -p 18001:8080 --name ai_back ${imageUrl}
echo "容器启动成功"
bash
# 查找名为 'python main.py' 的进程
pids=$(pgrep -f 'python main.py')

# 检查是否找到了进程
if [ -z "$pids" ]; then
    echo "没有找到运行中的 'python main.py' 进程。"
else
    # 如果找到了,遍历所有找到的PID并尝试终止它们
    for pid in $pids; do
        echo "正在终止进程ID: $pid"
        kill $pid
        # 检查命令执行状态
        if [ $? -eq 0 ]; then
            echo "进程ID $pid 已被终止。"
        else
            echo "终止进程ID $pid 失败。可能需要更高的权限或使用 'kill -9 $pid'。"
        fi
    done
fi

conda activate pytorch
cd /root/ai-gc
nohup python main.py &
echo "python程序运行成功"

【linux】图文并茂|彻底搞懂零拷贝(Zero-Copy)技术_linux零拷贝技术_那年的匆匆的博客-CSDN博客