第一周

一、计算机系统

冯诺依曼计算机体系的三个基本原则:

  • 采用二进制逻辑
  • 程序存储执行
  • 五个部分组成
    • 运算器(算术和逻辑运算)
    • 控制器(从内存中读取指令和执行指令)
    • 存储器(内存储器,外存储器)
    • 输入设备(键盘,扫描仪等)
    • 输出设备(显示器,打印机等)

一个完整的计算机系统主要是由硬件和软件构成:

  • 计算机系统
    • 硬件
      • CPU(中央处理器)
        • 运算器
        • 控制器
      • 存储器
        • 内存储器(RAM,ROM)
        • 外存储器(硬盘,U盘等)
      • 输入设备
      • 输出设备
    • 软件
      • 系统软件
        • 操作系统(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
  1. 运行Vmware-Workstation,点击文件 -- > 新建虚拟机,然后点击下一步

  1. 点击下一步

  1. 选择"稍后安装操作系统",然后点击下一步

  1. 选择Centos 8 64位,点击下一步

  1. 设置虚拟机名称和路径,点击下一步

  1. 设置处理器数量,两个即可,然后点击下一步

  1. 内存调整为2GB,然后点击下一步

  1. 设置网络类型,然后点击下一步

  1. 选择I/O控制器类型,默认即可,然后点击下一步

  1. 选择磁盘类型,然后点击下一步

  1. 选择创建新虚拟硬盘,然后点击下一步

  1. 按自己的需求设置磁盘容量(并不会立即占用宿主机磁盘空间),然后点击下一步

  1. 磁盘文件,默认即可,然后点击下一步

  1. 点击"自定义硬件"

  1. 选择下载的ISO镜像,点击关闭,然后点击完成即可

  1. 点击开启"开启此虚拟机"

  1. 光标选择第一个"Install Rocky Linux 8"

  1. 选择语言,默认即可,然后点击Continue

  1. 设置硬盘分区

  1. 选择要安装的硬盘,分区配置默认即可,然后点击Done

  1. 选择需要安装的软件

  1. 选择Minimal Install(最小化安装),然后点击Done

  1. 选择Network & Host 设置主机名和网络

  1. 设置主机名为" Rocky",然后点击Apply。再开启网络,然后点击Done

  1. 选择时间时间设置

  1. 选择亚洲/上海,然后点击Done

  1. 设置Root密码

  1. 设置完Root密码后,点击Begin Installation,开始安装

  1. 安装完成后点击重启系统

  1. 选择第一个进入系统

3.1.1 使用xshell登录rocky 8

  1. 系统启动后,登录终端,查看IP地址

  1. 启动xshell,新建连接

  1. 点击用户身份验证,然后点击连接

  1. 点击保存服务器的公钥信息

  1. 登陆成功

5.2 安装ubuntu 22.04

下载链接:

https://releases.ubuntu.com/22.04.1/ubuntu-22.04.1-live-server-amd64.iso
  1. 创建虚拟机,参考上面的方法。

  2. 点击开启"开启此虚拟机"

  1. 选择第一个选项

  1. 设置语言,然后按Enter

  1. 设置键盘,默认即可,然后选择Done

  1. 选择最小化安装,然后选择Done

  1. 设置IP地址

  1. 选择DHCP自动获取IP地址(也可以设置静态IP地址),然后点击save,然后选择Done

  1. 设置代理服务器,不设置,选择Done

  1. 设置安装源,默认是国外地址,后期可以更换成阿里云的安装源

  1. 选择Continue without updating,取消更新

  1. 设置硬盘分区,其它设置默认即可,然后选择Done

  1. 磁盘分区信息:/boot分区、根分区和交换分区信息,确认信息后选择Done

  1. 选择"Continue"继续

  1. 设置用户名密码

  1. 选择安装ssh

  1. 安装完成后重启系统

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命令分为外部命令和内部命令,内部命令常驻在内存中,执行内部命令直接从内存中读取。如果执行的是外部命令,则按照以下的流程查找命令:

  1. 如果命令是别名,则直接执行别名。否则进入下一步。
  2. 如果命令是函数,则直接执行函数。否则加入下一步。
  3. 查看命令是否缓存在hash表中,则使用hash表中的路径在硬盘中查找命令。否则执行下一步。
  4. 读取$PATH变量的路径在硬盘中查找命令。
  5. 如果还是没有找到命令,则提示:"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
posted @ 2022-12-28 03:17  fengkm  阅读(76)  评论(0编辑  收藏  举报