ubuntu探索日记(不是教程)

目录

前言

一、win11/ubuntu22.04.3 双系统

二、安装记录

1.分区

2.进入ubuntu后的设置

2.1 系统时间同步

2.2 设置交换缓存文件

2.2.1 手动激活、取消swapfile

2.2.2 自动挂载swapfile

2.3 更改开机的grub引导选项

2.3.1 设置默认windows启动

2.3.2 隐藏 "UEFI Firmware Settings" 选项

三、使用记录

3. Vim

3.1 【命令模式】指令

3.2 【默认模式】技巧

4. 挂载Windows分区到ubuntu

4.1 mount/umount:挂载/卸载挂载点

4.2 切换root访问该Windows分区

5.终端里的gdb调试(以.c为例)

5.1 list列出源码

5.2 break与info break

5.3 run

5.4 next、continue

5.5 step、finish

5.6 print、ptype



前言

利用这个博客记录一些我对于Linux发行版(ubuntu)的学习,以及一些双系统使用的感受。


一、win11/ubuntu22.04.3 双系统

​​​​​给自己的笔记本电脑装了双系统。很推荐下面这个up的安装教程:

https://space.bilibili.com/411541289

· 插入ubuntu安装U盘,在Windows端重启时一直按住shift键不放,出现的界面中,有个“使用设备”选项,点击进入,可直接选择用插入的U盘启动;如果不行的话,那就老老实实去BIOS设置启动顺序。(Tips:界面中点击“疑难解答”->“高级选项”->“UEFI固件设置”,重启,也可以进入BIOS)

· 之后想要给ubuntu扩容的话,还是会用到这个ubuntu安装U盘的,具体教程看上面推荐的up视频。


二、安装记录

1.分区

直接在ubuntu里展示一下

lsblk

  1. ubuntu efi 区:直接安装到windows的引导区里,即上图的nvme1n1p1
  2. ubuntu swap区:不专门分区,以后设置swapfile,以文件的形式设置交换缓存
  3. ubuntu 数据区:上图全部的nvme0n1p3都作为 / ,不区分 / 与 /home

总结一下,安装过程中的分区选项,只设置了 / ,并且把启动引导器装在windows的efi区。


2.进入ubuntu后的设置

2.1 系统时间同步

ubuntu和Windows的时间机制不同,所以来回切换系统会让时间错误。

NTP服务器(Network Time Protocol服务器)是用来使计算机时间同步化的一种协议服务器。

在ubuntu的终端里面下载ntpdate,然后让ubuntu的时间与time.windows.com同步。

输入下面这行之前可能需要:sudo apt update

sudo apt install ntpdate
sudo ntpdate time.windows.com
sudo hwclock --localtime --systohc

2.2 设置交换缓存文件

2.2.1 手动激活、取消swapfile

首先 free -h 查看内存

free -h

笔者的设备运行内存为16G,所以先设置一个16G的 /swapfile

语法为:sudo fallocate -l <size> <filename>

sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile

手动激活,注意:没有告诉系统相关的挂载信息,每次必须去手动激活才能使用交换缓存!!!

激活指令如下:

sudo swapon /swapfile

如果想更改缓存大小,先取消激活,然后删掉 /swapfile ,重来上面的步骤,只需fallocate时,文件大一点就行了。

取消激活指令如下:

sudo swapoff /swapfile

删除 /swapfile:

sudo rm /swapfile
2.2.2 自动挂载swapfile

上面2.2.1的方法中,手动创建一个交换文件。每次开机后,要使用交换空间时,都需要手动swapon。

为了在每次系统启动时都能自动挂载交换文件,需要将信息添加到 /etc/fstab 文件中,告诉系统将 /swapfile 文件作为交换空间挂载,用于内存交换。

首先看一下 /etc/fstab这个文件:

用文本编辑器打开 /etc/fstab

sudo gedit /etc/fstab

按照里面说的的格式 <file system>  <mount point>   <type>  <options>   <dump>  <pass>

/swapfile none swap sw 0 0

也就是上图的第12行。

保存修改,重启,再去 free -h 就可以看到自动启用了交换缓存文件。

后续更新......


2.3 更改开机的grub引导选项

对于双系统开机的引导选项,做了两个改变:

1.设置默认windows启动

2. 隐藏 "UEFI Firmware Settings" 选项

2.3.1 设置默认windows启动

在文件 /etc/default/grub 中,把GRUB_DEFAULT的值改为2,也就是从“0”对应的ubuntu变成“2”对应的windows。

用一个文本编辑器打开 /etc/default/grub,我这里用了gedit

sudo gedit /etc/default/grub

下图中的红框即是所改

修改后保存,别忘了更新grub

sudo update-grub
2.3.2 隐藏 "UEFI Firmware Settings" 选项

GRUB菜单的配置是通过 /etc/grub.d/ 目录下的各个文件来实现的(下图第一个红框),

注意,不是 /etc/default/grub.d/目录(下图第二个红框)

 /etc/grub.d/中的30_uefi-firmware文件就是有关于"UEFI Firmware Settings" 选项的相关内容,

打开它,然后把里面的代码全部注释掉就OK了。

sudo nano /etc/grub.d/30_uefi-firmware

注释掉所有的代码,每行前面加“#”。

