linux精通
名称 | 链接 | 备注 |
---|---|---|
视频链接 | https://www.bilibili.com/video/BV1Sv411r7vd | |
1. 简介
当计算机拥有了操作系统,就相当于拥有了灵魂,操作系统可以:
- 调度CPU进行工作
- 调度内存进行工作
- 调度硬盘进行数据存储
- 调度网卡进行网络通讯
- 调度音响发出声音
- 调度打印机打印内容
1.1 简介
诞生
Linux创始人:林纳斯 托瓦兹
Linux 诞生于1991年,作者上大学期间。因为创始人在上大学期间经常需要浏览新闻和处理邮件,发现现有的操作系统不好用,于是他决心自己写一个保护模式下的操作系统,这就是Linux的原型,当时他21岁,后来经过全世界网友的支持,现在能够兼容多种硬件,成为最为流行的服务器操作系统之一。
什么是内核?
linux系统的组成如下:
linux系统内核
内核提供系统最核心的功能,如:调度CPU、调度内存、调度文件系统、调度网络通讯、调度IO等。
系统级应用程序
系统级应用程序,可以理解为出厂自带程序,可供用户快速上手操作系统,如:文件管理器、任务管理器、图片查看、音乐播放等。
可以看出,内核是Linux操作系统最核心的所在,系统级应用程序只是锦上添花 Linux内核是免费开源的,任何人都可以下载内核源码并查看且修改。 可以通过:https://www.kernel.org 去下载Linux内核
什么是发行版?
内核是免费、开源的,这也就代表了:
任何人都可以获得并修改内核,并且自行集成系统级程序。
提供了内核+系统级程序的完整封装,称之为Linux发行版
1.2 安装
2. 入门
通用格式
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! 强制退出,不保存
三种模式的切换
快捷键提示
- 拷贝当前行
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
- 更多的看整理的文档
关机重启
参数 | 作用 | |
---|---|---|
shutdown | -h now | 立该进行关机 |
shutdown | -h 1 | "hello,1 分钟后会关机了" |
shutdown | -r now | 现在重新启动计算机 |
halt | 关机,作用和上面一样. | |
reboot | 现在重新启动计算机 | |
sync | 把内存的数据同步到磁盘、 | |
注意细节
- 不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
- 目前的 shutdown/reboot/halt 等命令均已经在关机前进行了 sync ,老韩提醒: 小心驶得万年船
用户管理
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统 管理员申请一个账号,然后以这个账号的身份进入系统
添加用户
bashuseradd 用户名
应用案例
案例1: 添加一个用户 milan
细节说明
当创建用户成功后,会自动的创建和用户同名的家目录
bashuseradd -m 用户名
给新创建的用户指定目录
bashuseradd -d 指定目录 新的用户名
创建一个新用户,并指定密码
bashuseradd -p password username
创建一个新用户,并将其添加到其他组
bashuseradd -G group1,group2 username
设置密码
bashpasswd 用户名
删除用户
bashuserdel 用户名
案例
删除用户milan,但是要保留家目录
bashuserdel milan
删除用户以及用户主目录,比如tom
bashuserdel -r milan
查询用户信息
bashid 用户名
切换用户
bashsu -u 切换用户名
从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。 当需要返回到原来用户时,使用exit/logout指令
查看当前用户
bashwhoami
添加用户组
bashgroupadd 用户名
删除用户组
bashgroupdel 用户名
修改用户的组
bashusermod -g 用户组 用户名
/etc/passwd
文件用户(user)的配置文件,记录用户的各种信息 每行的含义:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/shadow
文件口令的配置文件 每行的含义:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时 间:失效时间:标志
/etc/group
文件组(group)的配置文件,记录Linux包含的组的信息 每行含义:组名:口令:组标识号:组内用户列表
命令行: 即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 ,然后关机。
systemctl get-default
文件目录类
pwd
基本语法 :pwd
(功能描述:显示当前工作目录的绝对路径)
应用实例:案例:显示当前工作目录的绝对路径
ls
ls命令的作用是列出目录下的内容,语法细节如下:
ls [-a -l -h] [linux路径]
-h 是可选的选项
-a 显示当前目录所有的文件和目录,包括隐藏的。
-l 以列表的方式显示信息
当不使用选项和参数,直接使用ls命令本体, 表示:以平铺形式, 列出当前工作目录下的内容
还可以多个参数凭借在一块
ls -lh
直接输入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指令用于创建目录
基本语法 :
mkdir [选项] 要创建的目录
常用选项 -p: 创建多级目录
rm
rmdir指令删除空目录
基本语法
rmdir [选项] 要删除的空目录
应用实例
案例:删除一个目录 /home/dog
使用细节 rmdir 删除的是空目录,如果目录下有内容时无法删除 提示:如果需要删除非空目录,需要使用
rm -rf 要删除的目录
cp
cp 指令拷贝文件到指定目录
基本语法
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 查看文件内容
基本语法
cat [选项] 要查看的文件
常用选项
-n :显示行号
应用实例
案例1:/etc/p rofile 文件内容,并显示行号
使用细节cat 只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more
管道命令 就是吧上一个命令的结果,给下一个命令处理
more
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文件的内答。more指令中内置了若干快捷键(交互指令),详见操作说明。
less
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各 种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示 需要加载内容,对于是示大型文件具有较高的效率,
基本语法
less 要查看的文件
案例: 采用less查看一个大文件文件/opt/杂文.txt
echo指令
echo输出内容到控制台
基本语法
echo [选项] [输出内容]
应用实例
- 案例: 使用echo 指令输出环境变量
- 案例: 使用echo 指令输出 hello,world!
echo helloworld
head指令
head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
基本语法
head 文件 (功能描述:查看文件头10行内容)
head -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意行数)
应用实例
案例: 查看/etc/profile 的前面5行代码
tail
tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容。
基本语法
1) tail 文件 (功能描述:查看文件尾10行内容)
2) tail -n 5 文件 (功能描述:查看文件尾5行内容,5可以是任意行数)
3) tail -f 文件 (功能描述:实时追踪该文档的所有更新 )
应用实例
案例1: 査看/etc/profile 最后5行的代码
案例2: 实时监控 mydate.txt,看看到文件有变化时,是否看到,实时的追加日期
开2个窗口,一个负责监听,另一个负责写入。可以看到实时的变化
>命令 和>> 命令
>输出重定向和 >>追加
基本语法
ls -l > 文件
功能描述:列表的内容写入文件a.txt中(覆盖写))
ls -al >>文件
(功能描述:列表的内容追加到文件aa.txt的末尾)
cat 文件1 >文件2
(功能描述:将文件1的内容覆盖到文件2)
echo "内容" >>文件
应用实例
案例1: 将 /home 目录下的文件列表 写入到 /home/info.txt 中
案例2: 将当前日历信息 追加到 /home/mycal 文件中
追加了2种日历
ln指令
软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径
基本语法
In -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)
应用实例
案例1: 在/home 目录下创建一个软连接 myroot,连接到 /root 目录
案例2: 删除软连接 myroot
history
查看已经执行过历史命令,也可以执行历史指令
基本语法
history(功能描述:查看已经执行过历史命令 )
应用实例
案例1: 显示所有的历史命令-history
系例2: 显示最近使用过的10个指令。history 10
案例3:执行历史编号为5的指令
!5
时间类型
date日期
date (功能描述:显示当前时间 )
date +%Y
(显示当前年份)date +%m
(功能描述:显示当前月份)date +%d
(功能描述:显示当前是哪一天 )date "+%Y-%m-%d %H:%M:%S"
(功能描述:显示年月日时分秒date -s 字符串时间
设置系统当前时间,比如设置成 2020-11-11 11:22:22
应用实例
案例1: 显示当前时间信息
案例2: 显示当前时间年月日
案例3: 显示当前时间年月日时分秒
cal指令
cal [选项] (功能描述: 不加选项,显示本月日历)
查找指令
find指令
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端.。
基本语法
find [搜索范围] [选项]
案例1: 按文件名:根据名称査找/home 目录下的hello.txt文件
案例2:按拥有者:查找/opt目录下,用户名称为 nobody的文件
bashfind /opt -user nobody
案例3:查找整个linux系统下大于200M的文件(+n 大于,-n小于,n等于。单位有k,M,G)
bashfind / -size 200M
locate指令
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数 据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果 的准确度,管理员必须定期更新locate时刻
特别说明
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
updatedb
应用实例
案例1: 请使用locate 指令快速定位 hello.txt 文件所在目录
locate hello.txt
有些服务器没有,需要安装
apt install locate
grep
grep指令和 管道符号
grep 过滤查找 ,管道符,“|” 表示将前一个命令的处理结果输出传递给后面的命令处理
基本语法
grep [选项] 查找内容 源文件
查找内容 源文件
案例1:请在hello.txt 文件中,查找'yes' 所在行,并且显示行号
cat /home/hello.txt grep -n "yes"
写法2
grep -n "yes" /home/hello.txt
压缩和解压
gzlp/gunzip 指令
gzip 用于压缩文件 , gunzip 用于解压的
基本语法
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 用于解压的,这个在项目打包发布中很有用的
基本语法
zip [选项] XXX.zip 将要压缩的内容(功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)
- zip常用选项 -r: 递归压缩,即压缩目录
- unzip的常用选项 -d <目录>:指定解压后文件的存放目录
应用实例
- 案例1:将 /home下的 所有文件进行压缩成 myhome.zip
- 案例2:将 myhome.zip 解压到 /opt/tmp 目录下
tar
tar 指令 是打包指令,最后打包后的文件是 .tar.gz 的文件。 基本语法
tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
应用实例
案例1:压缩多个文件,将 /home/pig.txt和 /home/cat.txt 压缩成 pc.tar.gz
bashtouch /home/pig.txt touch /home/cat.txt tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
案例2:将/home 的文件夹 压缩成 myhome.tar.gz
bashtar -zcvf myhome.tar.gz /home
案例3:将 pc.tar.gz 解压到当前目录
bashtar -zxvf pc.tar.gz
案例4: 将myhome.tar.gz 解压到 /opt/tmp2目录下
bashmkdir /opt/tmp2 tar -zxvf pc.tar.gz -C /opt/tmp2
组管理和权限管理
在linux中的每个用户必须属于一个组,不能独立于组外。
在linux中每个文件都有,所有者、所在组、其它组的概念。
- 所有者
- 所在组
- 其它组
- 改变用户所在的组
一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者,
查看文件的所有者
指令 :
ls -ahl
应用实例-修改文件所有者
指令:chown 用户名 文件名
应用案例 要求:使用root 创建一个文件apple.txt,然后将其所有者修改成 tom
groupadd 组名
创建一个组,,monster
groupadd monster
创建一个用户 fox,并放入到 monster组中
useradd -g monster fox
id fox
chgrp
修改文件所在的组
基本指令
chgrp 组名 文件名
应用实例
使用root用户创建文件 orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组,修改到 fruit组。
- groupadd fruit
- touch orange.txt
- 看看当前这个文件属于哪个组 ->root组
- chgrp fruit orange.txt
权限
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):可以进入该目录
-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的总和)
chmod u=rwx,g=rx,o=x 文件/目录名
chmod o+w 文件/目录名
chmod a-x 文件/目录名
案例演示
给abc文件 的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限
bashchmod u=rwx,g=rx,o=rx abc
给abc文件的所有者除去执行的权限,增加组写的权限
bashchmod u-x,g+w abc
给abc文件的所有用户添加读的权限
bashchmod a+r abc
chown
chown newowner 文件/目录 改变所有者
chown newowner:newgroup 文件/目录 改变所有者和所在组
- -R 如果是目录 则使其下所有子文件或目录递归生效
案例演示
请将 /home/abc.txt 文件的所有者修改成 tom
chown tom /home/abc.txt
请将 /home/kkk 目录下所有的文件和目录的所有者都修改成tom
3. 进阶
4. 高阶
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 "容器启动成功"
# 查找名为 '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程序运行成功"