linux基础
记录学习linux+shell的一些知识.


Linux概述
操作系统是用来操作计算机底层硬件的。Linux是操作系统



macOS起源于
- BSD:商业发行版本的UNIX其中之一
- 今天还依然盛行,其他版本比较依赖性能强大的主机
- 这个是伯克利分校开发出来的一个版本,在此基础上衍生了FreeBSD,来自世界各地开发者维护。1993年12月发行
- FreeBSD协议可以自由开发并且随意修改不限制,在此基础上诞生了达尔文系统,这是苹果macOS前身,可以说就是给予freeBSD诞生的
- IBM:IBM的商业发行版本
- HP:惠普

- Minix,借鉴了unix思想重新实现的开源版本

linux就是在此基础上诞生的,因为Minix有很多缺陷,没有网络连接功能等。1991年完成linux基础版本0.01版本,这个基础版本是内核
- git也是linus写的。因为之前他们用的bit keeper收费了
- 2008年github上线
上世纪89、90年代,unix不是开源的有版权
GNU/Linux

- 理查德·马修·斯托曼,黑客,发起的自由软件运动,软件不应该完全收费,应该开源
- 1985年发起了一个GUN计划,创造一个自由免费的系统,兼容unix但是不是unix
- GNU’s Not Unix!
- linux发布将这个加入到了GNU计划中,GNU缺少内核正好linux发布填补了空白
- linux内核
- 硬件接口层
- 内存管理,进程管理,驱动程序,文件,网络
- linux系统
- 指GNU/linux,包含应用层,shell等
可以基于linux kenel在此基础上添加不同的外围应用,就是一个发行版本。我们一般讲安装linux系统就是指GUN/linux,因为要包含shell等
发行版本

Redhat 系列
商业收费版本
- red hat系列,包含
- RHEL(red hat enterprise linux)收费
免费版本社区维护
- red hat系列
- centos 基于RHEL收费版本,重构的免费版本,除去商标信息,和企业版本基本一致。要等企业版发布
- fedoro实验版本
debian 系列
最遵循GNU规范的
- ubuntu系统,基于的debian发展出来的,有自己发展的桌面版本,外观像macos
- linux mint,基于ubuntu变化的版本,外观像window,也是window的早期版本,windowxp
SUSE
俄罗斯开发的,欧洲使用的多。国内少
国内的-红旗、deepin等
也是基于debian开发
Android
不属于发行版本的,安卓、鸿蒙等但是也是linux内核
linux和window对比

centos
- 包管理工具,yum
- ubuntu包管理工具 apt
- 24年6月停止社区版本维护,有一个centos stream版本,但是不是基于企业版本重构的,不稳定。还有一个centos创始人不满意做法,自己创建了一个rocky centos开源,针对centos企业版本
VMware使用安装系统
- windows系统有WSL,windows subsystem for linux
系统相关知识


- cpu处理器
- 数量由电脑主板决定,主板有几个插槽就有几个cpu。一般个人电脑都是一个,多个可能都是服务器
- 内核:
- 当前每一个CPU,独立出来的内部处理核心,提升性能的关键。一般讲的双核,四核等就是指CPU核心数

- 逻辑处理器
- 每一个cpu可以有多个内核,而每一个内核如果使用了HT超线程技术可以扩展有两个逻辑内核,相当于看起来有一个内核,但是用起来相当于两个
- 比如说的2核4线程,4核8线程指的就是内核数量和逻辑内核数量,每一个逻辑核心都可以被认为是逻辑核心

- 桥接网络
- 虚拟机和主机等价存在,相当于虚拟机在局域网内,把主机当成一个桥,看到其他人电脑一样
- NAT转换
- 完全依托于主机网络,主机是虚拟路由器,表现出来是和主机一个ip,NAT用的会多一点


- 普通用户是$,
- root用户是#号
- ~号表示的是当前这个用户的主文件夹也就是/home/xxxx这个目录
文件系统

linux系统,一切皆文件
有箭头的表示是快捷方式,实际目录在其他地方
文件系统和挂载点


- linux系统是斜杠 /usr,window是反斜杠\,window会有问题在底层ASCII编码时候,所以有时候看到路径会是双斜杠,因为要转义
目录结构
目录结构从unix那里来的, 根目录
- bin 目录
- binary 二进制目录,存放可以直接执行的命令,比如cd,ls,grep,cp等命令

