引言
最近因为看深入了解计算机系统这本书,这本书要求使用 linux 来进行一些实验,所以萌生了想要弄台 Linux电脑的想法,想起来就做。正巧,B 站最近老是给我推送开发板的内容,我是十分感兴趣的,毕竟我想要亲手做一些东西,刚好看到九十九的香橙派 zero 3 可以充当 linux 电脑,于是研究一下就直接买了一套,买的是 1 G 版本的,加上内存卡,电源,扩展板,外壳,连接线,一共不到两百块就拿下了一台 Linux 电脑。
开始组装
就是把外壳给装到开发板上,不过注意引脚,电扇的供电要插到固定的引脚上(有个 5 V 还有个 GND 的引脚,插到这两个面才行。香橙派把对应的 pin 都涂上颜色了,GND 是黑色,供电的 5 V 涂得红色,而风扇的电线也有黑红两色,对应连接就行),因为我安装的时候没有拍照,所以这里就不放图片了。然后就没什么难度,也不需要螺丝就安装好了,没装散热片,不过还好。
最后的结果就是下图所示。
引脚
做一些东西总得学到一些什么东西,所以说我每学到什么新东西,我都会去查一查资料来试图真正弄明白这些东西。不过现在有 AI 了,我用 Github Copilot 来帮我解答问题,chatGpt 4.0 的模型,是真的好用。
常见的引脚类型:
接地引脚的简称就是 GND
不同类型的 Ubuntu
有两种类型,其实 Linux 都有两种类型
- Desktop
- Server
很容易区分,桌面版大一些,就拿 ubuntu 举例,桌面版比服务器版大一倍。
不过桌面版有可视化界面,服务器版就只有敲命令行了。
烧录
插上 tf 卡,打开balenaEtcher,我们用这个软件进行 tf 卡的烧录,选择 Ubuntu 的映像,以 img 结尾的,点击烧录,等一会,然后就 OK 了。
将 tf 卡查到香橙派的 tf 卡槽里面,硬件的准备就结束了。
连接电脑
Hdmi 的分类
Hdmi 有三种类型
- Hdmi
- Mini Hdmi
- Micro Hdmi
我起初认为只有两种,所谓的 minihdmi 和 microhdmi 是一样的,结果是不同的,microhdmi 比 typec 还要小。
SSH 连接电脑
因为我买错线了,没有 microHDMI,所以没办法直接连接,所以就是用 MobaXterm来进行 ssh 远程连接。
什么是 SSH
其实之前我也没有用过,这次是初次接触 SSH。
以下为 AI 的回答。
SSH,全称为 Secure Shell,是一种网络协议,用于在不安全的网络上进行安全的远程登录和其他安全网络服务。SSH 提供了一个安全的通道,使你可以在这个通道上执行命令,传输文件,或者打开图形用户界面。
SSH 的主要特点是强大的安全性。它使用了公钥加密技术来验证远程计算机和允许远程计算机验证用户。这意味着,即使网络被监听,也无法获取到用户的密码或其他敏感信息。
使用 MobaXterm 进行 SSH 连接
首先打开 MobaXterm
点击左上角的 Sessions,选择 New session
点击 SSH,因为咱们要进行 SSH 连接。
然后就进入 Linux 系统中了。
接下来就可以操控电脑了。
获得机器 IP 地址
这里因为没有显示器,没法连接蓝牙,于是就先连接网线进行有线连接了。
有两个方法
第一种方法
第二种方法
用 cmd
- 获得本网段的地址
ipconfig /all
- 然后清空 arp 映射表
arp -d *
不过好像不清空也不影响,只是比较乱。
而且一般用户没法删,必须的以管理员身份才能使用该指令。
- 之后遍历网段里面的所有 IP
for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.1.%i
/L 表示这是一个范围循环。%i 是循环变量,(1,1,254) 定义了循环的范围和步长,意思是从 1 开始,每次增加 1,直到 254。DO 就是做,每次循环都要做,后面跟着要做的事情。ping -w 1 -n 1 192.168.1.%i:这是在每次循环中执行的命令。ping 是一个网络工具,用于测试网络连接。-w 1 设置了等待每个回应的超时时间为 1 毫秒,-n 1 设置了发送 ping 请求的次数为 1 次。192.168.1.%i 是被 ping 的 IP 地址,%i 是循环变量,所以这个命令会依次 ping 192.168.1.1 到 192.168.1.254 的所有地址。
- 然后通过 arp -a 命令读取缓存的映射表获取所有与本机连接的设备的 Mac 地址
arp -a
- 最后比照能确定的 IP 地址找到新加入设备的 IP 地址
使用 Linux 来连接 wifi
网线离我挺远的,所以还是想要使用 Wifi 连接网络。其实直接在 Server 中敲命令就可以。
iwconfig
这是我已经连接过的结果:
- eth 0:这通常是第一个以太网接口的名称。"eth"是"Ethernet"的缩写,"0"表示这是第一个接口。这个接口通常用于有线网络连接。
- wlan 0:这通常是第一个无线网络接口的名称。"wlan"是"Wireless LAN"的缩写,"0"表示这是第一个接口。这个接口通常用于无线网络连接。
- lo:这是环回接口(loopback interface)的名称。这个接口主要用于网络服务的测试和本地通信。当你向环回接口发送数据时,数据会立即返回,不会真正发送到网络上。环回接口的 IP 地址通常是 127.0.0.1。
上面是查看已经连接的网,一下才是真的连接没有的 wifi。
nmcli dev wifi
nmcli dev wifi connect 'Your_WiFi_SSID' password 'Your_WiFi_Password'
ip addr show
最后拔掉网线,大功告成。
对了,有可能会出现权限不够的情况
那就 sudo,前面加一个。它的全称是 “SuperUser DO”。它用于执行需要超级用户(也就是 root 用户)权限的命令。
分页查看器
如果遇到进入一页,底部有什么 lines x-xx,然后可以换页的,那么你就是进入到了分页查看器中,按 Space 键或 Enter 键来查看更多的行;可以按 q 键来退出分页查看器。
正式使用 Linux
总算是进入正式进入 Linux 了,到这里我已经花费了整整两个小时写一篇博客了,总算是认识到写博客的艰难了。
如果长时间不登录的话,会中断 ssh 连接。
创建新用户
先查看下用户。
who
cat /etc/passwd
现在是用 root 登录,总怕会因为权限高而弄坏设备,毕竟修一次不便宜。
所以创建新用户。
sudo useradd 新用户的名字
sudo passwd 新用户的名字
注意,这里的密码甚至连位数都不显示,就是完全的空白,不过这样的安全性确实是最高的。
之后就切换用户到新建的用户。
su 新用户的名字
定制终端提示符
之后你会发现跟 root 用户不同,新用户的提示栏只有 $,所以想看看我们是谁就要输入指令。
whoami
在 Linux 中,终端提示符的显示是可以定制的,它通常由环境变量 PS1 控制。root 用户和普通用户的默认提示符可能会有所不同,这是为了提醒用户他们当前是以哪种权限在操作。
ls xxx -a 表示显示隐藏,这个 -a 可以添加到 ls 后的任何地方。
在 Linux 系统中,~/.bashrc 是一个隐藏的 shell 脚本,当用户运行交互式 bash shell 时,这个脚本会被执行。这个文件通常用于设置用户特定的环境变量,如命令别名、shell 提示符、PATH 变量等。
接着就是用 nano 编辑
nano ~/.bashrc
进入编辑页面后就输入
# 设置PS1
PS1="\u@\h:\w\$ "
Nano 编辑器的使用
在 nano 编辑器中,你可以按下 Ctrl + O 来保存你的更改。这将会打开一个提示,询问你要将文件保存到哪里。默认的位置是你最初打开的文件。
在你按下 Ctrl + O 后,底部会显示一个提示,如 File Name to Write: /home/username/.bashrc。如果你想将文件保存到这个位置,只需按下 Enter 键即可。
然后,你可以使用 Ctrl + X 来退出 nano 编辑器。
总的来说,保存并退出 nano 编辑器的步骤如下:
- 按
Ctrl + O 来保存文件。 - 按
Enter 来确认文件名。 - 按
Ctrl + X 来退出编辑器。
不同 shell 导致的问题
执行完上面的步骤,发现还是只有一个 $,这是因为上面的操作更改的只是 bash 这种 shell 的提示符,我们可以通过
echo $SHELL
来查看默认的 shell。
最后发现这个Orangepizero 3_1.0.2_ubuntu_jammy_server_linux 6.1.31.7的默认 shell 位于 bin/sh 中,也就是说使用的应该是类似 dash 的 shell,而非 bash,所以上面的更改就没啥用处。
但是,所幸我们能够更改默认的 shell。
有两个查看 shell 的指令:
echo $SHELL
ps -p $$
这个 cmd 下面就表示当前的 shell
接着更改默认 shell:
chsh -s /bin/bash
这样默认的 shell 就改为了 bash,而提示符也就显示正确了,正如 PS 1 所设置的那样。
Linux 的文件目录
文件是对 I/O 设备的抽象
Linux 很好地体现了这一点
ls /
显示如下:
其实就是这张图:
创建文件夹
一是在创建用户是添加个 -m
sudo useradd -m 用户的名字
sudo mkdir /home/newuser
sudo chown 用户的名字 /home/newuser
激动人心的 hello,world!
总算是可以写 hello,world 了,毕竟我花费颇多财力,时间只为这个,这是我从小白成为大神的第一步!
这里使用 c 语言。
首先新建文件夹
mkdir ~/myfolder
切换到这个文件夹中
cd ~/myfolder
新建 c 文件
touch hello.c
然后打开文件, nano 也好,vim 也罢,都行开始敲经典代码。
nano hello.c
vim hello.c
这里使用 nano,因为方便。
然后用 gcc 来编译程序
gcc hello.c -o hello
这个命令是使用 gcc 编译器来编译 C 程序的命令。下面是这个命令各部分的详细解释:
gcc:这是 GNU 编译器集合(GNU Compiler Collection)的一部分,是用来编译 C 程序的工具。hello.c:这是你要编译的源代码文件。在这个例子中,我们正在编译一个名为 hello.c 的文件。-o:这是一个选项,用来指定输出文件的名称。gcc 默认会创建一个名为 a.out 的输出文件,但你可以使用 -o 选项来改变这个名称。hello:这是 -o 选项的参数,表示输出文件的名称。在这个例子中,我们正在创建一个名为 hello 的输出文件。
所以,gcc hello.c -o hello 这个命令的意思是“使用 gcc 编译器来编译 hello.c 文件,并将输出文件命名为 hello”。
最后文件
./hello
在终端中看到"Hello, World!"的输出。
结果如下:
Vim 编辑器的使用
使用 vim 打开文件后,你可以按 i 键进入插入模式,然后输入你的代码。当你完成后,按 Esc 键退出插入模式,然后输入 :wq 并按 Enter 键保存你的文件并退出 vim。
在 vim 编辑器中,:wq 是一个命令,用于保存(write)当前的更改并退出(quit)编辑器。这个命令是在命令模式下输入的,你可以通过按 Esc 键进入命令模式。
这个命令的各部分含义如下:
::这个符号表示你要输入一个命令。在 vim 中,许多命令都是以这个符号开始的。w:这个字母代表“write”,也就是保存。这个命令将会保存你对当前文件的所有更改。q:这个字母代表“quit”,也就是退出。这个命令将会关闭 vim 编辑器。
所以,:wq 命令的意思是“保存并退出”。这是一个非常常用的 vim 命令。
Vim 与 nano 的区别
vim 和 nano 都是文本编辑器,但它们之间有一些关键的区别:
- 易用性:
nano 是一个简单易用的文本编辑器,它在底部显示所有可用的命令,这对于新手来说非常有用。相比之下,vim 有一个较陡的学习曲线,但一旦你熟悉了它,你就可以非常高效地编辑文本。 - 模式:
vim 使用不同的模式(例如普通模式、插入模式和命令模式)来执行不同的任务。这使得 vim 非常强大,但也可能使新手感到困惑。相比之下,nano 没有模式,所有的操作都是直接执行的。 - 自定义和扩展:
vim 可以通过 .vimrc 配置文件进行高度自定义,你可以使用它来改变 vim 的行为,或者添加新的功能。vim 还有一个活跃的插件生态系统,你可以使用插件来进一步扩展 vim 的功能。相比之下,nano 的自定义和扩展能力较弱。
查看 Linux 中是否安装了某个软件
以 lm-sensors 为例
使用一下指令
dpkg -l | grep lm-sensors
这个命令是由两个子命令组成的,它们通过管道(|)连接在一起。下面是这个命令各部分的详细解释:
dpkg -l:dpkg 是 Debian 和基于 Debian 的系统(如 Ubuntu)的包管理器。-l 选项用于列出所有已安装的包。所以,dpkg -l 命令的输出是你的系统上所有已安装的包的列表。|:这个符号是管道,它将前一个命令的输出作为后一个命令的输入。在这个例子中,我们正在将 dpkg -l 的输出传递给 grep 命令。grep lm-sensors:grep 是一个用于文本搜索的工具。它会搜索输入中的每一行,并输出匹配给定模式的行。在这个例子中,我们正在搜索包含 lm-sensors 的行。
所以,dpkg -l | grep lm-sensors 这个命令的意思是“列出所有已安装的包,然后搜索包含 lm-sensors 的行”。如果 lm-sensors 已经被安装,这个命令将会输出一个包含 lm-sensors 的行。
退出 shell 会话
logout
exit
Ctrl + D
sudo shutdown -h now
sudo reboot
笔者的话
这是我之前费了好长时间写的文章,今天找出来了,我有时自己写博客会想,花费这么长的时间去写一些已经会的知识有什么用呢?现在翻出来这篇两个月前写的博客,我发现有些知识我已经忘了,这可能就是写博客的一些最为简单的意义了,帮助别人,也能帮助自己。