1.开源 open source
2.Windows用户多–》图形化界面,点鼠标,入门容易 —》对用户友好
3.Linux更专业化
[root@localhost ~]# uname -r 查看Linux内核版本
3.10.0-327.el7.x86_64
cpu,内存,磁盘,网卡等硬件 =》躯壳
操作系统 =》软件 =》灵魂
操作系统内部最核心的软件 =》内核
1核相当于4G内存
Architectures:架构 --》硬件或者软件的架构
x86是cpu里的架构技术的名字—》intel和amd公司共同研发
386 486 586 686 --》x86
arm: 专门设计芯片–》孙正义–》日本人: 软银 --》阿里巴巴
英伟达 --》arm
一条指令可以处理64位的数据
一条指令可以处理32位的数据
1字节=8位
1 0
x86_64 --》intel和amd的cpu 而且64位
cpu的厂商:
intel 因特尔
AMD
华为
高通
英伟达
三星
ibm
联发科
小米
龙芯
等
镜像文件:系统文件,安装系统需要的一个盘,里面有很多安装系统需要的软件包
镜像文件是一条压缩文件,里面有很多的文件夹和文件
映像文件=镜像文件
装系统: 就是将镜像文件里的软件安装到电脑的磁盘,例如c盘
install 安装
按ctrl+alt键返回到真实机器
root 是linux系统里的超级用户–》皇上
1.对CPU进行调度管理
2.对内存进行分配管理
3对磁盘(文件系统)进行管理
4.对进程进行管理
5.对其他硬件进行管理
内核是对硬件进行管理的
[root@localhost ~]#
[登录用户@主机名 工作目录]
root 代表当前登录的用户名 root是Linux的超级用户
[] 符号,表示一个字符串,作为便捷分割
@ 符号,没有特殊作用,隔开用户名和主机名
localhost Linux系统主机默认名字
PS1是第1提示符,操作系统里预先定义了,直接使用
变量的类型
1.预定义变量 大写
2.自定义变量 一般用小写
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
PS1是变量名
[] 只是符号,没有特殊作用
\u 代表引用用户名 user
@ 只是符号,用来分割
\h 代表引用主机名 hostname
\W 代表引用你当前所在的工作目录–》working
$ 当我们的用户的uid是0的时候,就显示# 非0 就显示$
uid 是user的id 用户的编号
id card 身份证
uid 为0的用户是root
~代表当前所在的路径是家目录下
# 代表当前登录用户是root用户
$代表当前登录用户是普通用户
root用户的家目录是/root/
普通用户的家目录是/home/用户名/
1.不同的公司出品的系统
centos是redhat公司
Ubuntu是canonical公司出品
2.有少数不同的命令的差异
yum install vim --》centos
apt install vim --》Ubuntu
3.Ubuntu默认是禁用root用户的
所以Ubuntu很多命令前面都需要执行sudo命令
4.Ubuntu喜欢快速的更新系统,推出新版本,迭代更新非常快
共同点都是开源并且免费,都是属于linux系统
linux的目录结构
整个linux系统最顶层的文件夹 /
从/开始,一层一层往下走,绝对不会搞错的路径
跟你当前在哪里没有关系
单向的:从上而下
命令 + 路径
[xiaowei@web1 ~]$ cd /world/china/beijing
tab键可以补齐文件夹的名字
[xiaowei@web1 moscow]$ cd /world/ukraine/keiv/
[root@web1 ~]# mkdir /world/china/hunan
[root@web1 ~]# tree /world
/world
├── china
│ ├── beijing
│ │ └── tiananmen
│ └── hunan
├── russia
│ └── moscow
├── uk
│ └── london
├── ukraine
│ └── keiv
└── us
└── warshington
12 directories, 0 files
[root@web1 ~]#
不是以/开头的,以当前文件夹作为参照物,可进可退
双向
经典的相对路径的名词:
. 当前文件夹
… 上一级文件
[root@web1 china]# cd ../russia/moscow/
[root@web1 moscow]# cd ../../uk/london/
[root@web1 london]# mkdir ../../china/hubei
[root@web1 london]# tree /world
/world
├── china
│ ├── beijing
│ │ └── tiananmen
│ ├── hubei
│ └── hunan
├── russia
│ └── moscow
├── uk
│ └── london
├── ukraine
│ └── keiv
└── us
└── warshington
13 directories, 0 files
[root@web1 london]#
相对路径才是日常linux使用中最多的
绝对路径在编写shell脚本的时候,经常使用
1.进入/根目录,新建文件夹bigworld
[lier@root changsha]#cd /
[lier@root /]#mkdir bigworld
2.在bigworld目录下新建shaolin wudang hengshan taishan
[lier@root /]#cd bigworld
[lier@root bigworld]#mkdir shaolin wudang hengshan taishan
3.进入shaolin新建文件夹songshan
[lier@root bigworld]#cd shaolin
[lier@root shaolin]#mkdir zhangwuji
5.使用绝对路径在hengshan文件夹里新建linghuchong
[lier@root shaolin]#mkdir /bigworld/hengshan/linghuchong
6.使用相对路径进入taishan
[lier@root shaolin]#cd ../taishan
7.使用相对路径在wudang文件夹里新建zhangsanfeng
[lier@root taishan]#mkdir ../wudang/zhangsanfeng
8.使用绝对路径删除taishan
[lier@root taishan]#rm -rf /bigworld/taishan
9.使用tree命令查找/bigworld的结构
[lier@root bigworld]#tree /bigworld
/bigworld
├── hengshan
│ └── linghuchong
├── shaolin
│ ├── songshan
│ └── zhangwuji
└── wudang
├── zhangsanfeng
└── zhangwuji
8 directories, 0 files
vim 编辑器: 相当于windows的记事本
vi和vim的关系?
vim是vi的升级版程序
什么是脚本?
为什么文件是.sh结尾?可不可以是别的名字?
python文件以.py结尾
c文件以.c结尾
写脚本
脚本是一个程序文件,里面有很多的命令,用来完成某些功能
脚本scripts : 剧本,规定了流程的程序,用来完成某些事情--》告诉你的脚如果走路的,不要走错了
linux写的脚本—》shell脚本
[lier@root lianxi]#cat create_dir.sh
#!/bin/bash
#使用for循环新建100个目录,目录以sc开头
for i in {1..100}
do
mkdir -p /jinyong/sc$i
done
echo "查看新建文件夹"
echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
ls /jinyong
echo "脚本执行结束"
echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
执行脚本:
[lier@root lianxi]#bash create_dir.sh
查看新建文件夹
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sc1 sc18 sc27 sc36 sc45 sc54 sc63 sc72 sc81 sc90
sc10 sc19 sc28 sc37 sc46 sc55 sc64 sc73 sc82 sc91
sc100 sc2 sc29 sc38 sc47 sc56 sc65 sc74 sc83 sc92
sc11 sc20 sc3 sc39 sc48 sc57 sc66 sc75 sc84 sc93
sc12 sc21 sc30 sc4 sc49 sc58 sc67 sc76 sc85 sc94
sc13 sc22 sc31 sc40 sc5 sc59 sc68 sc77 sc86 sc95
sc14 sc23 sc32 sc41 sc50 sc6 sc69 sc78 sc87 sc96
sc15 sc24 sc33 sc42 sc51 sc60 sc7 sc79 sc88 sc97
sc16 sc25 sc34 sc43 sc52 sc61 sc70 sc8 sc89 sc98
sc17 sc26 sc35 sc44 sc53 sc62 sc71 sc80 sc9 sc99
脚本执行结束
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
脚本在执行的时候,从上而下一条一条命令的执行
如果有一条命令执行失败或者出错,默认情况下会继续执行后面的命令
除非你有流程控制语句
什么叫流程控制?flowing control
if
else
for
while
do
break
continue
case
申明我们的脚本使用/bin/bash这个解释器去执行
/bin/bash是一个程序,用来解释我们的代码
shell是linux里的命令解释器
bash是shell解释器里非常好用的
centos系统里默认是的shell解释器是bash
Ubuntu默认的shell解释器也是bash
shell是linux里命令行解释器大类的名字
bash是非常好用的shell解释器
shell:
bash,sh
linux中编写python文件
#!/usr/bin/python3
print("hello,world")
print("sanchaung")
执行python文件
[root@lb2 lianxi]# python3 hello.py 使用python3这个程序去运行我们的hello.py
hello,world
sanchaung
[root@lb2 lianxi]#
linux中编写c文件
#include
int main(){
printf("hello,world\n");
printf("sanchuang\n");
return 0;
}
[root@lb2 lianxi]# yum install gcc -y 安装gcc工具
gcc 是linux里的一个编译器,一个将c语言代码翻译成二进制代码的工具 --》按照某种编码进行翻译
[root@lb2 lianxi]# gcc -o hello hello.c 将hello.c编译成hello这个二进制文件,二进制文件可以直接运行
-o 指定输出的文件的名字 output file
查看输出文件hello
[root@lwq lianxi]# ./hello
hello,world!
sanchuang,teacher feng
[root@lwq lianxi]#
什么是解释器?
java --》JVM java虚拟机 --》将人能识别的语言转换为机器能识别的语言
为什么需要解释器?
python是解释型语言
java是解释型语言
Java 开发工具包(Java Developer’s Kit) jdk --》jvm
c是编译型语言:
缺点: 代码修改了需要重新编译
go:是编译型–》为了速度,参照了c语言
python,java,go都是使用c语言编写出来
我们输入的每一个命令都是一个程序
默认情况下,我们使用绝大多数的命令都是使用c语言
在终端里输入mkdir -p /lianxi/yaolifan这条命令后背发生了什么?讲的越细越好
操作系统的层面来讲解:
解释器
内存:内核到内存里分配空间
磁盘:读取文件,查找文件 --》文件系统
内核:创建进程的,进程的调度
进程的创建、cpu调度
内核 kernel 是linux系统内部最核心的软件,是一个程序。
作用:
1.对cpu进行调度管理
2.对内存进行分配
3.对进程进行管理
4.对磁盘进行管理
5.对网络进行管理
6.对其他硬件进行管理
shell解释器是人机交互的一个程序,将人输入的命令解释,然后告诉机器去执行,然后再将执行的效果反馈给人
人《—》解释器《–》机器
中间人 —》shell—》最好用的shell解释器是bash
shell解释器: centos ,Ubuntu,mac os --》bash
JavaScript 是动态类型语言,而 Java 是静态类型语言;
JavaScript 是弱类型的,Java 属于强类型;
JavaScript 的面向对象是基于原型的(prototype-based)实现的,Java 是基于类(class-based)的;
cat 默认会将整个文件里的内容加载到内存,读取里面的内容,慢慢加载文件里面的内容到内存里,会在短时间内消耗大量的内存 --》瞬间显示大量的内容
more和less 会慢慢读取内存,不会在短时间内消耗大量的内存空间 ---》分页显示
不要使用cat 去读取大文件,会消耗整个服务器大量的资源(内存资源)
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sclilin99/sbin:/root/bin
存放linux系统里命令存放的路径 --》命令藏宝图–》记录了命令存放在哪些文件夹里
PATH变量里都是文件夹的路径,中间使用冒号隔开
我们在linux系统里查找命令的时候,从PATH变量的最左边的文件夹里开始查找,例如从/usr/local/sbin里查找,如果找到就不往下查找了,如果没有找到就,继续往下找,以此类推,如果都没有找到就提醒没有找到这个命令
PATH变量是系统里预定义的变量,操作系统安装好就定义的变量
预定义变量–》环境变量–》全局变量 很多程序都可以使用,很多用户都可以使用的
生活中: 太阳 空气 水 树 公交车 等
[root@lb1 bin]# sg=dengchao **自定义变量**
[root@lb1 bin]# echo $sg
dengchao
[root@lb1 bin]#
PATH 路径
which和whereis 都是到PATH变量里去查找命令的–>不能查找非命令的文件
/usr --》unix system resource linux里的所有的程序就是系统的资源 --》linux是山寨的unix
linux is very like unix
bin --》binary 二进制 --》linux里的很多程序都是c语言编写–》编译成二进制程序,才可以运行
sbin --》super user binary --》有些命令必须是root用户才能使用的命令,就存放在sbin目录下–》御用(有权限的用户)
sbin目录下的命令是需要高级权限的用户使用的,普通用户使用不了–》root可以使用
方法:
1. stat 接文件
2.使用test命令判断
3. [ -f 文件名 ]
目的: 备份、还原
大文件超过4G的,切割工具: 将大文件切割成很多小文件,然后我们上传
备份的时候,能节约空间
网络传送的时候,能节约时间
windows里有哪些解压缩软件?
winrar: 老牌的压缩软件
http://www.winrar.com.cn/
7z
好压
2345压
等
打包压缩:
打包: 就是将很多文件放到一起,成一个文件
压缩: 减少占用磁盘空间的操作
zip windows和linux都支持
.rar文件在linux里默认是不能打开
linux里的所有的压缩文件,windows里的都能打开
windows里的压缩文件,在linux里不一定就可以打开
1.xftp: 在windows里安装
2.moba 在windows里安装
3.lrzsz 在windows里安装了xshell但是没有安装xftp,需要 在linux里安装lrzsz,但是速度没有使用xftp快
在工作中经常需要备份的东西: 日志文件会记录程序发生的事情
web服务器的日志记录哪些人从哪些地方访问了哪些网址–》大数据分析的
日志非常消耗磁盘空间
服务器上只是保存最近30天
nginx的日志,mysql的日志文件等
思考:京东,淘宝
1亿用户–》app和网站–》10个网址–》一条日志: 9910000000010
美团: 一天有多少外卖订单
int 类型的数据 32位 = 4个字节
1
2
10
都是4个字节
8个字节====》
https://www.yisu.com/zixun/459087.html --》那么当前Python程序使用的内存超过500MB以后,程序就会抛出MemoryError
OOM = out of memory
500M --》kill
是否超过500M呢?
c语言里 一个整型的数据 int a=1 --》a变量消耗多少的内存空间?
python里定义一个变量 a = 1 消耗多少的内存空间?
a = [1,2,3] 消耗多少的内存空间?
python2里
a = range(1,100000000) 消耗多少内存空间
linux系统默认运行一个进程可以使用多少内存空间?
假如我的内存空间是8G
https://www.yisu.com/zixun/459087.html
SRE是指Site Reliability Engineer (网站可靠性工程师)
一个SRE工程师基本上需要掌握很多知识:算法,数据结构,编程能力,网络编程,分布式系统,可扩展架构,故障排除。
sre --》运维开发
BAT baidu alibaba Tencent
阿里系
腾讯系
百度系
先建组,因为新建用户时如果没有需要的组会报错
[root@master sanchuang]# tail -f /var/log/secure
May 24 19:27:53 master useradd[21940]: new group: name=liqiang, GID=5008
May 24 19:27:53 master useradd[21940]: new user: name=liqiang, UID=5003, GID=5008, home=/home/liqiang, shell=/bin/bash
新建用户时如果指定的家目录不存在,执行命令时报错,通用会创建用户,但是用户没有家目录
[root@master ~]# useradd -d /hunan/gaolaozhuang bajie
useradd:无法创建目录 /hunan/gaolaozhuang # 没有/hunan这个文件夹
[root@master ~]# id bajie # 能查询到bajie的用户信息
uid=7789(bajie) gid=7789(bajie) 组=7789(bajie)
[root@master ~]# tail -2 /etc/passwd # passwd文件中显示有家目录,但是实际上没有
chenlin:x:7788:5007:sanchuang student:/home/yueyang:/sbin/nologin
bajie:x:7789:7789::/hunan/gaolaozhuang:/bin/bash
[root@master ~]# su - bajie
su: 警告:无法更改到 /hunan/gaolaozhuang 目录: 没有那个文件或目录
新建一个/hunna文件夹后,就可以登录bajie用户了,但是登录后的shell解释器不正常
[root@master ~]# mkdir /hunan/gaolaozhuang -p
[root@master ~]# su - bajie
上一次登录:二 5月 24 19:33:54 CST 2022pts/0 上
-bash-4.2$ exit
登出
[root@lier ~]# cat /etc/passwd|grep chenlin
chenlin:x:7788:2007:sanchuang student:/home/yueyang:/sbin/nologin
[root@lier ~]# su - chenlin
上一次登录:五 5月 6 11:34:09 CST 2022pts/4 上
This account is currently not available.
用户类型:
1.超级用户 root 0 --》皇上
2.程序用户 用来启动程序使用的,例如mysql这个用户 ssh,ftp,mail,halt --》公公,宫女 --》不能登录系统
给他做个手术 -s /sbin/nologin3.系统用户 linux系统里完成的功能的用户,例如:启动系统的程序 将军,大臣 --》不能登录系统,没有新建家目录的
1~999
4.普通用户 老百姓: 登录系统,启动程序
因为程序用户是用来启动程序使用的,不能登录,所以程序用户使用的shell解释器是/sbin/nologin
不能登录系统的解释器:
/sbin/nologin 不能登录系统的 --》推荐
/bin/false
/bin/sync
/sbin/shutdown
/sbin/halt
[root@master ~]# useradd -s /sbin/nologin weizx
[root@master ~]# su - weizx
This account is currently not available.
[root@master ~]#
因为linux中一切皆文件,执行命令相当于修改文件
所以将weizx的shell解释器改为/bin/bash解释器就可以正常登录了
[root@master ~]# vim /etc/passwd
weizx:x:7790:7790::/home/weizx:/bin/bash
[root@master ~]# su - weizx
上一次登录:二 5月 24 19:45:37 CST 2022pts/0 上
[weizx@master ~]$
/etc/ssh/sshd_config里有个配置进行了限制
#PermitEmptyPasswords no