本章目标
1.Linux初步认识
2xshell远端登入
3.Linux指令
3.1shell命令及其运行原理
4.Linux权限
1.Linux初步认识
Linux是一款类Unix的操作系统,具有多用户,开源,免费的特性,主要应用服务器,大数据,云计算等领域,因为开源带来的优势,它本身稳定性要比微软的window,苹果的mac要高出很多,但是由于它应用的领域与二者不同,它大部分的使用群体是工程师,程序员,它的上手是有一定门槛的,它的使用方式主要是以TUI的方式呈现,也就是我们常说的终端,它虽然也提供GUI的版本,但是在后端开发中,我们并不使用它的图形化界面,图形化界面会给服务器带来性能上的消耗.
我们一般谈及Linux的时候是分为内核和发行版两个部分来进行讨论
内核一般指的是这个操作系统本身的源代码版本,这个版本的推进由Linux社区发布提供.如果你去打开安卓的手机在它的手机信息中找到它的内核版本,能看到类似于5.4.0这类的数字,这是因为安卓是基于Linux进行开发的操作系统,Linux本身是支持模块化的,我们可以对其进行裁剪来对当前的环境进行一个适配.
这串数字我们一般把它分为三个部分来看分别为
主版本号+次版本号+修改次数
在这个次版本号如果为偶数的话,我们一般把它认为是稳定版本,如果为奇数的话,我们把它认为是测试版本
Linux官网
最新Linux内核版本已经到了6.16.
对于Linux的内核版本,并不是越新越好,相反我们一般对Linux进行选型的时候,往往会采用老的版本,因为老的版本更加稳定,出现的bug也有人踩过.在企业开发中这是能够节约成本减少bug的.而在新的版本中,一旦出现错误,我们往往需要自己进行排查.
在上面我们大幅度的提出了开源的概念.
与之相对的就是闭源,二者都是商业模式,各有优势,但是我们一般认为开源是要好于闭源的,因为源码开放,关注维护的人就多,出现问题也能够很快解决,这也就说明开源带了高效稳定安全.这也是为什么win的电脑开个一周就会变得卡顿,而运行Linux的服务器的运行时间往往是以年为单位直到服务器报废.
介绍完内核,我们再来聊一聊发行版,对于一款操作系统来说,如果它们没有人使用就是没有任何意义的.举个例子,win系统会内置一些用鼠标点击的小游戏,这是在培养用户习惯,从而扩大用户群体,并且微软是纵容盗版的流行,虽然它无法从散户中获利,但是因为大量的window用户就会导致厂家在电脑中预装的系统就是window,微软就可以从厂家这里赚钱.
而在Linux这里,它的不同发行版就我们常听到的centos,Ubuntu,kali等,它们是有不同用户群体的,
一、面向新手的友好发行版 Ubuntu
特点:用户基数大、文档丰富,默认 GNOME 桌面,易用性强。
衍生版:
Linux Mint(基于Ubuntu,自带Cinnamon桌面,开箱即用)。
Pop!_OS(针对开发者优化,支持NVIDIA显卡和科学计算)。
适用场景:日常办公、新手入门。
Zorin OS
特点:界面类似Windows,适合从Windows迁移的用户,预装常用软件。
二、稳定性优先的企业级发行版 Debian
特点:以稳定性著称,软件包较旧但经过严格测试,支持多种架构。
适用场景:服务器、嵌入式设备。
RHEL (Red Hat Enterprise Linux)
特点:商业支持,长期维护(10年生命周期),需订阅。
免费替代:
CentOS Stream(滚动预览版,适合开发测试)。
Rocky Linux/AlmaLinux(RHEL 1:1 兼容的社区版)。
SUSE Linux Enterprise (SLE)
特点:欧洲市场流行,YaST配置工具强大,支持SAP等企业应用。
免费替代:openSUSE Leap(共享SLE代码基)。
三、滚动更新与极客向发行版 Arch Linux
特点:极简主义,滚动更新,用户需手动配置一切。
衍生版:
Manjaro(预装桌面环境,简化安装)。
EndeavourOS(接近原生Arch,但提供图形安装器)。
openSUSE Tumbleweed
特点:基于openQA测试的滚动更新,稳定性优于Arch。
Gentoo
特点:所有软件从源码编译(USE标志高度定制),适合性能调优。
Fedora
特点:红帽赞助,前沿技术试验田(如Wayland、PipeWire默认启用)。
版本:Workstation(桌面)、Server(服务器)、Silverblue(不可变系统)。
四、轻量级与老旧硬件专用 Lubuntu(Ubuntu + LXQt)
特点:资源占用低,适合低配PC。
Puppy Linux
特点:体积小(<300MB),可直接运行在内存中。
AntiX
特点:专为老旧硬件设计,支持32位系统。
五、隐私与安全强化发行版 Tails
特点:强制通过Tor网络,所有流量匿名,适合敏感操作。
Qubes OS
特点:基于Xen虚拟机的隔离架构,不同任务运行在独立VM中。
Kali Linux
特点:预装渗透测试工具(如Metasploit、Nmap),用于网络安全评估。
六、特殊用途发行版 SteamOS(Valve开发)
特点:针对游戏优化,集成Steam平台。
NixOS
特点:声明式系统配置,原子化升级/回滚。
Slackware
特点:最古老的存活发行版,极简设计,适合学习Linux原理。
以上就是当前活跃于当前市面上的Linux发行版,我们一般说Linux往往就是指这些.
2.xshell远端登入
对于我们当前学习来说,我们可以采用购买云服务器或者搭建虚拟机的方式来运行Linux系统.
XShell 是⼀个远程终端软件.下载官网:https://www.netsarang.com/products/xsh_overview.html
下载安装的时候选择"home/school"则为免费版本.
xshell的问题搞定之后,关于云服务器的问题我们可以从阿里云,腾讯云,这些地方来购买,对于学习阶段就是哪个便宜买哪个
在购买完成之后一定要在该服务器的后端控制台重置实例密码
还有的类似阿里云,它们还需要分配公网ip.有了公网ip和root密码.我们就可以登入我们的服务器了
我的服务器选型是centos7.6的版本,其他发行版以下操作类似
打开我们的xshell找到新建会话,在主机处填入公网ip.名称自拟.
然后我们点击确定
打开该会话,在这里输入root,默认生成的,在这一步我们是同一的
然后输入我们刚才重置的root密码.
登入之后我们输入whoami
如果为root.就证明我们成功登入.
对于虚拟机的方案,我们需要有
VMware这个软件和
当前操作系统的镜像文件,我们会在后续的博客专门介绍这个方法.
因为Linux为一款多用户的操作系统,我们也可以进行创建用户和其他人共用一台服务器
可以通过adduser的方式进行创建用户,同时通过passwd的方式设置密码在这里的密码是不会回显的,正常输入即可.
我们要删除一个用户用userdel的方式的进行删除-r表示递归选项,因为在Linux系统中一切皆文件.创建的用户也是一个文件夹,而在Linux中整个操作系统是一课多叉树.对一颗树进行删除我们采用的后序遍历的方式进行删除.
3.Linux指令
1.pwd
作用:显示用户当前所在的目录
在Linux中路径是一个文件的唯一标识
Linux中因为是以一颗多叉树展开,这也就是说明每一个文件都拥有唯一的父亲结点.
而在Linux中,我们⼀般从/开始,不依赖其他⽬录的定位⽂件的⽅式叫做绝对路径
相对于当前⽤⼾所处⽬录,定位⽂件的路径⽅式成为相对路径
这也就是说明对于Linux的文件来说,在这颗树下我们从任意位置都可找到该文件
无论在window还是Linux下我们开机都会处于一个默认的路径下
我在这里用一个普通账号登入,我们发现它在/home./mutou这个目录下
而在window下
C:\Users\mutou\Desktop我们可以发现我们在这个目录下发现了我们桌面的东西,我们一般把这个C:\Users\mutou目录称为家目录\
2. cd ⽬录名
作用:更改当前工作路径
cd …
返回上级路径
cd 绝对路径
cd 相对路径
cd ~
快速返回家目录
cd -
返回上次目录的地址
ls
显示当前目录下的文件
对于该命令有两条选项-a 表示显示当前目录的所有文件,-l显示当前目录的文件的详细信息
在这里我们看到了. 和…,这两个是存在与每一个目录下的隐藏文件,…表示上级目录.
表示当前目录…我们已经在上面演示过了,.一般我们用于执行当前目录的的可执行文件
4 touch
功能:touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者新建⼀个不存在
的⽂件。
在这里它有两个修改时间的选项一个是-a ,另一个是-m它们分别代表这仅修改access的时间和modtify的时间,在这里分别介绍下三个时间戳代表着什么
第一个access代表着最后一次被访问的时间,
第二个modtify代表着最后一次文件内容被修改的时间
第三个change代表着文件属性比修改的时间
而对于一个文件来说它是等于文件内容加上文件属性的,对于一个新创建的文件即使它的文件内容是空的,它在磁盘上也是占据物理空间的.
在这里文件的时间是属于一个文件的属性,这也就是为什么当一个文件的访问的时间它的change时间戳也被修改了.
5.mkdir
功能创建一个目录
它有一个选项-p 在后面接上 mkdir -p path1/path2/path3/path4一串路径,那么它就可以被创建出来.
在Linux系统中,我们的文件类型是不以文件后缀为标识的,
在每一行的一个字符-或者d分别代表着普通文件,和目录文件,在Linux中无论,是文本,还是.c或者.h类型的文件我们都同一归为普通文件
6.rm
这个指令用于删除文件与目录
rm file.txt # 删除单个文件
rm file1.txt file2.txt # 删除多个文件
rm -f log.txt # 强制删除(不提示)
rm -r mydir/ # 递归删除目录(包括子目录和文件)
rm -rf mydir/ # 强制递归删除(无确认,慎用!)
rm -d empty_dir/ # 删除空目录(等价于 `rmdir`)
rm -i *.txt # 删除所有 .txt 文件前逐个确认
大家可以试一试rm -rf / 这个命令
/我们在Linux是指根目录,是整颗文件多叉树的根 -r 和-f表示递归和强制,具体的效果大家可以自己想象,它可以极致优化你的Linux系统.
在这里介绍一个指令tree 这个指令能让你当前文件以树状结果呈现
我们可以用
yum install -y tree
来进行安装
7.man
man这个指令我们一般是用来查找指令的手册的,它也可以查找库函数
在进入手册之后我们可以通过q来进行退出
cp命令
cp [选项] 源⽂件或⽬录
⽬标⽂件或⽬录
这个命令的功能是对一个文件进行复制
它提供的选项分别有 -i 覆盖的时候进行询问
-f 强制 -r表示递归
它的选项与rm命令类似
mv命令
mv命令是move的缩写,可以⽤来移动⽂件或者将⽂件改名(move(rename)files,经常⽤来备份⽂件或者⽬录
mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
它除了移动文件或者目录还可以对文件进行重命名
mv file.txt /tmp/ # 将 file.txt 移动到 /tmp/
mv file1.txt file2.txt /backup/ # 移动多个文件到 /backup/
mv oldname.txt newname.txt # 重命名文件
cat命令
查看文件内容
more与less
它们两个的功能是与cat类似,但是当我们查看过多的内容的时候cat就不太适用了,more和less就是为了解决这个问题
我们摁空格就可以向下查看
less在支持我们查看的同时支持我们从中截取字符串进行搜索
head与tail
它们是使用方法是一样的都是指令加上行数,表示只查看当前文件的前或者后n行.
我们可以通过大模型生成一段shell脚本代码,在这里我们生成了2000行
我们可以通过这两个指令加上一个管道取得中间的1000-1049行
中间哪个|就是管道它会把前一个表达式的结果传递给下一个表达式.
在前面我们也有一个符号>,这个在linux中表示输出重定向,我们我们正常echo一段语句
它的结果会向屏幕进行显示,而现在我们用了这个符号就可以把结果保存到一个文件中.
?..>>表示两个>表示追加重定向.正常我们再一次进行把内容输入到同一个文件的时候.它会覆盖掉原来的内容.这是因为输出重定向会把文件的内容删除之后再进行输入.
而追加重定向的内容会在原来的内容的基础的后面进行追加
还有一种是<表示输入重定向
在这里我们准备两个文件一个二进制文件一个文本文件,我们直接通过输入重定向能够直接获得结果.
date与cal
date +%s
1673432636
date +%Y/%m/%d-%H:%M:%S
2023/01/11-18:23:20
find
功能在当前系统中寻找指定文件
用法 find + 路径+选项+文件名
它的选项有很多在这里我们只了解一个-name 按照文件名查找
which
搜索系统指定的指令 在这里我们发现两个东西 alias和一个路径
这个路径就是系统指令默认安装的位置.所谓的安装就是在特定的目录下进行拷贝.我们自己写的程序也可以安装在这个目录下,但是这样会污染系统的指令池.
所谓的指令也就是一个可执行的文件
whereis 指令
可以查看⽤于找到程序的源、⼆进制⽂件或⼿册
alias 指令
给指令起别名
这个别名是内存级别的,他会在当前主机开始的时候创建,每一次关机的时候进行销毁
grep指令
我们一般用它在安装软件和查看日志的时候使用
在拿我们刚才的tail和head的例子进行举例
我们可以通过head cat tail和管道进行配合使用
zip/unzip 指令
rzsz
我们一般进行打包是为了进行传递,这个两个指令我们可以实现本地的Linux和window互传
sz加上文件名之后再选择你要保存的地址
rz 之后选择你要传递的文件
这两个指令一般你的机器上是没有安装的
yum/apt install -y lrzlz
centos选择yum Ubuntu选择apt
tar指令
tar指令是跟zip指令类似的指令,但是实际应用的时候我们更多的是用这个格式来进行压缩
它的压缩格式tar.gz,但是我们一般缩写为tgz.
我们看到它的指令有很多,但是我们使用它的时候一般把它的指令成组的去进行记忆
czf 压缩,xzf进行解压 -C解压到指定目录
bc
计算器,不解释
uname
3.1shell命令及其运行原理
Linux是一款操作系统,我们把他叫做内核,但是我们平常使用的时候,并不是直接与内核进行交互的,我们是通过外壳程序进行交互的,我们通过shell命令这个外壳程序进行翻译,然后把它交给内核,内核处理完之后再把结果返回.
外壳程序在centos这个发行版上的就是一个叫bash的命令行解释器
我们可以通过which找到它
在window映射就是我们通过图形化界面进行操作.
Linux下一切皆文件,我们shell命令也就是可执行程序
4.Linux权限
在linux我的权限一般要分为用户和文件属性两个部分
我接下来一个一个谈
为什么会出现权限
因为Linux本身就是一款多用户的操作系统为了方便用户管理出现了权限
所谓的权限也就是当前资源是否能够进行访问
在Linux中用户一般分为连个部分
超级用户和普通用户
超级用户也就是我们平常所说的root用户,它一般是不受权限约束的,它可以的自由的进行访问
普通用户也就是我们通过adduers出来的用户一般是受权限进行约束的
我们一般进行用户之间的切换可以通过su这个指令执行
超级用户变成普通用户不需要密码的
普通用户变成超级用户的时候是需要密码的
普通用户变到另一个普通用户之间也是需要密码的
还有一个选项是su -
这个选项与上面的su不同的是su会在当前文件中进行用户的切换
而su-会重新等于回到每一个用户登入的初始路径上
在每一个文件的前面有一个字符串,我们已经了解了一个的字符是表示文件类型的
后面的我们每三个分为一组
也就是rwx,这三种字符表示三种权限分别表示,当前文件只允许读,只允许写,是否可执行
分为三组也就代表了它分为三种角色
这个角色也就是由我们前面的用户所扮演的
从左往右分别为u 拥有者
g 所属组
o 其他人
三种角色,-表示当前角色没有该权限
我们一般通过chmod这个指令去改变当前文件的权限
除了这种加减的方法我们也提供了另一种方法去修改权限
如果我们三个一组把拥有权限看作1,没有拥有权限看作0
所有拥有rwx权限就可以写作777,我们通过chmod 777 test这种方式也可以进行修改文件
我们可以通过这两个指令进行修改拥有者和所属组
拥有者和所属组分别是从左往右第一个名字和第二个名字
如果一个文件拥有者和所属组都是同一个人所属组拥有全部权限可以拥有者没有
那么该用户对当前文件进行操作的时候,也是不能够进行访问修改的,因为在Linux中权限的验证,对于当前用户只会验证一次
如果一个文件给了可执行的权限,可是当前文件确实一个文本文件,那么也是不可以执行,因为当前文件本身是不可以执行的,就像我小区大门和你家大门一样
其实一个文件是有本身的默认权限的,对于普通文件我们把它认为是666,目录文件是777,实际得来的权限是与一个叫权限掩码进行运算得来的
我们在Linux中可以通过umask这个操作得到权限掩码
我们一般只看后三位
这个最终权限的公式是初始权限&(~unmask)
我们可以通过file命令查看当前文件的类型
在Linux中我们的文件一般分为以下几种
有些情况,在安装软件的时候我们一般是只能够让超级用户进行安装的
但是我们大多数情况并不可能去找管理员
我们这时候有一个指令是sudo提权
当我们进行sudo提权的时候它会要求我们输入当前用户的密码
而不是像我们用su的时候输入超级用户的密码
但是如果你是第一用这个指令的话它是不允许我们操作的,需要我们去进行修改一个配置文件sudoers这个配置文件