- 这里是一个快捷方式,在usr/bin目录下还有一个一样的,跟目录的就是指向usr/bin下面的
- sbin 目录
- system binary 系统级别的二进制目录
- 这里是一个快捷方式,在usr/sbin目录下还有一个一样的
- lib 目录
- library 库目录,类似window的dll文件,软连接到usr/lib目录
- 类似window system32目 录
- lib64 目录
- 特殊的库目录,类似window system目录,软连接到usr/lib64目录
- **usr **目录
- unix software resource,存放了用户应用程序,数据,库文件,需要的文件等
- usr/local
- 用户本地应用程序相关的,针对用户的,有一些bin会软连接到usr/local/binm 目录下
- boot
- 系统引导加载程序,引导启动的核心文件
- dev
- device 设备目录,代表系统中的硬件设备,比如cpu,磁盘,打印机等
- etc
- etcetera(附加物)缩写
- 系统管理所需要的配置文件,系统配置,网络配置,装了一个数据库的配置等等
- home
- linux中,每一个用户都有一个自己的主目录,一般登录进来默认就是在home目录下,目录是 home/用户1/,home/用户2/

- root
- 系统超级管理员的主目录
- opt
- 常用目录,optional缩写,可选目录。给装第三方软件用的,一般三方库可以装到这里
- meida
- 媒体目录,识别一些可移动媒体设备,比如U盘,光驱等,数据会在这里。可移动媒体设备的挂载点
- 挂载点
- mnt
- 挂载目录,和media差不多,mount缩写
- 挂载点
- proc
- 虚拟目录,process的意思,进程目录,存放进程信息等
- run目录
- 运行目录,存放系统运行以来的所有时时信息,重启就没了
- srv
- service,和系统服务相关东西
- sys
- 系统硬件信息相关的文件
- tmp
- temporary 临时目录,可以删除
- var
- variable,可变目录,一般放日志log等
VIM
- VI编辑器,是unix系统中或者类Unix系统中通用编辑器
- VIM是VI发展出来更强大的,比如可以用字体颜色辨别语法是否正确等(文本颜色不一样),VIM和VI完全兼容
linux VIM中显示代码行数
1 | |


网络配置和系统管理操作
- ping 命令
- window和linux通用,用来检测两台主机之间是否可以互相发送数据
- 比如
ping www.baidu.com,ping 192.16.8.14可以ping主机或者ip
- 局域网ip,外网ip
- 外网internet-路由器-局域网

- 为什么有的是192.168,有的是172.16这些?IP分为3类:
- 1个A类地址段 10.0.0.0/8(10.0.0.0—10.255.255.255);适用用大型网络,在跨省或跨市的大规模城域网中会见到,比如国家或省的跨城域网地址段。
- 16个B类地址段172.16.0.0/12(172.16.0.0—172.31.255.255);适用于中型网络,在地市级或区县级的中型城域网中比较常见,比如中考考点网络或城域网监控网络,或者大中等校园局域网。
- 256个C类地址段 192.168.0.0/16(192.168.0.0—192.168.255.255);适用于小型网络,在小规模的园区或办公楼局域网,小规模学校局域网等组网中比较常见。
查看当前电脑网络信息:ifconfig
- 实际测试linux执行ifconfig报错,执行ip addr或者ip a
同一网段,需要ip前三个一样,比如192.168.1.xxx

- DHCP服务
- 可以自动为网络中的主机分配ip地址
桥接网络
虚拟机上网,可以用宿主机通过虚拟网桥(一个网络扩展设备物理上的)上网。如果有多个虚拟机,需要通过网桥-交换机-vm机
这种上网方式,PC和VM虚拟机都是平等的方式,相当于局域网的其他电脑一样,虚拟机地址也一样会占用IP地址

