一. 软件包管理器
1)Linux下安装软件的常用方法
1. 源代码安装
下载程序的源代码,本地编译成二进制文件,拷贝到系统指定路径下。
2. rpm包安装
已经编译好的安装包,使用rpm对应的指令去安装,也比较麻烦。
3. 包管理器安装 --- 最佳实践
2)什么是软件包、包管理器?
1. 软件包就相当于APP,而软件包管理器就相当于软件商城(AppStore)。
2. 两个常用的软件包管理器
① yum(Yellowdog Updater, Modified):主要用在Fedore,RedHat,Centos等发行版上。
② apt(Advanced Packaging Tool):主要用在Debian,Ubuntu等发行版上。
3. 功能:提供自动解决依赖关系、下载和安装软件包的功能。
3)软件下载的过程
包管理器分析这个软件依赖哪些库或程序,自动从配置好的软件源对应的软件包服务器上查找所有的软件包并下载,将这些包解压,放到系统指定的目录下。
Linux软件生态问题
4)操作系统被设计出来之后最重要的是什么?
1. 最重要的事情就是:被更多人使用。
2. 当操作系统被设计出来,不同的发行版有更适合的人群和圈子,比如学生群体以及初学者适合ubuntu,极客群体适合Kali,企业级开发适合。形成使用的圈子只是一种吸引人的手段,目的还是希望有更多人使用。
3. 如何让操作系统被更多人使用呢?完善相关生态 --- 社区、文档、论坛、资料等(一定有人愿意在特定的操作系统上编写特定的软件并开源,适应不同的群体)。希望操作系统被更多人使用也是一些人维护社区论坛、官网文档、软件体系、更新速度、操作系统自身以及富有针对性的群体的最原始的动力。
5)我们如何评估一款操作系统的好坏?
看它的核心技能与性能、对应的生态如何等。
软件的开发者需要开发软件、将源代码在不同的平台编译发布、最终上线放在对应版本的软件包服务器上。
6)为什么开发者愿意做这么多工作,免费为社区提供软件,编译发布出来,还提供云服务器让我们下载?
1. 理想与信仰(最根本的驱动力):他们愿意为技术的推动免费贡献力量
2. 协作与认同,为自己的职业生涯构建更多的机会和更好的声誉,或者回馈社区。
3.可能这批人之前也做了操作系统,为了让他们的操作系统被更多人使用,他们也愿意把配套的软件做出来,把生态搞好。
4. 软件包服务器:开发还需要服务器,维护等等都需要资金。在版本维护时如果遇到困难可以到社区求助,自然会有依赖这些操作系统的企业或个人捐款(因为如果自己维护成本会更高)。
7)世界上的云服务器成千上万,为什么yum/apt能知道去哪里申请?(类似的,我们手机上的软件商城是怎么知道去哪里下载的)
1. 包管理器就是一个软件(属于应用程序),并在我们的机器上内置了配置文件,在配置文件中就内置了包服务器的URL(统一资源定位符、超链接,可以就先理解为云服务器的IP地址),通过URL就可以找到对应的机器。
2. yum/apt是软件也是命令。
[root@hcss-ecs-116a ~]# which yum
/usr/bin/yum
3. Linux的发行版基本都是外国人写的,内置的配置文件中的服务器地址也都是国外的云服务器。
因为一些原因,国外的地址可能不允许我们访问,即使能访问也不太稳定,或者太慢。
所以国内的某些公司、组织、高校都会免费给社区构建包服务器,构建好之后就将国外的资源镜像(就是拷贝)到国内。之后我们国内的云服务器厂商,他们用的是国外的操作系统,但是在给我们安装操作系统时就会将国外的链接替换成国内的(替换的过程也叫镜像源/软件源配置,这个过程不需要我们做,服务器的厂商会做)。
1. 清华大学开源软件镜像站
国内最著名、最全面的镜像站之一,支持几乎所有主流发行版。
· 官方网址: https://mirrors.tuna.tsinghua.edu.cn/
· 常用链接:
· Ubuntu: https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
· Debian: https://mirrors.tuna.tsinghua.edu.cn/help/debian/
· CentOS: https://mirrors.tuna.tsinghua.edu.cn/help/centos/
· Arch Linux: https://mirrors.tuna.tsinghua.edu.cn/help/archlinux/2. 中国科学技术大学开源软件镜像站
同样非常老牌和可靠的镜像站,速度很快。
· 官方网址: http://mirrors.ustc.edu.cn/
· 常用链接:
· Ubuntu: http://mirrors.ustc.edu.cn/help/ubuntu.html
· Debian: http://mirrors.ustc.edu.cn/help/debian.html
· CentOS: http://mirrors.ustc.edu.cn/help/centos.html
· Arch Linux: http://mirrors.ustc.edu.cn/help/archlinux.html3. 阿里云开源镜像站
由阿里巴巴云服务维护,网络连通性非常好,尤其适合阿里云ECS用户。
· 官方网址: https://developer.aliyun.com/mirror/
· 常用链接:
· Ubuntu: https://developer.aliyun.com/mirror/ubuntu
· Debian: https://developer.aliyun.com/mirror/debian
· CentOS: https://developer.aliyun.com/mirror/centos
· EPEL: https://developer.aliyun.com/mirror/epel4. 华为云开源镜像站
由华为云维护,同样提供高质量的镜像服务。
· 官方网址: https://mirrors.huaweicloud.com/
· 常用链接:
· Ubuntu: https://mirrors.huaweicloud.com/ubuntu/ (进入后查看使用帮助)
· Debian: https://mirrors.huaweicloud.com/debian/
· CentOS: https://mirrors.huaweicloud.com/centos/
· openEuler: https://mirrors.huaweicloud.com/openeuler/
8)软件包之间的依赖关系
1. 即使是我们自己写一个C语言的代码也会依赖很多库,一个软件以来的东西可能更多,少一样软件就运行不了(所以上面说的安装软件的前两种方式非常麻烦,我们要知道软件所有的依赖并全部安装到自己的系统中)。
2. ldd指令
功能:查看一个指令、软件依赖了什么库。
这是ls指令依赖的所有库,只要删掉一个ls就无法正常使用了。
[root@hcss-ecs-116a ~]# ldd /usr/bin/lslinux-vdso.so.1 => (0x00007ffdca77e000)libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fb7bc1ad000)libcap.so.2 => /lib64/libcap.so.2 (0x00007fb7bbfa8000)libacl.so.1 => /lib64/libacl.so.1 (0x00007fb7bbd9f000)libc.so.6 => /lib64/libc.so.6 (0x00007fb7bb9d1000)libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fb7bb76f000)libdl.so.2 => /lib64/libdl.so.2 (0x00007fb7bb56b000)/lib64/ld-linux-x86-64.so.2 (0x00007fb7bc3d4000)libattr.so.1 => /lib64/libattr.so.1 (0x00007fb7bb366000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb7bb14a000)
9)yum/apt list(查看软件包)
把对应包服务器上的所有包名列出来。也可以通过管道级联命令,筛选想要的软件包。
[lsy@hcss-ecs-116a ~]$ sudo yum list | grep sl
10)安装软件
1. sudo yum/apt install -y XXX(不加-y安装过程中会询问是否确认安装,加了就直接安装不会再询问)
2. 出现complete或者没有报错就是安装成功了
3. sl是Linux中一个有趣的软件 --- 小火车
11)卸载软件
sudo yum/apt remove -y XXX
12)其实我们的云服务器不仅内置了软件包服务器的URL,还有扩展包服务器的。
基础源:追求极致的稳定性。软件版本可能相对较旧,但经过了充分的测试,能与系统完美兼容。扩展源:可以提供更新版本的软件(例如,最新版本的 PHP、Python 或 Nginx),以满足开发者的需求,但可能引入更多的兼容性风险。
13)配置文件在哪里?
查看配置文件,可以看到软件源的链接,不过有些连接可能已经失效或者属于公司内部不允许外部访问的资源,所以导致无法访问。
apt:/ect/apt/sources.list
yum:/etc/yum.repos.d/CentOS-Base.repo
[root@hcss-ecs-116a ~]# cd /etc/yum.repos.d/
[root@hcss-ecs-116a yum.repos.d]# less CentOS-Base.repo
全部以CentOS为例
14)更新软件源流程
1. 备份原本的软件源(mv改个名)
2. 找新的yum源并下载
3. 改成配置文件的名
4. 更新缓存
yum clean all
yum make cache
5. 配置扩展源:yum -y install epel-release(ubuntu下基础源和扩展源的配置文件是在一起的就不需要这一步了)
15)yum/apt 不允许同一时间多人使用,牺牲并发性换取可靠性。
16)yum/apt 使用必须联网(ping 指令可以检查网络连接是否正常,具体的使用方式可以用大模型生成)。
二. vim 编辑器
windows下,我们通常使用IDE(集成开发环境)作为开发工具。但是Linux下的开发工具都是独立的,比如:
1. 写代码的编辑器 --- vim、vi(老编译器,我们不考虑)2. 编译代码 --- gcc、g++
3. 调试 --- gdb、cgdb
4. 构建工具 --- makefile、make、cmake
5. 和远端服务器协同的工具 --- git
1)vim 是一个在终端下只用来写代码的工具。
2)没配置过的vim没有代码补齐等功能。
3)用vim写一个hello world并编译运行。
进入vim 编辑器后要先按 i 才能编辑(稍后介绍具体原因,现在只是简单演示),编辑完成先按Esc,再输入 :wq(冒号也要输入的)进行保存并退出,我们的代码就编写好了。紧接着编译运行(这两步之前已经演示讲解过)
[lsy@hcss-ecs-116a code]$ vim hello.c
[lsy@hcss-ecs-116a code]$ gcc -o hello.exe hello.c
[lsy@hcss-ecs-116a code]$ ./hello.exe
Hello World
4)vim的多模式
1. 我们平时再Windows中使用的快捷键,比如ctrl + c、ctrl + v ...也是命令,他们就是为了增加编辑效率,那么是不是命令越多,效率越高?是的。因为这些命令的本质就是自动化和批量化。
2. 最主要的模式有三个:命令模式、底行模式、插入模式。还有比较常用的模式:视图模式、替换模式。
3. vim围绕命令展开,在打开时就处在命令模式(命令模式下无法进行正常的编辑,所以我们上面的演示中需要先按一下 i ,这一步其实是在进行模式切换),我们的讨论也围绕命令模式展开。
4. 先给出模式之间的切换方式图
5. 除了视图模式可以直接到插入模式,其他模式之间的切换都要经过命令模式。而从其他模式返回的方式很统一,按Esc键。
6. 从命令模式进入插入模式的三种方法有细微的区别
① i :直接切换,不做其他操作。
② a:切换的同时光标右移一位
③ o:切换的同时光标下移一位
提前给出的小知识(方便演示)
1. set nu 底行模式中调出行号
2. set nonu 去掉行号
3. :wq 退出vim。
5)命令模式
1. 光标的定位问题
① gg(快速两下g) 回到文本开始。
② shift + g 光标移动到文本结尾。
③ n+shift+g 光标定位到任意一行。(n就是数字,除了这个功能,下面所有前面加数字可处理多行的都可以不加数字,不加数字就处理单行或单个)
锚点
④ $ 移动到光标所在行的行尾。
⑤ ^ 定位到当前行的开始。
⑥ hjkl 等于 键盘右下角的左下上右,就是按指定方向移动光标。
既然已经有了直观地左下上右键为什么还需要hjkl:一方面是我们打字的时候这几个键就在手下,好按,快。另一方面是为了兼容老版本,以前的键盘没有左下上右这几个键。
⑦ n+w 以单词为单位向右移动n,如果遇到的不是单词,就按一个一个的字符跳。
⑧ n+b 以单词为单位向右移动n,如果遇到的不是单词,就按一个一个的字符跳。
2. 复制粘贴,剪切撤销,编辑删除类的
① n+yy 复制光标所在行以及下面n行。
② n+p 粘贴n次,到光标所在行的下一行。
③ u 撤销(保存之后依然可以撤销,但是退出vim之后就不可以通过撤销回退到上一步了)
④ ctrl+r 撤销u所做的撤销操作。(他和u可以互相撤销)
⑤ n+dd 剪切包含当前行在内的往下n行,p一下可粘贴剪切的内容,不粘贴的话,我们可以把dd当作删除整行用。
⑥ shift+~ 大、小写字母切换(按住shift之后连续按~,光标自动向右移动,处理这一行后面的内容)。
⑦ n+x 向右删除光标所在位置的字符。
⑧ n+shift+x 向左删除光标所在位置的字符。
⑨ n+r+你要替换的字符 (批量化进行一个字符的替换,即连续n个字符都用输入的那个字符替换)
批量化的内容替换(无视原来的内容,直接覆盖)切换到替换模式:shift+r
6)视图模式(VISUAL BLOCK)
1. 编写代码过程中避免不了的批量注释和取消注释,在vim中如何实现呢?
① 批量化注释
ctrl+v进入视图模式 --> n+(hjkl)选中区域,因为注释通常都在同一列,所以我们在做批量注释这一操作时通常都使用 j(向下) --> shift+i 从视图模式直接进入插入模式,不经过命令模式 --> 输入 // --> 按Esc回到命令模式即可。
② 批量化取消注释
ctrl+v --> n+jl 选中所有的 // --> d
2. 这就是一种批量化处理的方式,既然我们可以批量化的增加或者去掉 // 自然也可以批量增加或减少任何东西。只要选好区域
7)底行模式
首先按冒号:进入底行模式。底行就是最下面的一行,可以在最下面一行输入对应命令。
1. /关键词 --> n (这个n不是数字的意思,是next,搜索出很多带关键词的内容是,按n光标会自动跳到下一个)自动搜索并高亮带关键字的所有内容,按n光标跳到下一个。
2. %s/A/B/g 将文件中的所有A替换为B(A变B)
3. !+shell指令 可以在底行直接执行shell命令,不需要退出vim。常用于在vim中直接编译运行源文件,方便。
vim本身有创建文件的能力,所以我们想用vim写一个文件时不需要先touch hello.c再vim hello.c。直接vim hello.c,vim就会创建并打开一个名为hello.c的文件。
4. 为了更好地支持多文件编写代码,vim可以分屏,一个屏是一个文件。
① vs 分屏(分屏的同时创建文件)
② ctrl+ww 选择不同的屏幕(光标在哪块屏)
--千万别忘了这些都是要在底行模式下做的,冒号别忘了!!
8)其他小点
1. 插入模式就是普通的编辑模式。
2. 当vim退出时,光标在第n行,再次打开时光标还在原来的位置。
3. vim XXX.X(文件名) +n 打开文件时。将光标直接定位在第n行。
4. 有时候作为普通用户,我们可能不小心去掉了自己的读或者写权限,导致我们进入vim后可能不让我们看或者修改之后不让我们保存。但是我们是文件的拥有者,所以有强制保存的方法 在底行模式中输入w!,我们都知道w是保存,加个感叹号表示强制。
5. 如果我们修改了文件还没来得及保存就和我们的云服务器断开了连接(可能是不小心关了XShell,可能是长时间没有活动XShell连接超时自动断开了与云服务器的连接,或者网络突然中断等等原因),重新登陆后会提醒我们有一个未保存的后缀为.swp的临时文件,问我们要怎么办。此时我们可以选择R重新打开文件并保存退出。但是再进还是提醒有这么一个临时文件,让我们选择怎么办,此时只需要回到shell命令行中,删掉这个临时文件。但是需要注意,临时文件是以.开头的隐藏文件,我们可以用ls -al指令查看,并删掉。
下面演示一下,我在没有保存的情况下直接关掉了XShell。
删除之后就能正常用vim打开文件了。
9)vim中的退出方式
1. 底行模式下 wq
2. 命令模式下 shift + zz
有了以上的对权限的认知和对vim使用方法的掌握,我们就获得了通过修改/etc/sudoers文件,将用户添加进白名单的能力。必须使用root账号操作。
1. vim /etc/sudoers2. 找到下图位置
3. 将100行的内容复制粘贴一份到下一行,并将root改为你要添加进来的账号名。
4. 强制保存并退出(因为文件的权限问题和特殊性,即使是root账号也不能修改文件内容,但是root作为文件的拥有者,有权利强制保存)
5. 此时我们就修改完成了,可以检查一下lsy这个账号是否可以使用sudo命令。
10)vim的简单配置
1. vim其实是系统的一条基本指令,启动前会自动到配置文件中读取配置项。
[lsy@hcss-ecs-116a ~]$ which vim
/usr/bin/vim
2. 在系统的/etc/目录下有一个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
而每个普通用户在自己的家目录下都可以建立一个私有的配置文件,必须命名为 .vimrc
如果不存在就自己创建一个。
3. 所以对vim的配置,本质就是把配置项写进/home/XXX/.vimrc这个配置文件中。
4.常见的配置项都有哪些呢?我们可以问一问ai大模型,让他直接帮我们生成一些常用好用的。下图是配置成功之后再次打开.vimrc文件的效果,他是配置之后(保存并退出)立即生效的。
5. 但是这些并不是很好用,只是美化了一些,并没有我们最需要的代码补齐,语法提示等功能。所以我们需要一些插件。自己配置相对麻烦,可以直接到码云上获取(这个只对CentOS7系列有效):https://gitee.com/HGtz2222/VimForCpp
找到下面的安装方法部分,并复制红色框选部分内容。
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
粘贴到你要配置的普通账号的命令行下,root账号有自己的配置文件,不建议修改,我们只配置个人的就好。然后等待几分钟就好。
这样就已经安装成功了,可以随便打开一个源文件使用一下。语法提示,代码补全,关键字高亮等等功能比较齐全。
这里自动缩进默认是两个空格,如果想改也可以:
① vim .vimrc
② 在底行模式下搜索2 :/2
③ 将2全部改成你想要的缩进量
④ 保存并退出
6. vim配置只在当前账号下有效,并不是配置一次这台机器上的所有用户都好用。