第一周
一、计算机系统
冯诺依曼计算机体系的三个基本原则:
- 采用二进制逻辑
- 程序存储执行
- 五个部分组成
- 运算器(算术和逻辑运算)
- 控制器(从内存中读取指令和执行指令)
- 存储器(内存储器,外存储器)
- 输入设备(键盘,扫描仪等)
- 输出设备(显示器,打印机等)
一个完整的计算机系统主要是由硬件和软件构成:
- 计算机系统
- 硬件
- CPU(中央处理器)
- 运算器
- 控制器
- 存储器
- 内存储器(RAM,ROM)
- 外存储器(硬盘,U盘等)
- 输入设备
- 输出设备
- CPU(中央处理器)
- 软件
- 系统软件
- 操作系统(Windows,GNU/Linux,Unix 等)
- 编译程序(gcc,jdk 等)
- 驱动程序
- ...
- 应用软件
- 文字、图像等处理软件
- ...
- 系统软件
- 硬件
二、进制转换
进制就是逢几进一。二进制是逢二进一,八进制是逢八进一 ...
二进制: 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100
八进制:0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20
十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20
2.1 进制之间的转换
二进制转换为十进制
100101 ==> 37(32+4+1)
1024 512 256 128 64 32 16 8 4 2 1
1 0 0 1 0 1
二进制转换为十六进制
因为2的4次方等于16,所以把二进制数转化为十六进制时,每四位合为一位,转化成十进制数,然后记作对应的十六进制数。
100101 ==> 25
10.0101
2 5
三、安装Vmware
下载链接:
https://www.vmware.com/go/getworkstation-win
下载完成后开始安装,然后一直点击下一步即可
四、GPL和MIT开源协议
GPL(GNU General Public License):GNU通用公共许可协议。
-
GPL协议的目的就是强制代码开源和免费使用。
-
其最大的特点就是“开源的传染性”。也就是说,假设某公司使用了具有GPL协议的代码库,那么他理论上也必须把自己的代码库开源。
MIT(The Massachusetts Institute of TechnologyLicense):麻省理工学院许可协议
-
是众多协议条款中,被广泛使用的其中一种。与其他常见的软件许可协议相比,MIT是相对宽松的软件许可协议。
-
MIT协议允许你任意的使用、复制、修改原MIT代码库,唯一需要遵循的原则就是在你的软件中声明你也使用的是MIT协议就行了。
五、安装Rocky和Ubuntu
5.1 安装rocky 8.5
下载链接:
https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.7-x86_64-dvd1.iso
- 运行Vmware-Workstation,点击文件 -- > 新建虚拟机,然后点击下一步
- 点击下一步
- 选择"稍后安装操作系统",然后点击下一步
- 选择Centos 8 64位,点击下一步
- 设置虚拟机名称和路径,点击下一步
- 设置处理器数量,两个即可,然后点击下一步
- 内存调整为2GB,然后点击下一步
- 设置网络类型,然后点击下一步
- 选择I/O控制器类型,默认即可,然后点击下一步
- 选择磁盘类型,然后点击下一步
- 选择创建新虚拟硬盘,然后点击下一步
- 按自己的需求设置磁盘容量(并不会立即占用宿主机磁盘空间),然后点击下一步
- 磁盘文件,默认即可,然后点击下一步
- 点击"自定义硬件"
- 选择下载的ISO镜像,点击关闭,然后点击完成即可
- 点击开启"开启此虚拟机"
- 光标选择第一个"Install Rocky Linux 8"
- 选择语言,默认即可,然后点击Continue
- 设置硬盘分区
- 选择要安装的硬盘,分区配置默认即可,然后点击Done
- 选择需要安装的软件
- 选择Minimal Install(最小化安装),然后点击Done
- 选择Network & Host 设置主机名和网络
- 设置主机名为" Rocky",然后点击Apply。再开启网络,然后点击Done
- 选择时间时间设置
- 选择亚洲/上海,然后点击Done
- 设置Root密码
- 设置完Root密码后,点击Begin Installation,开始安装
- 安装完成后点击重启系统
- 选择第一个进入系统
3.1.1 使用xshell登录rocky 8
- 系统启动后,登录终端,查看IP地址
- 启动xshell,新建连接
- 点击用户身份验证,然后点击连接
- 点击保存服务器的公钥信息
- 登陆成功
5.2 安装ubuntu 22.04
下载链接:
https://releases.ubuntu.com/22.04.1/ubuntu-22.04.1-live-server-amd64.iso
-
创建虚拟机,参考上面的方法。
-
点击开启"开启此虚拟机"
- 选择第一个选项
- 设置语言,然后按Enter
- 设置键盘,默认即可,然后选择Done
- 选择最小化安装,然后选择Done
- 设置IP地址
- 选择DHCP自动获取IP地址(也可以设置静态IP地址),然后点击save,然后选择Done
- 设置代理服务器,不设置,选择Done
- 设置安装源,默认是国外地址,后期可以更换成阿里云的安装源
- 选择Continue without updating,取消更新
- 设置硬盘分区,其它设置默认即可,然后选择Done
- 磁盘分区信息:/boot分区、根分区和交换分区信息,确认信息后选择Done
- 选择"Continue"继续
- 设置用户名密码
- 选择安装ssh
- 安装完成后重启系统
5.2.1 使用xshell登录ubuntu 22.04
ubuntu默认不允许以root的身份登录系统
# 设置root密码
$ sudo passwd root
# 修改sshd配置文件
$ sudo vim /etc/ssh/sshd_config
PermitRootLogin yes # 修改此选项为"yes"
# 重启服务
$ systemctl restart sshd
六、使用tab键补全路径
在shell中支持使用tab键补全命令或路径,这是shell的特征之一。
# 当输入cd /h + tab键时,系统则自动补全了路径,因为/目录下以h开头的目录/文件只有一个
[root@Rocky ~]# cd /home/
# 创建一个目录
[root@Rocky ~]# mkdir /hello
# 再次使用tbl键补全,此时就匹配到了刚才创建的hello目录
[root@Rocky ~]# cd /h^I
hello/ home/
# tab键还可以补全命令,列出以ls开头的命令
[root@Rocky ~]# ls^I
ls lsblk lsgpio lsiio lsipc lslogins lsmd lsmem lsns lspci lsusb
lsattr lscpu lshw lsinitrd lslocks lsmcli lsmdev lsmod lsof lsscsi lsusb.py
七、 内部命令和外部命令
Linux的命令可以分为内部命令和外部命令。
- 内部命令:每次开机后常驻在内存中,使用频率较高。
- 外部命令:外部命令在硬盘中,每次使用时读取$PATH变量获取路径。
使用type命令来查看命令的类型:
# cd命令是内部命令
[root@Rocky ~]# type cd
cd is a shell builtin
# mkdir命令是外部命令
[root@Rocky ~]# type mkdir
mkdir is /usr/bin/mkdir
查看帮助的方法
# 内部命令使用 "help command" 查看帮助
[root@Rocky ~]# help cd
cd: cd [-L|[-P [-e]] [-@]] [dir]
Change the shell working directory.
Change the current directory to DIR. The default DIR is the value of the
HOME shell variable.
# 外部命令使用 "command --help" 查看帮助
[root@Rocky ~]# mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
八、命令行快捷键
shell 命令行支持使用快捷键。
ctrl+a # 快速跳转到行首
ctrl+e # 快速跳跳转行尾
ctrl+k # 快速删除当前光标到行尾
ctrl+u # 快速删除(不含)光标到行首
ctrl+c # 快速取消执行的命令
九、Linux目录结构说明
[root@Rocky ~]# ls /
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
目录说明:
/bin # 存放可执行的二进制程序
/boot # 存放系统引导程序
/dev # 设备文件目录
/etc # 配置文件目录
/home # 普通用户家目录
/lib # 共享库目录
/lib64 # 64位程序的共享库目录
/media # u盘,光盘等设备挂载目录
/mnt # 用于临时挂载文件系统
/opt # 可选的,用于存放应用程序
/proc # 存放内存中的信息
/root # root用户家目录
/run # 一个临时文件系统,存放系统至启动后的信息
/sbin # 存放管理员使用的可执行的二进制程序
/srv # 存放一些服务启动之后需要读取的数据
/sys # 系统目录,存放设备、驱动程序以及部分内核特性信息
/tmp # 临时目录
/usr # 共享资源目录,大多数应用程序在此目录下
/var # 存放着在不断扩充着的东西,如日志
十、文件通配符
通配符用于匹配文件
'*'表示任意字符,
'?'表示单个字符,
[a - z]表示单个小写字母,
[A - Z]表示单个大写字母,
[a - Z]表示单个字母
[0 - 9]表示单个数字
[[:alpha:]]表示任意字母
[[:upper:]]任意小写字母
[[:lower:]]表示任意小写字母
[[:digit:]]表示所有数字
[[:alnum:]]表示任意字母加数字
[[:punct:]]表示标点
十一、文件系统通过路径查找磁盘上的文件
inode(索引节点),Linux系统中文件的文件名和文件数据是分开存储的,而文件数据又分为实际数据与元信息。元信息类似于文件属性,包括文件的创建者、创建日期、文件大小、文件权限等信息。实际的数据存储在块中,而存储文件元信息的区域就叫做inode,因此一个文件必须占用一个 inode。
每个inode都有一个号码(即 inode号),操作系统用 inode号码来识别不同的文件。
查看inode号
[root@Rocky ~]# ls -i /etc/hosts
16812170 /etc/hosts
当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码;通过inode号码,获取inode信息,根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据;如果没有就会返回。
十二、硬链接和软链接
链接用于一个文件指向另一个文件,分为硬链接和软链接。
- 硬链接:硬链接的inode号是一样的,相当于一个文件有两个不同的名字,当删除源文件时,链接文件也能正常访问。硬链接不能跨分区。
- 软链接:软链接的inode号不一样,当源文件删除时,链接文件会失效。软链接可以跨分区。
创建硬链接
# 创建硬链接
[root@Rocky ~]# echo hello > abc
[root@Rocky ~]# ln abc 123
# 查看链接文件,链接数为2
[root@Rocky ~]# ll -i
total 12
34477180 -rw-r--r--. 2 root root 6 Dec 28 00:42 123
34477180 -rw-r--r--. 2 root root 6 Dec 28 00:42 abc
# 删除源文件,链接文件也能正常访问
[root@Rocky ~]# rm -rf abc
[root@Rocky ~]# cat 123
hello
创建软链接
[root@Rocky ~]# echo hello > abc
[root@Rocky ~]# ln -s abc 123
[root@Rocky ~]# ll -i
total 4
34477180 lrwxrwxrwx. 1 root root 3 Dec 28 00:44 123 -> abc # ./123指向了./abc
34477133 -rw-r--r--. 1 root root 6 Dec 28 00:44 abc
# 访问123相当于访问abc
[root@Rocky ~]# cat 123
hello
# 当删除源文件,链接文件随之失效
[root@Rocky ~]# rm -rf abc
[root@Rocky ~]# ll
total 0
lrwxrwxrwx. 1 root root 3 Dec 28 00:44 123 -> abc
[root@Rocky ~]# cat 123
cat: 123: No such file or directory
十三、Linux命令工作流程
前面说过Linux命令分为外部命令和内部命令,内部命令常驻在内存中,执行内部命令直接从内存中读取。如果执行的是外部命令,则按照以下的流程查找命令:
- 如果命令是别名,则直接执行别名。否则进入下一步。
- 如果命令是函数,则直接执行函数。否则加入下一步。
- 查看命令是否缓存在hash表中,则使用hash表中的路径在硬盘中查找命令。否则执行下一步。
- 读取$PATH变量的路径在硬盘中查找命令。
- 如果还是没有找到命令,则提示:"command not found"。
十四、重定向和管道符
执行一个 Shell 命令时通常会自动打开三个标准文件:
[root@Rocky ~]# cat &
[2] 8193
[root@Rocky ~]# ll /proc/8193/fd
total 0
lrwx------. 1 root root 64 Dec 28 01:14 0 -> /dev/pts/0
lrwx------. 1 root root 64 Dec 28 01:14 1 -> /dev/pts/0
lrwx------. 1 root root 64 Dec 28 01:14 2 -> /dev/pts/0
-
标准输入(stdin),代码为0,默认接受来自终端窗口的输入。
-
标准输出(stdout),代码为1,默认输出到终端窗口。
-
标准错误输出(stderr),代码为2,默认输出到终端窗口。
进程将从标准输入文件中得到输入数据,将正常输出数据输出]到标准输出文件,而将错误信息送到标准错误文件中。
14.1 重定向
> | 1> # 把标准输出重定向到文件
2> # 把标准错误重定向到文件
&> # 同时把标准输出和标准错误重定向到文件
>> # 标准输出追加重定向
2>> # 标准错误追加重定向
< # 输入重定向,将文件发送给命令
<< # 内联重定向,将字符串发送给命令
# echo命令用于打印字符串等信息,将信息(标准输出)重定向到abc文件
[root@Rocky ~]# echo hello > abc
[root@Rocky ~]# cat abc
hello
# 将标准错误重定向到abc文件
[root@Rocky ~]# ldf 2> abc
[root@Rocky ~]# cat abc
-bash: ldf: command not found
# 追加重定向
[root@Rocky ~]# echo hello >> abc
[root@Rocky ~]# cat abc
-bash: ldf: command not found
hello
# 输入重定向
[root@Rocky ~]# grep "root" < /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@Rocky ~]# wc -l < /etc/passwd
33
# 内联重定向,需要指定一个文本符号来标记起始和结束,任何字符串都可以作为文本标记,但是在数据的开始和结尾必须一致。一般使用EOF作为文本标记。
# cat命令读取字符串,然后将标准输入重定向到hello文件中
[root@Rocky ~]# cat > hello <<EOF
> hello
> EOF
[root@Rocky ~]# cat hello
hello
14.2 管道符
管道符 | 加在两个命令的中间:
command1 | command2
前一个命令的标准输出作为后续命令的标准输入。
[root@Rocky ~]# echo 123 | cat
123
[root@Rocky ~]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
十五、用户、组和权限管理
管理用户的命令
- useradd:创建用户
- userdel:删除用户
- usermod:修改用户属性
# 创建用户jack,然后连同家目录也一起删除
[root@Rocky ~]# useradd jack
[root@Rocky ~]# id jack
uid=1000(jack) gid=1000(jack) groups=1000(jack)
[root@Rocky ~]# userdel -r jack
# 创建用户admin,并添加至root组
[root@Rocky ~]# useradd admin
[root@Rocky ~]# usermod admin -G root
[root@Rocky ~]# id admin
uid=1000(admin) gid=1000(admin) groups=1000(admin),0(root)
组管理命令
- groupadd:创建组
- groupdel:删除组
- groupmod:修改组属性
# 增加service组
[root@Rocky ~]# groupadd service
# 修改gid
[root@Rocky ~]# groupmod -g 500 service
# 删除组
[root@Rocky ~]# groupdel service
# 从root组中移除用户
[root@Rocky ~]# gpasswd -d admin root
Removing user admin from group root
文件权限管理命令
- chmod:修改文件的权限
- chown:修改文件的所有者/组
# 创建文件,取消other者的所有权限
[root@Rocky ~]# touch test
[root@Rocky ~]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 28 01:58 test
[root@Rocky ~]# chmod o-r test
[root@Rocky ~]# ll
total 0
-rw-r-----. 1 root root 0 Dec 28 01:58 tes
# 给group者添加写的权限
[root@Rocky ~]# chmod g+w test
[root@Rocky ~]# ll
total 0
-rw-rw----. 1 root root 0 Dec 28 01:58 test
# 修改文件的所属组为admin
[root@Rocky ~]# chown .admin test
[root@Rocky ~]# ll
total 4
-rw-rw----. 1 root admin 4 Dec 28 02:04 test