问题是如果是C类地址,子网掩码是255.255.255.0,意味着这一个局域网内最多存在1-254个地址,所以桥接实际情况用的会比较少
NAT模式(netword addres translation)
网络地址转换缩写。
由虚拟机创建NAT服务器做网络地址转换,再有DHCP服务器做动态分配ip。安全性更好,我可以访问外网,外网不能访问我,专用网络
就是构建了一个虚拟机的子网
从网卡上分配出来虚拟一个路由器,给每一个虚拟机分配ip。相当于internet-路由器-局域网这个路径一样,不过是PC-路由器-vm虚拟机。所以虚拟机虚拟出来了另外一个局域网。但是此时宿主机是没办法访问虚拟机网络的,因为就象外网没办法访问搭配局域网内一样,所以虚拟机会创建一个VMnet8,从另外一个网卡上直接连接到虚拟机路由器中,可以让主机和虚拟机在同一个局域网内,这是为了通信专门虚拟出来的网卡


为什么看到的主机ip和虚拟机ip不在同一个网段?因为用的是NAT模式,主机在局域网内而且是B类地址是172.16开头,虚拟机在局域网的局域网内是C类地址192.168开头,两个不同的局域网,此时主机没办法访问虚拟机,所以又虚拟了一个网卡出来,连接到虚拟机出来路由器,让宿主机和虚拟机构建了一个子网,都在虚拟机创局域网络中。
仅主机模式
虚拟机无法访问外部网络,宿主机才可以
相当于去掉了虚拟机的路由器,所以没办法访问外网了,只有宿主机可以访问虚拟机

其他
网关
主机虚拟地址是192.168.111.1,虚拟机NAT网关是192.168.111.2



虚拟机修改为静态ip
有些情况不想让电脑重启以后自动更换ip,还需要查询自己电脑当前ip,所以需要修改为静态的,window直接修改vmwarenet8的网络信息。

https://www.freecodecamp.org/chinese/news/setting-a-static-ip-in-ubuntu-linux-ip-address-tutorial/
配置相关的都在/etc 目录下:
- 通过ip a命令找到虚拟机的虚拟网卡,其他地址本地回环地址不用管
inet这一项cd /etc/netplan/ls- 此时会看到一个yaml文件,vim编辑。ubuntu用Netplan管理网络

- 将
<font style="color:rgb(10, 191, 91);background-color:rgb(243, 245, 249);">dhcp4: true</font>修改为<font style="color:rgb(10, 191, 91);background-color:rgb(243, 245, 249);">dhcp4: false</font>,然后添加<font style="color:rgb(10, 191, 91);background-color:rgb(243, 245, 249);">addresses</font>和<font style="color:rgb(10, 191, 91);background-color:rgb(243, 245, 249);">gateway4</font>行来配置静态IP地址和默认网关。假设您的网络网段为<font style="color:rgb(10, 191, 91);background-color:rgb(243, 245, 249);">192.168.1.0/24</font>,要将Ubuntu 22.04配置为静态IP地址<font style="color:rgb(10, 191, 91);background-color:rgb(243, 245, 249);">192.168.1.100</font>,默认网关为<font style="color:rgb(10, 191, 91);background-color:rgb(243, 245, 249);">192.168.1.1</font>,则配置部分应如下所示:
1 | |
原来是15,修改为100

⚠️**补充:gateway4设置已经被弃用,使用route来配置**

配置如下
1 | |
- 重启配置生效
1 | |
修改以后虚拟机可能会失去连接无法访问。因为地址变了
教程中是centos,路径不一样,这个为准.
https://linux.cn/article-15181-1.html
问题排查
自己查ubuntu对应的

修改主机名
修改主机名称格式为xxx1,xxx2等,后面的数字就是局域网内ip主机的代号。修改了方便维护
- hostname
- 查看当前主机名称
修改方式一,需要重启
1 | |
修改方式二, 立即生效的

1 | |
hosts文件
hosts也是配置文件,在etc目录下,修改虚拟机和主机的这个文件是为了方便虚拟机之间互相查找
1 | |

登录SSH 服务器
1 | |
系统管理
服务管理

- 正在执行的就是进程
- 执行完在内存常驻的,就是服务,生命周期很长
简而言之,服务就是进程,常驻的进程叫做服务
系统服务:在系统启动就运行起来,而且是必不可少的。
守护进程:执行系统服务的进程就是叫做守护进程(daemon)如果linux系统中带着一个d结尾的文件,就表示服务是守护进程
守护进程和系统服务关系:系统服务要运行,是需要守护进程来管理操作的,系统服务和守护进程可以认为是一回事
https://blog.csdn.net/ctrigger/article/details/131368266
service服务管理
service
1 | |
查看系统服务
1 | |

