一、计算机发展相关历史,服务器硬件和计算机分类
1.1 计算机发展相关历史
电子管时代:第一代计算机(1945-1957)
晶体管时代:第二代计算机(1958-1964)
集成电路时代:第三代计算机(1965-1970)
大规模集成电路时代:第四代计算机(1972-至今)
量子计算机/生物计算机:第五代计算机(已经开始啦)
1.2 服务器硬件
服务器硬件主要由 CPU、主板、内存、硬盘、网卡及其他相关硬件组成。
CPU:中央处理器。由控制器和运算器组成,是整个计算机系统中最重要的部分。
主板:配置在机箱内,安装了组成计算机的主要电路系统,将CPU、内存的硬件通过电路连接在一起,是计算机最基本最重要的组件之一。
内存:介于CPU与外部存储介质之间,是对外部存储中程序与数据进行高速计算时存放指令和数据的中间场所,由可以输入输出和存储的集成电路构成。
硬盘:存储程序和数据的主要介质,稳定性强。分为固态硬盘和机械硬盘。
网卡:与其他设备连接,通信的介质。
其他相关硬件:包括远程管理卡,阵列卡,电源,显卡,风扇,机柜等。
1.3 计算机分类
按规模分:超级计算机,大型计算机,小型计算机,微型计算机
按功能分:分为客户端与服务器。
其中服务器按功能可分为web服务器,数据库服务器,日志服务器等,按外型可分为塔式服务器,机架式服务器,刀片式服务器。
二、VMware软件、rocky、ubuntu系统安装,xshell登录系统
2.1 VMware安装
登录 VMware 官网下载安装:VMware (naifeiplus.com)
2.2 rocky安装
步骤一:
准备好ios光盘镜像文件,放在本地磁盘下的任意位置。
镜像下载地址:https://mirrors.nju.edu.cn/rocky-vault/8.6/isos/x86_64/Rocky-x86_64-dvd.iso
步骤二:
打开 vmware ,点击左上角“文件 - 新建虚拟机”,按照需要进行选择,最后点击完成即可。注意以下几点:
- 选择“稍后安装操作系统”;
- 操作系统选择 linux,版本选择“CentOS 8 64位”;
- 处理器数量建议选择2,内存建议选择2048M(不用太在意,后面可以调整);
- 磁盘选择创建新的虚拟磁盘,大小建议200G,选择“将虚拟磁盘存储为单个文件”。
步骤三:
左侧菜单栏,定位到刚新建的虚拟机,右键设置。
选择镜像。
步骤四:
点击开启此虚拟机开始安装。
后续选择 "Install rocky Linux 8",选择英语,选择磁盘分区,时区选择 shanghai,开启网络。设置主机名(自定义),设置root用户和密码,创建普通用户和密码(密码自己设置,尽量简单)。
点击 "Begin Installation",等待安装结束。
步骤五:
重启系统,同意许可,安装完成,显示登录界面,即可正常使用。
2.3 ubuntu22.04安装
安装步骤与rocky大同小异,此处不再详细介绍。
iso镜像下载地址:http://mirrors.aliyun.com/ubuntu-releases/22.04/ubuntu-22.04.2-live-serveramd64.iso
注意以下几点:
- 选择国内镜像源,加速下载过程:https://mirrors.tuna.tsinghua.edu.cn/ubuntu/;
- 选择安装 openSSH server;
- 安装完成后,需要关闭虚拟机,在虚拟机设置里面将iso镜像文件移除,再启动虚拟机,否则启动无法成功。
2.4 xshell登录系统
步骤一:
在虚拟机终端使用 ifconfig 命令查看虚拟机网卡的ip地址。
步骤二:
打开 xshell,点击“文件 - 新建”,配置名称和主机,点击连接。
输入用户名密码即可完成连接。
后续可在左侧会话栏直接双击创建的会话即可登录
也可以在会话处点击“右键-属性”编辑会话,可在用户身份验证处配置用户名密码,后续登录无需手动输入用户名密码可直接登录。
三、Linux命令基本用法,查看帮助文档方法
3.1 Linux命令基本用法
命令格式
COMMAND [OPTIONS ...] [ARGUMENTS ...]
COMMAND:命令
OPTIONS:选项
ARGUMENT:参数
...:表示可以有多个
[]:表示可选(可以没有)
演示:
ls -l
whoami
head -n 5
cp -R dir1 dir2/
3.2 查看帮助文档方法
3.2.1 内部命令与外部命令
首先介绍下内部命令与外部命令。
内部命令:shell程序内置的命令,可直接调用shell程序执行;
外部命令:安装到操作系统上,通过可执行文件调用的命令。
可基于 type 命令查看内部命令还是外部命令。
pwd 是内部命令:
[root@rocky ~]# type pwd
pwd is a shell builtin
man 是外部命令:
[root@rocky ~]# type man
man is /usr/bin/man
3.2.2 help查看帮助文档
内部命令使用 help COMMAND 查看
[root@rocky ~]# help pwd
pwd: pwd [-LP]
Print the name of the current working directory.
Options:
-L print the value of $PWD if it names the current working
directory
-P print the physical directory, without any symbolic links
By default, `pwd' behaves as if `-L' were specified.
Exit Status:
Returns 0 unless an invalid option is given or the current directory
cannot be read.
外部命令使用 COMMAND --help 或 COMMAND -h 查看
[root@rocky ~]# man --help
Usage: man [OPTION...] [SECTION] PAGE...
-C, --config-file=FILE use this user configuration file
-d, --debug emit debugging messages
-D, --default reset all options to their default values
--warnings[=WARNINGS] enable warnings from groff
...
[root@rocky ~]# man -h
Usage: man [OPTION...] [SECTION] PAGE...
-C, --config-file=FILE use this user configuration file
-d, --debug emit debugging messages
-D, --default reset all options to their default values
--warnings[=WARNINGS] enable warnings from groff
...
3.2.3 man命令查看帮助文档
man 命令是一个外部命令,其是通过打开一个帮助文档手册来呈现帮助信息。帮助文档手册位于目录 usr/share/man 下。
目录 usr/share/man 下存在 man1 ~ man9,其中存放的是不同类型的帮助手册,具体分类如下:
- 可执行程序或shell命令
- 系统调用(内核提供的函数)
- 库调用(程序库中的函数)
- 特殊文件(通常位于 /dev)
- 文件格式与规范(如 /etc/passwd)
- 游戏
- 杂项
- 系统管理命令(通常只针对root用户)
- 内核API
可基于 whatis 来查看某命令或函数的简介,其中有所属的man分类:
[root@rocky ~]# whatis sleep
sleep (1) - delay for a specified amount of time
sleep (1p) - suspend execution for an interval
sleep (3) - sleep for a specified number of seconds
sleep (3p) - suspend execution for an interval of time
然后通过 man [NUMBER] COMMAND 查看帮助文档(不写 NUMBER 默认是序号最小的那个)
man 1 sleep
man 3 sleep
3.2.4 info 命令可查看帮助文档
info ls
3.2.5 命令自身提供的官方文档
位于 /usr/share/doc 下
3.2.6 系统及第三方应用官方文档
可通过Linux在线官方文档和知识库获取帮助,也可通过CSDN,github等网站获取帮助。
四、Linux文件系统,文件操作常见命令
4.1 Linux文件系统
4.1.1 文件系统目录结构
与Windows系统不同的是,Linux文件系统只有一个根,根目录用符号表示为 /,根目录由以下目录组成:
- bin: 存放二进制可执行文件
- boot: 存放系统启动相关文件
- dev: 存放设备文件
- etc: 存放配置文件(如 /etc/passwd)
- home: 存放普通用户的家目录
- root: root用户的家目录
- run: 存放系统启动后运行时的文件进程
- tmp: 存放临时文件
- usr: 存放应用程序文件
- var: 存放可变数据,如日志,进程相关数据等
- proc: 输出内核与进程相关的虚拟文件系统
4.1.2 Linux系统下的文件类型
文件类型 | 标识符 | 说明 |
普通文件 | - | |
目录文件 | d | directory |
符号链接文件 | l | link |
块设备文件 | b | block |
字符设备文件 | c | charactor |
管道文件 | p | pipe |
套接字文件 | s | socket |
4.1.3 Inode表结构
Linux文件系统的存储区由 inode表结构与实际存储数据的空间组成,其中 inode表结构由多个inode节点组成,每个inode节点代表一个文件或目录的索引,指向文件或目录实际存储数据的空间。inode节点主要包含inode号和存储介质实际存储数据的位置。
一个文件系统的inode节点数量有限,当一个文件系统inode节点耗尽或实际存储空间耗尽时,都不能再继续添加文件。
4.1.4 硬链接与软链接
硬链接:两个文件符号对应的同一个inode节点,指向同一片数据区。
软链接:链接文件符号对应的inode节点指向主文件的inode节点。
硬链接与软链接的主要区别:
- 主文件删除时,硬链接依然可访问文件,而软链接无法访问文件;
- 软链接可跨文件系统,硬链接无法跨文件系统;
- 软链接可以是文件,也可以是目录,硬链接只能是文件。
4.2 文件操作常见命令
4.2.1 显示当前工作路径pwd
[root@rocky ~]# cd /var/log/
[root@rocky log]# pwd
/var/log
4.2.2 列出文件ls
ls是常见的列出文件命令,常用用法如下:
ls # 显示当前目录下文件和目录
ls /tmp # 显示 /tmp 目录下的所有文件
ls -a # 列出当前目录下所有文件(包括.开头的隐藏文件)
ls -l # 显示当前目录下文件和目录的详细信息
ls -d /tmp # 仅显示 /tmp 目录
ls -R # 递归显示当前目录下的所有文件和目录
4.2.3 切换目录cd
cd是切换当前目录的命令,常用用法如下:
cd /tmp # 切换到tmp目录
cd .. # 切换到上级目录
cd - # 切换到上次切换之前的目录
cd # 切换到当前用户的家目录
cd ~ # 切换到当前用户的家目录
cd ~lisa # 切换到lisa用户的家目录
4.2.4 查看文件状态stat
stat命令用于查看文件大小、权限、创建时间等信息。
[root@rocky dir1]# stat /etc/passwd
File: /etc/passwd
Size: 2504 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 136176996 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2024-08-03 12:01:01.958852281 +0800
Modify: 2024-07-19 14:57:39.016231509 +0800
Change: 2024-07-19 14:57:39.023231508 +0800
Birth: 2024-07-19 14:57:39.016231509 +0800
stat -f 可查看文件所属文件系统状态信息
[root@rocky dir1]# stat -f /etc/passwd
File: "/etc/passwd"
ID: fd0000000000 Namelen: 255 Type: xfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 18341120 Free: 16602314 Available: 16602314
Inodes: Total: 36700160 Free: 36575594
stat -c 可按照特定格式输出文件部分信息
[root@rocky dir1]# stat -c "%a" /etc/passwd
644
[root@rocky dir1]# stat -c "%i" /etc/passwd
136176996
4.2.5 确定文件内容
file查看文件格式
[root@rocky dir1]# file /etc/passwd
/etc/passwd: ASCII text
[root@rocky dir1]# file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=618c637a7d4bcfd24f3b7017c3198b38b10362e9, stripped
cat查看文件内容
[root@rocky dir1]# cat /etc/issue
\S
Kernel \r on an \m
hexdump以十六进制字节码形式显示文件
[root@rocky dir1]# hexdump -C /etc/issue
00000000 5c 53 0a 4b 65 72 6e 65 6c 20 5c 72 20 6f 6e 20 |\S.Kernel \r on |
00000010 61 6e 20 5c 6d 0a 0a |an \m..|
00000017
4.2.6 创建空文件和刷新文件时间touch
touch 命令用于创建空文件和刷新文件时间。
若文件在指定目录下不存在,则创建空文件。
[root@rocky dir1]# touch a1.txt
[root@rocky dir1]# ls
a1.txt
若文件在指定目录下存在,则刷新时间。
[root@rocky dir1]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 3 16:36 a1.txt
[root@rocky dir1]# touch a1.txt
[root@rocky dir1]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 3 16:39 a1.txt
4.2.7 复制文件和目录cp
cp命令是主要的复制文件和目录的命令,主要用法如下:
cp [srcfile] [dstfile] # 复制文件srcfile并重命名为dstfile
cp [srcfile] [dstdir] # 复制文件srcfile至目录dstdir,文件名保持不变
cp -R [srcdir] [dstdir] # 递归复制源目录srcdir至目标目录dstdir下
cp -i ... # 若存在名称冲突则提示
cp -v ... # 显示详细复制过程
4.2.8 移动和重命名文件mv
mv命令是主要的移动和重命名文件的命令,主要用法如下:
mv [srcfile|srcdir] [dstfile] # 将文件srcfile或目录srcdir移动至dstfile对应的目录下并重命名为dstfile
mv [srcfile|srcdir] [dstdir] # 将文件srcfile或目录srcdir移动至dstdir目录下
mv -f ... # 出现名称冲突时强制覆盖
mv -i ... # 出现名称冲突时询问
mv -b ... # 出现名称冲突时先备份再移动
mv -v ... # 显示详细移动过程
4.2.9 删除文件rf
rm是删除文件的主要命令,主要用法如下:
rm -i a1.txt # 删除前确认
rm -f a1.txt # 强制删除
rm -r dir1 # 递归地删除dir1目录及所有文件
4.2.10 显示目录结构tree
tree是显示目录结构的主要命令。
[root@rocky tmp]# tree dir1
dir1
├── a2.txt
├── a3.txt
└── dir2
└── a1.txt
1 directory, 3 files
tree -d 只显示目录
[root@rocky tmp]# tree -d dir1
dir1
└── dir2
1 directory
tree -L 设置显示的目录层数
[root@rocky tmp]# tree -L 1 dir1
dir1
├── a2.txt
├── a3.txt
└── dir2
1 directory, 2 files
五、操作系统概念
5.1 什么是操作系统
操作系统是管理计算机硬件和软件资源的计算机程序。操作系统需要处理如管理与配置内存,决定系统资源供需的优先顺序,控制输入设备与输出设备,操作网络与管理文件系统等基本事务。操作系统也提供了让用户与系统交互的界面。
5.2 操作系统相关概念
接口:
操作系统通过接口的方式,提供了用户与计算机硬件沟通的方式。用户通过调用操作系统接口来使用计算机的各种服务,操作系统通过执行系统程序来控制硬件,完成各项服务。
API:
API是应用程序编程接口,API定义了源代码和库之间的接口。API是应用程序已经预定义好的接口,用户在编写程序时可以直接调用这些API来完成相应的操作,无需关心这些API的实现细节。
系统调用:
调用操作系统的API来实现某些功能行为。硬件资源由操作系统统一管理,用户需要调用到这些硬件资源时,就需要通过系统调用来实现。
库函数:
将提供一些特定功能的代码封装,只暴露出一些函数,供程序调用。
用户空间与内核空间:
用户空间:用户程序的运行空间。为了安全,他们是隔离的,及时用户程序崩溃,内核也不受影响。用户空间内的程序不能直接调用系统资源,需要通过系统调用才能进入内核空间调用系统资源。
内核空间:Linux内核程序执行空间,可以调用一切系统资源。
编程语言:
低级语言:贴近底层机器的语言,如汇编语言,机器语言
高级语言:人类容易理解的语言,如英文,中文,java,python,golang,php,C++等
5.3 各大操作系统
常见的操作系统有 Windows、Linux、Unix
六、常用命令
6.1 查看硬件信息
查看CPU
# 查看CPU
lscpu
cat /proc/cpuinfo
查看内存
# 查看内存
free
cat /proc/meminfo
查看磁盘分区
# 查看磁盘分区
lsblk
cat /proc/partitions
fdisk -l
6.2 查看系统版本信息
# 查看系统架构
arch
# 查看内核版本
uname -r
# 查看操作系统发行版本
cat /etc/os-release
6.3 时间与日期
# 显示当前系统时间
date
# 查看时区
cat /etc/timezone
# 查看日历
[root@rocky tmp]# cal 8 2024
August 2024
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
6.4 关机与重启
关机
# 关机
halt
init 0
poweroff
shutdown -h now
重启
# 重启
reboot
init 6
shutdown -r now
6.5 用户登录信息
# 当前登录用户名
[root@rocky tmp]# whoami
root
# 所有登录用户信息
[root@rocky tmp]# who
njn tty2 2024-08-02 13:56 (tty2)
root pts/2 2024-08-03 14:42 (192.168.206.1)
# 所有登录用户详细信息
[root@rocky tmp]# w
15:48:13 up 3 days, 4:35, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
njn tty2 tty2 Fri13 3days 4:35 0.17s /usr/libexec/tracker-miner-fs
root pts/2 192.168.206.1 Sat14 5.00s 0.17s 0.00s w
6.6 echo输出信息
echo是一个输出信息命令,其主要用法如下:
[root@rocky tmp]# echo 123456
123456
# 不换行输出
[root@rocky tmp]# echo -n 123456
123456[root@rocky tmp]#
# 转义特定字符串
[root@rocky tmp]# echo "123\n456"
123\n456
[root@rocky tmp]# echo -e "123\n456"
123
456
# 单引号原样输出
[root@rocky tmp]# echo '$USER'
$USER
# 双引号输出变量
[root@rocky tmp]# echo "$USER"
root
设置字体颜色:
6.7 查看所有命令历史
history命令查看所有历史命令
[root@rocky tmp]# pwd
/tmp
[root@rocky tmp]# ls
dir1
systemd-private-af3a590c78e4408aa45f6b2ab885288c-colord.service-ivfnqf
systemd-private-af3a590c78e4408aa45f6b2ab885288c-ModemManager.service-RpCsug
systemd-private-af3a590c78e4408aa45f6b2ab885288c-rtkit-daemon.service-0OPBLh
tracker-extract-files.1000
vmware-root_962-2990678749
vmware-root_964-2990547674
[root@rocky tmp]#
...
# 查看所有历史命令
[root@rocky tmp]# history
...
237 echo -e "\033[32mtest\033[0m"
238 pwd
239 ls
240 history
[root@rocky tmp]#
可使用不断地按上键回溯历史命令。
七、管道、重定向、通配符
7.1 重定向
Linux系统中有三个基本的IO设备。
标准输入设备:对应终端键盘,文件描述符是0
标准输出设备:对应终端显示器,文件描述符是1
标准错误输出设备:对应终端显示器,文件描述符是2
默认情况下输出会打印到终端,可以通过重定向符号输出至其他文件或设备。输出重定向符号为 > 和 >> ,其中 > 是覆盖,>> 是追加。(前面不加数字默认是标准正确输出,> 同 1>,>>同理)
[root@rocky tmp]# echo 111
111
# 输出重定向至a1.txt
[root@rocky tmp]# echo 111 > a1.txt
[root@rocky tmp]# cat a1.txt
111
# 输出重定向追加至a1.txt
[root@rocky tmp]# echo 222 >> a1.txt
[root@rocky tmp]# cat a1.txt
111
222
可使用1和2分别指定标准正确输出和标准错误输出的重定向。
[root@rocky dir1]# ls
a2.txt a3.txt dir2
# 默认标准正确和错误输出至终端
[root@rocky dir1]# ls a1.txt a2.txt
ls: cannot access 'a1.txt': No such file or directory
a2.txt
# 1> 重定向正确输出 2> 重定向错误输出
[root@rocky dir1]# ls a1.txt a2.txt 1> b1 2> b2
[root@rocky dir1]# cat b1 b2
a2.txt
ls: cannot access 'a1.txt': No such file or directory
# 标准正确和错误输出均重定向至b1
[root@rocky dir1]# ls a1.txt a2.txt &> b1
[root@rocky dir1]# cat b1
ls: cannot access 'a1.txt': No such file or directory
a2.txt
# 标准正确输出重定向至b2,标准错误输出重定向至正确输出,最后均重定向至b2
[root@rocky dir1]# ls a1.txt a2.txt > b2 2>&1
[root@rocky dir1]# cat b2
ls: cannot access 'a1.txt': No such file or directory
a2.txt
# 输出到黑洞(不输出)
[root@rocky dir1]# ls a1.txt a2.txt &> /dev/null
标准输入符号有 <, <<, <<<
# 从文件b1获得输入
[root@rocky dir1]# cat b1
1+2+3
[root@rocky dir1]# bc < b1
6
# 直接以字符串作为输入
[root@rocky dir1]# bc <<< 1+2+3
6
# 从终端输入,输入EOF结束
[root@rocky dir1]# bc << EOF
> 1+2+3
> EOF
6
7.2 管道
管道是前一个命令的输出作为后一个命令的输入,符号是 | 。
使用管道的前提是前一个命令存在输出,后一个命令支持输入。
# 以文件 /etc/passwd 内容作为 grep 命令的输入,过滤root
[root@rocky dir1]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# 多重管道
[root@rocky dir1]# cat /etc/passwd | grep root | tr 'a-z' 'A-Z'
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN
tee命令可以在输出至终端的同时输出至另一个文件
# 111既输出至终端,又输出至b1
[root@rocky dir1]# echo 111 | tee b1
111
[root@rocky dir1]# cat b1
111
# tee -a 追加
[root@rocky dir1]# echo 3333 | tee -a b1
3333
[root@rocky dir1]# cat b1
111
3333
7.3 通配符
*匹配任意0个或多个字符
# *匹配任意0个或多个字符
[root@rocky dir1]# ls
a2.txt a3.txt b1 dir2
[root@rocky dir1]# ls *.txt
a2.txt a3.txt
?匹配任意一个字符
[root@rocky dir1]# ls
a2.txt a3.txt a44.txt b1 dir2
[root@rocky dir1]# ls a?.txt
a2.txt a3.txt
其他常用的通配符如下:
[abcd] # abcd任意一个字符
[^abcd] # 除abcd外的任意一个字符
[0-9] # 任意一个数字
[a-z] # 任意一个字符
[A-Z] # 任意一个字符
[:lower:] # 任意一个小写字母
[:upper:] # 任意一个大写字母
{} 指定所有需要执行的项
# 相当于 touch aaa.gz bbb.gz
[root@rocky dir1]# touch {aaa,bbb}.gz
[root@rocky dir1]# ls
aaa.gz bbb.gz
# 相当于 touch 1.txt 2.txt 3.txt 4.txt 5.txt
[root@rocky dir1]# touch {1..5}.txt
[root@rocky dir1]# ls
1.txt 2.txt 3.txt 4.txt 5.txt