本博客用于Linux实训课程讲义,适用于对Linux初学者的教学老师。如果你自己已经使用了linux很久,但一时间不知道该对Linux初学者讲什么东西不知道从何讲起,你可以参考本博客。
(部分章节内容不够详细,可以进行一定补充)
Linux 教程 | 菜鸟教程
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
目前国内 Linux 更多的是应用于服务器上,而桌面操作系统更多使用的是 Windows。主要区别如下
比较 | Windows | Linux |
---|---|---|
界面 | 界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同 | 图形界面风格依发布版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操作方法也几乎一致。 |
驱动程序 | 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 | 由志愿者开发,由 Linux 核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。 |
使用 | 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 | 图形界面使用简单,容易入门。文字界面,需要学习才能掌握。 |
学习 | 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。 | 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。 |
软件 | 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。 | 大部分软件都可以自由获取,同样功能的软件选择较少。 |
Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。
最显著对比:与windows不同,Linux没有C盘D盘,它的文件系统从一个根—"/"衍生出来
NTFS FAT32 每一个文件大小《= 4GB
参考:【Linux】了解根目录下每个文件的作用_linux根目录下的全部文件夹-CSDN博客
Linux 文件系统遵循文件系统层次结构标准(FHS),它规定了各个目录的用途和内容,使得不同 Linux 发行版之间的文件系统结构具有一定的统一性和兼容性。以下是 FHS 中主要目录及其用途的详细介绍:
1. **挂载文件系统** :在 Linux 中,要访问一个存储设备(如硬盘分区、光盘、USB 存储设备等)上的文件,必须先将其挂载到文件系统树中的某个目录下。使用 mount 命令可以实现文件系统的挂载操作,例如:
* `mount /dev/sdb1 /mnt` :将位于 /dev/sdb1 的分区挂载到 /mnt 目录下,之后就可以通过 /mnt 目录访问该分区中的文件了。
2. **卸载文件系统** :当不再需要访问某个挂载的文件系统时,可以使用 umount 命令将其卸载,例如:
* `umount /mnt` :卸载之前挂载在 /mnt 目录下的文件系统,在卸载之前需要确保没有进程正在使用该文件系统,否则可能会导致数据丢失或系统错误。
3. **查看文件系统信息** :可以使用 df 命令查看系统中已挂载的文件系统的使用情况,包括磁盘空间使用量、已用空间、可用空间、挂载点等信息,例如:
* `df -h` :以人类可读的格式(如 GB、MB)显示文件系统的使用情况。
4. **格式化文件系统** :在新分区或存储设备上创建文件系统时,需要进行格式化操作,使用 mkfs 命令可以格式化文件系统,例如:
* `mkfs.ext4 /dev/sdb1` :将 /dev/sdb1 分区格式化为 ext4 文件系统,在格式化之前需要确保该分区中没有重要数据,因为格式化操作会清除分区上的原有数据。
5. **文件系统检查与修复** :定期对文件系统进行检查和修复是维护系统稳定性和数据完整性的关键步骤,使用 fsck 命令可以检查和修复文件系统中的错误,例如:
* `fsck /dev/sdb1` :对 /dev/sdb1 分区进行文件系统检查和修复操作,在执行该命令之前,最好先卸载该文件系统,以避免数据损坏和系统不稳定的情况发生。
通过对比 Windows 与 Linux 文件系统,并详细介绍 Linux 文件系统的特点和操作方法,希望初学者能够更好地理解和掌握 Linux 文件系统的知识,为进一步深入学习和使用 Linux 系统奠定坚实的基础。在实际使用过程中,随着实践经验的不断积累,你将能够更加熟练地运用 Linux 文件系统进行文件管理和系统维护工作。
参考链接 如何在VMware17下安装并运行CentOS Stream 9_centos steam-CSDN博客
安装文件:
通过网盘分享的文件:VMware-workstation-full-17.6.3-24583834.exe
链接: https://pan.baidu.com/s/1WsBzbpTuaqM86l8y3I2xXw?pwd=ihch 提取码: ihch
–来自百度网盘超级会员v4的分享
通过网盘分享的文件:CentOS-Stream-9-latest-x86_64-dvd1.iso
链接: https://pan.baidu.com/s/1ac4Is6hKH_BHhdeVa-tR8g?pwd=af1s 提取码: af1s
–来自百度网盘超级会员v4的分享
Linux 命令行常用快捷键及汇总 - 知乎
常用的:
ctrl + c 终止程序
ctrl + shfit + c : 复制
ctrl + shift + v : 粘贴
ctrl + a : 将光标移动到行首 等于 home键
ctrl + e : 将光标移动到行末尾 等于 end键
ctrl + left : 光标往左到前一个word
ctrl + right: 光标往右到后一个word
(与上面类似的有 alt + f alt + b)
绝对路径:
从根目录出发的完整路径,比如: /home/ricardo/1.txt
相对路径:
/home/ricardo/1.txt 相对于 /home/ricardo 的相对路径就是 ./1.txt 或者 1.txt
相对路径还包括当前路径和上一级路径
当前路径:
假设/home/ricardo为当前所在的路径,那么其就可以简化为 ./ 或者什么都不写
上一级路径:
/home/ricardo的上一层路径是 /home, 如果要切换到上一层路径里面去只写绝对路径的话的就会非常难受,(比如/home/ricardo/datasets/TUM/rgbd_datasets_fr3_xyz/rgb/想切换到上一级路径里面去的话就需要使用
cd /home/ricardo/datasets/TUM/rgbd_datasets_fr3_xyz)
所以使用 … 来表示上一级路径,简化输入繁琐度。
/home/ricardo要切换到/home 只需要 cd …
/home/ricardo/datasets/TUM/rgbd_datasets_fr3_xyz/rgb/切换到 /home/ricardo/datasets/TUM/rgbd_datasets_fr3_xyz/ 只需要 cd …
假如目前的用户主目录的文件结构如下:
[ricardo@localhost ~]$ tree
.
├── 公共
├── 模板
├── 视频
├── 图片
├── 文档
├── 下载
├── 音乐
├── 桌面
├── data
│ ├── cpp
│ │ └── 1.cpp
│ ├── java
│ └── python
└── test.cpp
创建data\cpp、java、python文件夹以及1.cpp文件:
#练习
mkdir ***
touch ***
切换到 data/python路径下:
#练习
cd ***
使用一个命令展示1.cpp的文件内容
#练习 cat命令可以查看文件的内容,一些二进制文件的就不行啦
cat ***
更换1.cpp的名字为2.cpp
mv *** *** #mv 源文件路径 目标文件路径
将2.cpp移动它的上一层目录
mv *** ***
-l
-a
ls //查看当前目录下的所有目录和文件
ls -a //查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l //列表查看当前目录下的所有目录和文件(列表查看,显示更多信息),与命令"ll"效果一样
ls /bin //查看指定目录下的所有目录和文件
得到root用户的权限,在执行命令前面加上sudo
切换root也可以使用:
su - root
#或者
su
介绍linux系统的文件系统
各个文件系统的意义
文件夹、文件路径
cd / //切换到根目录
cd /bin //切换到根目录下的bin目录
cd ../ //切换到上一级目录 或者使用命令:cd ..
cd ~ //切换到home目录
cd - //切换到上次访问的目录
cd xx(文件夹名) //切换到本目录下的名为xx的文件目录,如果目录不存在报错
cd /xxx/xx/x
mkdir [文件夹名]
mkdir -p 文件夹名/子文件夹名
touch 文件名
创建一个文件
rm 文件名 //删除当前目录下的文件
rm -f 文件名 //删除当前目录的的文件(不询问)
rm -r 文件夹名 //递归删除当前目录下此名的目录
rm -rf 文件夹名 //递归删除当前目录下此名的目录(不询问)
rm -rf * //将当前目录下的所有目录和文件全部删除
rm -rf /* //将根目录下的所有文件全部删除【慎用!相当于格式化系统】
mv 当前目录名 新目录名 //修改目录名,同样适用与文件操作
mv /usr/tmp/tool /opt //将/usr/tmp目录下的tool目录剪切到 /opt目录下面
mv -r /usr/tmp/tool /opt //递归剪切目录中所有文件和文件夹
cp /usr/tmp/tool /opt //将/usr/tmp目录下的tool目录复制到 /opt目录下面
cp -r /usr/tmp/tool /opt //递归剪复制目录中所有文件和文件夹
打印当前所在路径
cat 文件名
输出文件内容,常用于文本文件
展示当前运行的进程资源使用情况。类似于windows的任务管理器
打印命令历史的记录
tar -zcvf 打包压缩后的文件名 要打包的文件
参数说明:z:调用gzip压缩命令进行压缩; c:打包文件; v:显示运行过程; f:指定文件名;
示例:
tar -zcvf a.tar file1 file2,... //多个文件压缩打包
tar -zxvf a.tar //解包至当前目录
tar -zxvf a.tar -C /usr------ //指定解压的位置
unzip test.zip //解压*.zip文件
unzip -l test.zip //查看*.zip文件的内容
添加用户
需要使用root权限:
useradd -m -s /bin/bash testuser
useradd
:这是 Linux 系统中用于创建新用户的命令,位于 /usr/sbin/useradd
,只有具有 root 权限的用户才能执行该命令来创建新用户。-m
:这个选项表示自动创建该用户的主目录,主目录的路径通常为 /home/用户名
,在这里就是 /home/testuser
。如果省略这个选项,系统不会自动创建主目录,用户需要手动创建或者在后续登录时可能会出现找不到主目录的情况。-s /bin/bash
:-s
选项用于指定用户的登录 shell,这里指定为 /bin/bash
,即使用 bash shell 作为该用户的默认登录 shell。当用户登录系统时,bash shell 会作为其命令行环境启动,用户可以在其中执行各种命令和操作。如果不指定该选项,系统通常会使用默认的 shell(通常是 /bin/sh
或者 /bin/bash
等,具体取决于系统的配置)。给用户设置密码(需要root权限)
passwd [用户名]
#可以设置简单的密码
[root@localhost ricardo]# echo 123 | passwd --stdin testuser
设置好用户之后,可以进行/etc/passwd的查看
cat /etc/passwd
最后一行是
testuser:x:1001:1001::/home/testuser:/bin/bash
testuser
:
x
:
/etc/passwd
中,而是将密码加密后存储在 /etc/shadow
文件中,因此这里用 x
作为占位符。这样做是为了提高安全性,因为 /etc/passwd
文件是所有用户都可以读取的,而 /etc/shadow
文件只有具有特定权限的用户(如 root)才能读取。1001
:
testuser
的 UID 是 1001,表明它是一个普通用户。1001
:
testuser
的主组的 GID 是 1001。通常情况下,当使用 useradd -m -s
命令创建用户时,系统会自动创建一个与用户名同名的组,并将该用户的主组设置为这个新创建的组,这个组的 GID 通常和用户的 UID 相同。Test User,,,,
这样的内容,其中各个子字段可以用逗号分隔,分别代表用户的姓名、办公室房间号、办公电话、家庭电话等。/home/testuser
:
/home
目录下,并且以用户名作为目录名。在这里,testuser
的主目录是 /home/testuser
。/bin/bash
:
/bin/bash
是 Bash(Bourne Again Shell)的路径,Bash 是 Linux 系统中常用的 shell 之一。如果这个字段为空或者指向一个不存在的 shell,用户可能无法正常登录或者登录后无法执行命令。添加一个用户组
[root@localhost ~]# groupadd group1
将之前创建的 “testuser” 用户加入到 “group1” 组中(
[root@localhost ~]# usermod -aG group1 testuser
删除用户
[root@localhost ~]# userdel -r testuser
-r是用来删除其中的用户主目录的内容
[root@localhost ~]# groupdel group1
基本上 vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)。
vim 1.cpp #可以编辑对应的文件
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符,比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。
以下是普通模式常用的几个命令:
i – 切换到输入模式,在光标当前位置开始输入文本。
x – 删除当前光标所在处的字符。
: – 切换到底线命令模式,以在最底一行输入命令。
a – 进入插入模式,在光标下一个位置开始输入文本。
o:在当前行的下方插入一个新行,并进入插入模式。
O – 在当前行的上方插入一个新行,并进入插入模式。
dd – 剪切当前行。
yy – 复制当前行
gg – 移动到文本最前面
p(小写) – 粘贴剪贴板内容到光标下方。
P(大写)-- 粘贴剪贴板内容到光标上方。
u – 撤销上一次操作。
Ctrl + r – 重做上一次撤销的操作。
:w – 保存文件。
:q – 退出 Vim 编辑器。
:q! – 强制退出Vim 编辑器,不保存修改。
若想要编辑文本,只需要启动 Vim,进入了命令模式,按下 i 切换到输入模式即可。
命令模式只有一些最基本的命令,因此仍要依靠底线命令行模式输入更多命令。
在命令模式下按下 i 就进入了输入模式,使用 Esc 键可以返回到普通模式。
在输入模式中,可以使用以下按键:
在命令模式下按下 :(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
:w
:保存文件。:q
:退出 Vim 编辑器。:wq
:保存文件并退出 Vim 编辑器。:q!
:强制退出Vim编辑器,不保存修改。按 ESC 键可随时退出底线命令模式。
vim sum_to_n.sh
#!/bin/bash
# 检查是否提供了参数
if [ $# -ne 1 ]; then
echo "Usage: $0 "
exit 1
fi
# 获取输入的数字n
n=$1
# 检查输入是否为正整数
if ! [[ "$n" =~ ^[0-9]+$ ]]; then
echo "Error: Please provide a positive integer."
exit 1
fi
# 初始化总和为0
sum=0
# 使用循环计算从1到n的和
for (( i=1; i<=n; i++ ))
do
sum=$((sum + i))
done
# 输出结果
echo "The sum of numbers from 1 to $n is: $sum"
chmod +x sum_to_n.sh
./sum_to_n.sh 10
把命令写到create.sh脚本里面,自动创建文件夹data
CentOS-Stream-9 CentOS9 配置国内yum源-阿里云源 - 知乎
采用gedit的方式。
如果没有gedit,提醒先安装
sudo yum install gedit
如果采用vim的方式,那么需要先介绍对应的编辑方法
yum install git-core
鼓励学生自行尝试安装 tree、git等包
基本网络信息的查看:
ifconfig、route命令的使用
ssh 用户名@ip
redhat-config-network
是红帽系列 Linux 系统里的图形化网络配置工具,能直观设置网络参数,以下是详细使用方法:
但是本实训使用的linux较新,所以该命令找不到,使用nm-connection-editor
需以 root 用户(或具备 sudo 权限用户,执行时输入对应密码)登录系统,因网络配置涉及系统关键设置,普通用户无操作权限。
打开终端(图形界面下的终端模拟器 ),输入 nm-connection-editor
命令回车,就能启动图形化配置界面 。
如果提示命令不存在,CentOS 系统可通过 yum install NetworkManager-gnome
安装(需确保系统已配置好软件源 );Ubuntu 系统用 sudo apt install network-manager-gnome
安装 。
启动后,会显示当前系统已有的网络连接列表(比如有线连接、无线连接等 ),常见操作如下:
点击界面右上角 “+”(添加)按钮 → 选择连接类型(如 “Ethernet” 以太网、“Wi-Fi” 无线网络、“Bridge” 网桥等 )→ 进入对应配置页面填参数 。
以配置有线网络(Ethernet )静态 IP 为例:
选 “Ethernet” 后,在新窗口填 “连接名称”(自定义,方便识别 )、“设备 MAC 地址”(可选,一般自动识别网卡 )。
切换到
“IPv4 设置” 标签页
:
192.168.1.100
)、“子网掩码”(如 255.255.255.0
)、“网关”(如 192.168.1.1
);8.8.8.8
、114.114.114.114
);点 “保存”,新的有线网络连接就创建好了 。
在连接列表里,找到要改的连接(比如默认的 “Wired connection 1” ),双击或选中后点齿轮图标 进入编辑界面,可修改 IP、DNS、网关等参数,改完点 “保存” 。
选中要删的连接,点界面下方 “-”(删除)按钮 ,确认后即可移除该网络连接配置 。
配置多个连接后,在图形化桌面的网络管理图标(一般在任务栏右上角 )里,能看到所有可用连接,点选即可切换;也可在 nm-connection-editor
里,右键点选连接,选 “激活” 启用 。
若要配置网桥(Bridge ,把多个网络接口桥接,让它们在同一网络段通信 ),操作如下:
br0
)。eth0
)。nmcli connection reload
重新加载配置,再用 nmcli connection up 连接名称
手动激活(比如 nmcli connection up "My Ethernet"
)。ip addr
看网卡 IP 、网桥等是否按配置生效;ping 网关
、ping 外网域名(如 ping www.baidu.com )
测试网络连通性;nslookup 域名
检查 DNS 解析是否正常 。对于以太网口 ens160,使用如下命令来激活
nmcli connection up ens160
nm-connection-editor
无法运行,可换用文本界面工具 nmtui
(功能类似,纯字符交互 ),或直接用 nmcli
命令行配置(更适合服务器、无图形环境场景 )。简单说,nm-connection-editor
就是通过图形界面 “点一点、填一填” 来配网络,适合不太习惯纯命令行的场景,配完记得验证生效情况,有问题结合 nmcli
排查就行~
开发项目往往需要大量地编辑代码,vim、记事本终究只是一个轻量的编辑器。相比与vscode这种扩展性极好,插件丰富的编辑器,vscode更适合写代码。当然其他的一些IDE如CLion、IDEA等也可以
对于一些Linux机器,如果内存、CPU、磁盘等资源较丰富,且其安装了可视化界面,那么完全可以在该机器上面安装vscode。但是如果该机器是云服务器或者没有UI界面,只需要使用远程连接(内部依然是ssh user@ip的原理)就可以像在本机一样开发。
当然其他具有远程连接功能的IDE也可以。这里就只介绍VScode
主机名也可以替换为ip地址。
单文件
gcc -o 可执行文件名 源码文件名
#如 gcc -o fabo fabo.cpp
多文件
gcc -o 可执行文件名 源码文件名 [源码文件名] ....
#如 gcc -o fabo main.cpp fabo_fun.cpp
最基本的命令需要介绍这三个
git add .
git commit -m “具体注释信息”
git push origin master