这里列举出来的系统服务不全,看systemctl部分的列举方法
systemctl(重点掌握)
重点掌握systemctl使用,ubuntu和centos 7以上
1 | |

targte结尾表示一组服务的集合
查看网络状态

1 | |
系统运行级别
级别

initd服务是第一个启动的用户服务,init服务会根据当前系统的运行级别,来启动对应的服务。
级别1类似window的安全模式
级别不同,启动的服务不同。由于级别常用的就是3和5,所以做了更改,修改为2个级别
- multi-user.targer 等价于原先运行级别3(多用户有网,无图形界面)
- graphical.target 等价于原先运行级别5(多用户有网,有图形界面)
查看运行级别
1 | |

修改运行级别
1 | |
图形化界面需要安装
1 | |
更简单的切换运行级别
1 | |
配置服务开机启动&关闭防火墙
配置开机自启动/禁用

比如这个网络服务,preset表示原来的设置,present前面的表示现在的设置是enable,如果要禁止服务开机启动,执行
1 | |
查看服务启动信息
1 | |

- static:不确定是不是启动的
- enabled:开机启动
- disabled:开机不启动
防火墙操作
查看状态
Uncomplicated Firewall
1 | |

enabled表示开机自启动,present表示预设是开机自动启动
关闭
1 | |

关闭开机自启动

开启
1 | |
关机重启

1 | |
为什么默认会设置1分钟以后会关机?因为要同步数据到硬盘,即使立即关机,也要同步数据以后才会关机
- linux优化操作是预先读取,延迟写入。比如vim修改了一个文件,保存不是直接存储到硬盘,而是存储到buffer缓冲区,等缓冲区满了以后,然后再写入硬盘,因为直接写入硬盘效率太低
这些命令可以直接输入
- sync
- 同步数据
- halt
- 类似休眠
- poweroff
- 关机
- reboot
- 重启
- shutdown
- 关机

shell命令整体介绍


shell是链接linux内核的桥梁。在 bin/sh 目录下,就是命令解释器入口
Shell脚本的基础是Bash(Bourne-Again Shell),原来Unix系统叫Bourne Shell,linux在此基础上改进了叫做Bourne-Again Shell,也就是简写Bash,由于ubuntu是基于debian来的,所以叫做dash


man命令-说明文档
man是manual的简写,如果对什么命令不熟悉不明白,可以直接输入man xxx命令然后就会打开帮助文档
1 | |
关于ls命令的详细用法

如果是英文修改为中文
1 | |
有些可能没解释

为什么有些命令没有解释?涉及到内置命令和外部命令
内置命令&外部命令

内部命令直接和shell融为一体
判断是内置还是外部
使用type
1 | |

help帮助信息
man命令内容太多,有简洁版本的命令,help只能用在内置命令
1 | |
如果外部命令要使用help,用命令 --help
1 | |
- help cd
- help ls (ls是外部命令,不能用help)

- ls –help
一般最长用的就是man和–help,记住这两个
常用快捷键

彻底清除屏幕用reset
目录文件类
目录操作
绝对路径:从根目录到当前工作目录
pwd 工作区目录
- 显示当前工作目录的绝对路径,print working directory 打印工作目录
- 
- -P(大写)
* 如果有时候是软链接进来的,要显示链接原始路径,需要加一个参数
* pwd -P (显示软链接的原始路径真实路径,打印出真正的路径,而不是软链接路径)
cd 切换目录
- 切换目录 change directory
- 
- cd xxx
- cd -P xxxxx
* 进入到实际路径,否则如果有软链接会进入软链接的路径
cd - 命令可以用在两个目录相隔比较远的时候来快速切换
ls 列出目录内容
ubuntu按一个l也行,或者la,或者ll

- 列出当前目录。常用的ls -a,ls -l
* ls -a 列出全部文件包括隐藏的

+ .和..都是命令,和cd配合使用的
+ 以.开头的都是隐藏文件或者文件夹,一般ls看不到
* ls -l 列出文件的详细信息,等同ll

- drwxr开头是一个d表示文件夹
- -rw-r表示是一个文件
+ ll 相当于ls -l
+ ls -al 列出所有文件包括隐藏文件的详细信息
* ls -lh
tree 树状列出文件目录
1 | |