记得更新grub

sudo update-grub

开机时,达到下面的效果

后续更新......


三、使用记录

这一部分,主要记一些使用ubuntu的感受,可能会去写点双系统的使用心得。

3. Vim

终端里面的编辑器。

三种模式:【默认模式】【编辑模式】【命令模式】

打开vim,就是【默认模式】。

【默认模式】可分别与【编辑模式】及【命令模式】完成界面切换, 但【编辑模式】与【命令模式】之间不可互相切换。

按 i 键 ,   【默认模式】--->【编辑模式】,  按esc键返回。

按 : 键 ,   【默认模式】--->【命令模式】.  按esc键返回。

3.1 【命令模式】指令

我常用的【命令模式】指令。

后续更新... ...

3.2 【默认模式】技巧

1.查找(Vim的ctrl+F)

/

下面是一个例子,找“printf” ,在【默认模式】下按下“/”键,然后去输入“printf”,会看到:

输完“printf”后,再回车键入,如下图:(光标会到第一个“printf”处)

输入“n”向下去找下一处“printf” (或者键入“N”查找上一处)

这里我不断的键入了“n”,直到最后一处“printf”,如下图,在行尾会有找完的提示。

4. 挂载Windows分区到ubuntu

将nvme0n1p2挂载到ubuntu,这样可以在ubuntu中去访问Windows下的这个分区中的内容。

如下图:类型为NTFS的nvme0n1p2未挂载。在 /mnt/ 自己建立一个目录,做挂载点。

cd /mnt

sudo mkdir my_mnt

4.1 mount/umount:挂载/卸载挂载点

挂载到上面建立的挂载点:

sudo mount /dev/nvme0n1p2 /mnt/my_mnt

如果想要卸载这个挂载点,

sudo umount /mnt/my_mnt

如果想要设置永久挂载,即希望在系统每次自动挂载nvme0n1p2分区,像上面的 【2.2.2 自动挂载swapfile】 ,需要自己去再编辑一下/etc/fstab文件。

注意这个分区是 NTFS 而不是 ext4,需要使用不同的文件系统类型来挂载它。

我目前没有去设置永久挂载。相关内容后续更新......

4.2 切换root访问该Windows分区

切换成root身份:

dc@hasee:/mnt$ sudo su
root@hasee:/mnt# 

像进入目录一样,访问这个新的挂载点:

 cd my_mnt

访问结束后,换回我们的普通用户:(笔者的用户名为“dc”)

su - dc

后续更新... ...

5.终端里的gdb调试(以.c为例)

虽然在ubuntu环境中,也可下载一个vscode,然后配置launch.json去使用vscode提供的界面化很好的gdb调试,但是毕竟在终端中就可以敲一些gdb的命令完成简单的调试工作。

我这里以调试.c为例记录一些常用到的gdb指令。

能够使用 "gdb <filename>"的一个前提条件是,在编译时一定要带上-g 选项(用于生成调试信息)

这样,由server.o链接生成的server就可以使用“gdb ./server”去启动gdb调试。

5.1 list列出源码

对server启动gdb,gdb ./server

列出主函数源码

list main

继续列出当前行后面的源码,list - 就是看前面的源码了。

list +

后续更新... ...

5.2 break与info break

当遇到想要设置断点的行,可以“break [行号]

上图在319行设置了断点。

同时,“info break”可以查看所有的断点信息。

注意,info break展示的第一列“Num”是断点编号,可见319行的这个断点的编号为“1”,

假如要删除319行处的断点,使用“delete 1”。

5.3 run

run”开始调试,

run

上图卡在了282行,编号为2的断点处,也就是说282行的printf()还没有被执行。

使用“next”、“step”等后续命令继续调试。

... ...

5.4 next、continue

当想要快速浏览程序的执行流程,不关注函数内部的实现细节时,可以使用“next”和“continue”。

例如,有时候像下图这样,我们进入了一个for循环,(中间还使用了一下“print [var_name]”查看了一下变量 i 的值),

但是这个for循环次数较多,可以使用“continue继续执行程序,直到遇到下一个断点或程序结束。如果在“next”或“step”之后程序处于暂停状态,“continue”将恢复程序的执行。

continue

5.5 step、finish

当想要深入了解某个函数的执行过程,查看函数内部变量的变化时,可以使用“step,如果在函数内部想要快速退出,可以使用“finish”。

上图是卡在了319行的epoll_wait(),我们分别使用“step”和“next”会有不一样的效果,

如果使用“step”,

可以看到进入了epoll_wait()内部,并且使用“finish”退出回到main()时,报告了Value returned 为0.

如果使用“next”(下图红框),可以看到会越过epoll_wait(),继续执行下面的判断逻辑。

... ...

5.6 print、ptype

在 5.4 next、continue 章节就已经用过了“print [var_name]”查看了一个变量的值,这里再介绍一下“ptype [var_name]”查看一个变量的类型。

这次满足epoll_wait()的条件,使其返回值为1,以方便后续介绍,

下图用“print nfd”看到了epoll_wait()的返回值为1。

ptype ev” 看到了ev是一个可以指向结构体的变量。

还可以去看看ev指向的结构体变量的成员值,更好的去理解程序的逻辑。

quit” 离开调试。

... ...


后续更新... ...

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值