文件夹操作
mkdir 创建文件夹
- **make directory** 创建文件夹
- **mkdir xxx**文件名 xxxx文件名
* 可以创建一个也可以同时创建多个,但是不能直接创建多级目录,比如mkdir a/b/c 会报错。可以mkdir a a/b a/b/c这样创建层级,或者mkdir -p a/b/c等同mkdir a a/b a/b/c
- **mkdir /xxxx** 创建到绝对路径
- **mkdir -p a/b/c **会自动创建几个层级目录,没有的话会自动创建不会报错

rmdir 删除文件夹
- 删除文件夹,和mkdir类似
* rmdir 文件夹a 文件夹b ...
* rmdir -p d/e/f
+ 表示删除d文件夹下面所有的,不能直接写rmdir -p d,子目录有文件无法直接删除

文件操作
touch 创建空文件 & vim 创建文件
- touch xxxx文件名称
- touch /xxxx 绝对路径
- vim xxxx文件名(需要保存退出:wq,不保存会消失)
cp 复制文件或者目录
copy
- cp 原始文件/文件夹 目标文件/文件夹
* cp test.config /home/ubuntu/xxxx文件名(移动并且重命名了) 或者 cp test.config /home/ubuntu/ 拷贝到目录下
* 可以把文件移动并且直接重新命名
- 选项
* -i 参数可以在覆盖文件时候有一个提醒

* -r 拷贝文件夹时候,需要递归完全拷贝子目录下的时候需要这个参数

linux自带的别名
rm 删除文件或目录
- rm 选项 文件/文件夹

删除文件
- rm 选项 文件,比如 rm -f a.txt
- 选项 -f 强制删除而不用确认
删除目录
- rm 选项 文件,比如 rm -r tmp/
- 选项 -r 递归删除目录中所有

教程中是需要确认的删除,ubuntu没有,如果有每次确认,不确认删除就是:
1 | |

mv 移动文件或者目录&重命名

- mv 原始文件名 新文件名:可以重新命名文件
- mv /文件目录或者文件 /目标文件目录
- 移动文件到目录
mv b.txt test/
- 移动目录到目录
mv hahadir/ test/
- 移动目录下的所有文件(不包含文件夹)到目录下
mv hahadir/* test
- 移动文件到目录
cat 查看文件内容
cat命令:catch的意思,比较小的文件可以用这个文件查看

- cat 选项 文件名
- -n 显示行数

less(看日志用)和more查看文件
more跳过,感觉不实用,还用vim。
稍微看一下less,可能会用来查看几十兆的日志,打开效率会比较高
less file


- 按q 退出
echo 输出内容到控制台,查看环境变量


ubuntu系统。输入echo $ 然后在按两下tab,cenos需要回车一下

- ls -l > a.txt
- ls -l >> a.txt
- cat和echo类似
- cat a.txt > b.txt、cat a.txt >> b.txt
- echo “xxxxx” > a.txt 、echo “xxxx” >> a.txt

> 输出重定向和 >> 追加
配合echo可以直接写入文件。
- ‘>’ 一个大于号表示覆盖文件内容
- ‘>>’ 两个大于号表示追加内容到文件
- 语法:
xxxx命令 > 文件覆盖写法xxxx命令 >> 文件追加写法

head 显示文件头部内容

- head xxxx文件
- 默认为头10行
- head -n 100 xxxx 查看头100行内容

tail 显示文件尾部内容(常用,追踪日志实时信息)
- tail xxxx文件:默认为查看底部10行内容
- -n 参数
- tail -n 100 xxxx 查看头尾部100行内容
- -f 参数
- follw的意思,实时追踪这个文件的输出,实际使用比较常见,比如日志
- tail -f xxxxx文件
- -n 参数


其他:ctrl+s 暂时停止接受,ctrl+q 继续接受,vim修改更新不会产生变化,因为vim修改可对应底层的文件索引inode变化了,是一个新的文件
本文标题:linux基础
文章作者:Niuhk
发布时间:2024-01-18
最后更新:2025-02-11
原始链接:https://www.niuhk.cn/2024/01/18/linux基础/
版权声明:转载请注明出处!
分享



