1.下载 ubuntu 和 vmware
系统下载
虚拟机下载
https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
2.使用 vmware 安装 ubuntu
处理器数量&每个处理器的内核数量
在VMWare中设置了"处理器数量"为2, "每个处理器的内核数量"为2, 则意味着虚拟机将拥有两个虚拟CPU,
每个虚拟CPU具有2个虚拟内核, 总共虚拟内核数量为2*2=4
这里的2个CPU指的是2个虚拟的CPU, 而不是物理CPU. 这两个虚拟CPU各自拥有2个虚拟内核,
总共是4个虚拟内核. 所以这个配置并不能直接等同于4个物理CPU或者2个物理CPU+2个超线程技术
桥接模式
在桥接模式下, 虚拟出来的操作系统就像是局域网中的一台独立的主机, 它可以访问网内任何一台机器
主机网卡和虚拟网卡的IP地址处于同一个网段, 子网掩码、网关、DNS等参数都相同
NAT模式
使用NAT模式网络连接时, 会在主机上建立单独的专用网络, 虚拟机不能直接和其他计算机进行通信,
只能通过宿主机作为中介来进行通信
sudo apt update 和 sudo apt upgrade
sudo apt update 用于更新系统中可用软件包的列表, 不会安装或删除任何软件包, 只是更新软件包列表
sudo apt upgrade 用于升级系统中已经安装的软件包到最新版本
因此, 通常先执行 sudo apt update 命令来获取最新的软件包列表, 再执行 sudo apt upgrade
3.文件和目录的创建、删除、移动、复制、重命名
pwd (print working directory): 显示当前工作目录
ls (list): 列出当前目录下的文件和子目录
ls
ls -l 按照长格式(long format)显示文件信息
mkdir (make directory): 创建一个新目录
创建单个目录
mkdir web
创建多个目录
mkdir web test
创建多级目录 [p:parents 父级目录] -p表示创建指定的目录,并自动创建其中所需的所有缺少的父级目录
mkdir -p web/test
cd (change directory): 切换目录
cd web
cd ../
cd /home/david/web
注
相对路径是以 当前目录"./" 为基准的路径, 是从当前目录到目标文件或目录的路径. 如 ./web/test.txt 表示当前目录下的 web 目录中的 test.txt 文件
相对路径中 "./" 表示当前目录, "../" 表示上一级目录
绝对路径是相对于系统 根目录"/" 的完整路径. 如 /home/david/web
touch 创建空文件
创建单个空文件
touch web.txt
创建多个空文件
touch demo.txt test.txt
打印输出文本
echo "dengruicode.com"
向文件中添加一行文字 [ >> web.txt 将打印输出的文本 追加 到 web.txt 文件末尾, 若文件不存在, 则会创建该文件 ]
echo "dengruicode.com" >> web.txt
注
>符号 是重定向输出 [ > 会覆盖已有的文件, >> 则会保留原来文件的内容, 在文件末尾追加内容 ]
cat 显示文件内容
cat web.txt
tail 从文件末尾显示指定数量的行
默认显示文件的最后 10 行
tail web.txt
显示文件的最后 1 行
tail -n 1 web.txt
head 从文件开头显示指定数量的行
默认显示文件的前 10 行
head web.txt
显示文件的前 1 行
head -n 1 web.txt
cp (copy): 复制
将文件复制到另一个目录中
cp web.txt /home/david/web
cp /home/david/web.txt /home/david/web
将文件复制到另一个目录中并重命名
cp /home/david/web.txt /home/david/web/newWeb.txt
将目录复制到另一个目录中 [r:recursive 递归] -r表示复制整个目录树的内容
cp -r /home/david/test/ /home/david/web/
mv (move): 重命名或移动
文件
重命名文件
mv web.txt newWeb.txt
移动文件
mv newWeb.txt /home/david/web
移动文件并重命名
mv newWeb.txt /home/david/web/test.txt
目录
重命名目录
mv web newWeb
移动目录
mv newWeb /home/david/test
移动目录并重命名
mv newWeb /home/david/test/demo
rm (remove): 删除文件或目录
删除单个文件
rm newWeb.txt
删除多个文件
rm demo.txt test.txt
删除目录 [r:recursive 递归] -r表示删除此文件夹和其子文件夹中的所有文件和目录
rm -r web
4.apt 安装 openssh 和远程连接 ubuntu
Ubuntu
ip addr
#安装 openssh-server
sudo apt install openssh-server
Windows
ping 192.168.1.22
MobaXterm 下载
https://mobaxterm.mobatek.net
注
apt(Advanced Package Tool) 用于安装、升级、删除和查询软件包
ssh(Secure Shell) 是一种安全的远程登录协议
5.vim 编辑器
安装 [vim 是 vi 的增强版, 增加了许多功能和特性, 如语法着色、自动补全、多窗口编辑、插件支持等]
sudo apt install vim
vim test.txt 使用 vim编辑器 打开 test.txt [若打开后异常退出(ctrl+z),可手动删除交换文件 rm -rf .test.txt.swp]
i 进入编辑模式 [i:insert 插入]
Esc 退出编辑模式,进入命令模式
命令模式
查找 /字符串 回车
向下翻一页 ctrl+f [f:forward 向前]
向上翻一页 ctrl+b [b:backward 向后]
跳转到文件开头 [[
跳转到文件结尾 ]]
跳转到指定行 示例:跳转到第10行 10gg [gg 是 go to line 的缩写形式 "跳转到指定的行"]
0 移动到行首
$ 移动到行尾 [$:shift+4]
u 撤消
ctrl+r 重做
:set nu 显示行号 [nu 是 number 的缩写形式]
:%s/要被替换的文本/用来替换的文本/g
示例 :%s/david/luna/g [将文档中所有的单词 david 替换成 luna]
%表示对整个文档进行操作 s表示替换操作 g表示全局替换,若不加g,则只会替换每行中第一个匹配到的文本
退出
:q 退出不保存 [q:quit 退出]
:q! 强制退出不保存
:w 保存文件 [w:write 写入]
:wq 保存退出
6.在文件中查找指定的字符串 grep
grep(Global Regular Expression Print[全局正则表达式打印]) 使用正则表达式来搜索文本
在单个文件中查找指定的字符串
grep david web.txt
在 web.txt 文件中查找包含 david 字符串的所有行并打印出来
在单个文件中查找指定的字符串 [行号] -n 的全称是 "line-number" 表示输出匹配行的行号
grep -n david web.txt
在单个文件中查找指定的字符串 [忽略字母大小写] -i 的全称是 "ignore-case" 表示忽略字母的大小写
grep -i david web.txt
在单个文件中查找指定的字符串 [忽略字母大小写并输出匹配行的行号]
grep -i -n david web.txt
grep -in david web.txt
在单个文件中查找指定的字符串 -A 全称 "after-context", 表示上下文 [-A1 表示显示匹配行后1行的内容]
grep -n -A1 davidjobs web.txt
在单个文件中查找指定的字符串 -B 全称 "before-context", 表示上下文 [-B1 表示显示匹配行前1行的内容]
grep -n -B1 davidjobs web.txt
在单个文件中查找指定的字符串 -C 全称 "context", 表示上下文 [-C1 表示显示匹配行上下各1行的内容]
grep -n -C1 davidjobs web.txt
grep -nC1 davidjobs web.txt
在多个文件中查找指定的字符串
grep david web.txt web2.txt
在 web.txt web2.txt文件中查找包含 david 字符串的所有行并打印出来
在多个文件中查找指定的字符串 [全词匹配] -w 的全称是 "word-regexp", 表示使用全词匹配, 即只有匹配到整个单词才算匹配成功
grep -w david web.txt web2.txt
7.切换到 root 用户
在 Ubuntu 系统中, root 用户没有设置默认密码
sudo passwd root [dengruicode.com]
更改 root 用户的密码
su - root
将当前用户临时切换到 root 用户 [su:switch user]
exit
退出当前的 shell 环境或终端
退出当前的 shell 环境: 结束当前Shell进程并返回到上一级的Shell环境或用户桌面
可以类比为打开了多个程序窗口, 当你关闭一个窗口时, 并没有关闭电脑或者操作系统, 而是回到了之前的工作空间
注
shell 是一个命令行解释器, 负责接收和解析用户通过终端输入的命令
每当用户在终端中输入一条命令, shell 会立即将其 "翻译" 成操作系统可以理解的指令
终端 是一个提供命令输入和输出环境的程序, 可以把它看作是一个窗口, 让用户可以看到操作系统的反馈
而 shell 则是这个窗口中的工具, 帮助用户向操作系统发出指令
su root
将当前用户临时切换到 root 用户, 但不会切换当前用户的环境变量和工作目录,
当前用户的环境并不完全适合作为 root 用户来运行, 因为可能会出现一些权限问题
su - root
将当前用户临时切换到 root 用户, 同时切换当前用户的环境变量和工作目录
建议使用 su - root 命令来切换到 root 用户, 以确保当前用户的环境变量和工作目录
与 root 用户的环境变量和工作目录保持一致, 避免出现不必要的问题
在 linux 系统中, 用户的系统设置通常是独立的, 每个用户都有自己的配置文件和环境变量
当使用 su - root 命令临时切换到 root 用户后, 可以执行一些需要 root 权限的操作, 比如:修改系统设置
修改的设置只会影响当前 root 的用户环境, 不会影响其他用户的系统设置
当你退出 root 用户环境后, 这些操作将不会对其他用户或会话产生影响
8.添加、删除用户
su - root 切换到root用户
#当创建一个新用户账户时, 系统都会在 /home 目录下自动创建与该用户账户同名的文件夹
adduser luna 创建luna用户 [ ls /home 查看该系统上所有已创建用户的主目录 ]
deluser luna 删除luna用户 [ rm -r /home/luna 删除luna用户的主目录 ]
deluser --remove-home luna 删除luna用户及其相关文件
passwd luna 更改用户密码
注
报错 userdel: user luna is currently used by process 4857
解决
ps -f 显示当前终端会话中运行的进程的详细信息
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 17:29 ? 00:00:03 /sbin/init splash
root 2 0 0 17:29 ? 00:00:00 [kthreadd]
......
UID (User ID) 进程用户ID
PID (Process ID) 进程ID
PPID (Parent Process ID) 父进程ID
C(CPU) 进程占用 CPU 的百分比
STIME (Start Time) 进程启动的具体时间
TTY (Teletypewriter) 与进程交互的终端设备
TIME 启动进程花费的 CPU 时间
CMD 启动进程的命令
ps -ef 显示系统中所有正在运行的进程的详细信息
ps -ef | grep luna 显示系统中所有名称包含 luna 的进程的详细信息
ps[process status 进程状态]
-e[every 每个] 表示显示所有进程, 包括其他用户的进程
-f[full format 完整格式] 表示以完整格式显示进程信息
| 管道符号 将前一个命令的 "输出" 作为后一个命令的 "输入"
grep luna 会在 ps -ef 命令的 "输出" 中查找包含 luna 的进程信息
强制结束 id=4857 的进程
kill -9 4857
-9 表示发送 SIGKILL[signal kill] 信号给进程 id 为 4857 的进程
SIGKILL 信号是一种强制停止进程的信号
9.用户组
查看用户的所属组信息
groups 显示当前用户的所属组信息
david adm cdrom sudo dip plugdev users lpadmin
david : 组名为 david 的用户组 [david 用户隶属于和自己同名用户组]
adm(Administrator) : 管理员用户组, 具有系统管理权限
cdrom(CD-ROM) : 光盘用户组, 具有读取光盘的权限
sudo(Super User Do) : 超级用户组, 具有执行系统管理任务的权限
dip(Device Interface) : 接口用户组, 具有配置网络接口的权限
plugdev(Plug-in Device) : 设备插件用户组, 具有管理设备插件(如声卡、显卡等)的权限
users(Users) : 普通用户组, 不具有系统管理权限
lpadmin(Local Printer Administration) : 打印机管理用户组, 具有管理打印机的权限
groups david [查看 david 用户的所属组信息]
david : david adm cdrom sudo dip plugdev users lpadmin
david 当前登录用户的用户名是 david
david 组名为 david 的用户组
groups root
root : root
root 用户隶属于 root 组, root 组被赋予了最高的权限, 允许其成员访问系统中的所有资源
查看所有用户组的信息
cat /etc/group
/etc/group 文件的每行格式是 group_name:x:GID:group members
group_name 表示用户组的名称
x 表示密码占位符, 密码是存储在/etc/shadow文件中
GID 表示组ID(GID), 用于唯一标识用户组
group members 表示该用户组的成员, 每个成员用逗号分隔
列出包含 david 字符串的用户组的信息
grep david /etc/group
adm:x:4:syslog,david [表示名为adm的组, 组密码是x, 组ID是4, 组成员包括syslog和david]
cdrom:x:24:david [表示名为cdrom的组, 组密码是x, 组ID是24, 组成员包括david]
sudo:x:27:david [表示名为sudo的组, 组密码是x, 组ID是27, 组成员包括david]
dip:x:30:david [表示名为dip的组, 组密码是x, 组ID是30, 组成员包括david]
plugdev:x:46:david [表示名为plugdev的组, 组密码是x, 组ID是46, 组成员包括david]
users:x:100:david [表示名为users的组, 组密码是x, 组ID是100, 组成员包括david]
lpadmin:x:118:david [表示名为lpadmin的组, 组密码是x, 组ID是118, 组成员包括david]
david:x:1000: [表示名为david的组, 组密码是x, 组ID是1000, 没有其他组成员]
查看用户 david 的用户ID和组ID
id david
uid=1000(david) gid=1000(david)
组=1000(david),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),118(lpadmin)
创建测试用户
su - root 切换到root用户
adduser luna 创建luna用户
创建一个名为 test 的用户组
groupadd test
注
grep test /etc/group
test:x:1002:
10.文件和目录权限
创建目录
mkdir demo
按照长格式(long format)显示文件信息
ls -l
drwxrwxr-x 2 david david 4096 11月 30 15:15 demo
d 表示目录(directory)
rwxrwxr-x 是目录的权限部分, 其中:
r(read) 表示读取权限, 允许用户列出目录中的文件列表
w(write) 表示写入权限, 允许用户对目录创建、删除、修改等
x(execute) 表示执行权限, 允许用户进入目录并访问其中的文件和子目录
rwx 是目录所有者(owner)的权限, 表示具有读取、写入和执行权限
rwx 是目录所属组(group)的权限, 表示具有读取、写入和执行权限
r-x 是其他用户(others)的权限, 表示只具有读取和执行权限
2 是文件的硬链接数, 表示该目录有2个硬链接
除了根目录(/)外, 每个目录至少包含2个目录项 . 和 ..
.(点) 表示当前目录
..(点点) 表示上级目录
创建软链接(符号链接)
ln -s /home/david/test.txt /home/david/symbolicLink.txt
创建硬链接
ln /home/david/test2.txt /home/david/hardLink.txt
实现方式:
硬链接是指向文件索引节点的引用, 类似原始文件的别名,
硬链接与原始文件共享同一个索引节点,在系统中可以被视为同一个文件.
软链接是指向另一个文件或目录的路径, 类似Windows的快捷方式,
软链接有自己的索引节点
删除原始文件时:
硬链接仍然存在, 因为它指向的是文件的索引节点
软链接则会失效, 因为它指向的文件已不存在
david 是目录的所有者, 即创建该目录的用户
david 是目录的所属组, 即该目录所属的用户组
4096 是文件的大小, 表示该目录占用的磁盘空间为 4096 字节
11 月 30 15:15 是该目录最后一次被修改的日期和时间
demo 创建的目录
文件权限
示例
创建空文件
touch test.txt
按照长格式(long format)显示文件信息
ls -l
-rw-rw-r-- 1 david david 0 11月 30 14:58 test.txt
- 表示普通文件
rw-rw-r-- 是文件的权限部分, 其中:
r(read) 表示读取权限, 允许用户查看该文件
w(write) 表示写入权限, 允许用户对文件创建、删除、修改等
x(execute) 表示执行权限, 允许用户运行该文件
rw- 是文件所有者(owner)的权限, 表示具有读取和写入权限
rw- 是文件所属组(group)的权限, 表示具有读取和写入权限
r-- 是其他用户(others)的权限, 表示只具有读取权限
1 是文件的硬链接数, 表示该文件有一个硬链接
在默认情况下, 创建一个文件时, 系统通常会创建一个硬链接
david 是文件的所有者, 即创建该文件的用户
david 是文件的所属组, 即该文件所属的用户组
0 是文件的大小, 表示该文件目前没有数据
11 月 30 14:58 是该文件最后一次被修改的日期和时间
test.txt 创建的文件
11.设置文件或目录的权限 chmod
chmod(change mode 表示更改 change 文件模式 mode) 设置文件或目录的权限
符号模式
u(user)所有者, g(group)所属组, o(others)其他用户
r(read)读取, w(write)写入, x(execute)执行
chmod u=r test.txt 设置 所有者u 具有 读取r 权限
chmod g=r test.txt 设置 所属组g 具有 读取r 权限
chmod o= test.txt 清空 其他用户o 权限
chmod a= web.txt 清空 所有用户a 权限 [a(all)所有用户]
设置 所有者u和所属组g 具有 读取r和写入w 权限, 其他用户o 具有读取权限
chmod u=rw,g=rw,o=r test.txt
移除 所有者u和所属组g 的 读取r和写入w 权限
chmod ug-rw test.txt
为 所有者u 添加 读取r 权限
chmod u+r test.txt
数字模式
r=4, w=2, x=1
7(4+2+1) 可读r、可写w、可执行x
6(4+2) 可读r、可写w
5(4+1) 可读r、可执行x
4 只读r
3(2+1) 可写w、可执行x
2 只写w
1 只执行x
0 没有任何权限
设置 所有用户 具有 读取r、写入w、执行x 权限
chmod 777 test.txt
设置 所有者 具有 读取r和写入w 权限, 所属组g和其他用户o 具有 读取r 权限
chmod 644 test.txt
递归地将目录demo及其子目录下的所有文件的权限设置为777 [-R:recursive 递归]
sudo chmod -R 777 demo
12.更改文件或目录的所有者和所属组 chown 和 chgrp
su - root 切换到 root 用户
chown(change owner) 更改文件或目录的所有者
将 test.txt 文件的所有者更改为 luna 用户
chown luna test.txt
将 web 目录的所有者更改为 david 用户
chown david web
将 web 目录及其包含的所有文件和子目录的所有者更改为 david 用户
[-R:recursive 递归]
chown -R david web
chgrp(change group) 更改文件或目录的所属组
将 test.txt 文件的所属组更改为 luna 组
chgrp luna test.txt
将 web 目录的所属组更改为 david 组
chgrp david web
注
将目录 web 的所有者更改为 luna 用户,所属组更改为 root 组
chown luna:root web
13.日期和时间
显示当前日期、时间和时区
date
2023年 12月 04日 星期一 16:15:18 CST
CST(China Standard Time) 表示中国标准时间的时区缩写
日期格式化
年(Year)、月(Month)、日(Day) YYYY-MM-DD
date +%Y-%m-%d
2023-12-04
简化
date +%F
2023-12-04
时(Hour)、分(Minute)、秒(Second) HH:MM:SS
date +%H:%M:%S
16:15:18
简化
date +%T
16:15:18
年、月、日、时、分、秒 YYYY-MM-DD HH:MM:SS
date +"%Y-%m-%d %H:%M:%S"
2023-12-04 16:15:18
简化
date +"%F %T"
2023-12-04 16:15:18
注
错误示范
echo date +"%F %T" >> log.txt
正确示范
echo date +"%F %T"
>> log.txt
echo $(date +"%F %T") >> log.txt
反引号` 和 $() 都可以用来执行命令或表达式的值
$()不仅可以引用命令的输出, 还可以引用变量的值、命令的参数等
14.前台和后台运行 shell 脚本
shell 是一个命令行解释器, 负责接收和解析用户通过终端输入的命令
每当用户在终端中输入一条命令,shell 会立即将其 "翻译" 成操作系统可以理解的指令
终端 是一个提供命令输入和输出环境的程序,可以把它看作是一个窗口,让用户可以看到系统的反馈
而 shell 则是这个窗口中的工具,帮助用户向操作系统发出指令
#!/bin/bash 是脚本的头文件声明,指定使用 bash 解释器来执行后续的脚本代码
前台运行 Shell 脚本
1.通过 bash 解释器来执行
bash demo.sh
注
显示文件的最后 3 行
tail -n 3 time.txt
2.直接运行脚本
./demo.sh
注
添加执行权限
chmod u+x demo.sh
后台运行 Shell 脚本
\1. &符号 表示在后台运行, 关闭终端后, 会结束进程
bash demo.sh &
注
ps -f 显示当前终端会话中运行的进程的详细信息
ps[process status 进程状态]
-f[full format 完整格式] 表示以完整格式显示进程信息
#终止一个正在运行的进程
kill 3244
\2. nohup(no hang up 不挂断) 关闭终端后, 进程仍然能够在后台运行
nohup bash demo.sh &
注
ps -ef 显示系统中所有正在运行的进程的详细信息
ps -ef | grep demo.sh 显示系统中所有包含 demo.sh 的进程的详细信息
-e[every 每个] 表示显示所有进程, 包括其他用户的进程
| 管道符号 将前一个命令的 "输出" 作为后一个命令的 "输入"
grep demo.sh 会在ps -ef命令的 "输出" 中查找包含demo.sh的进程信息
15.查看进程信息 ps
进程是指在计算机中正在运行的程序
ps (Process Status) 进程状态 显示当前终端会话中运行的进程信息
ps -f 显示当前终端会话中运行的进程的详细信息
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 17:29 ? 00:00:03 /sbin/init splash
root 2 0 0 17:29 ? 00:00:00 [kthreadd]
......
UID (User ID) 进程用户ID
PID (Process ID) 进程ID
PPID (Parent Process ID) 父进程ID
C(CPU) 进程占用 CPU 的百分比
STIME (Start Time) 进程启动的具体时间
TTY (Teletypewriter) 与进程交互的终端设备
TIME 启动进程花费的 CPU 时间
CMD 启动进程的命令
ps -ef 显示系统中所有正在运行的进程的详细信息, 包括系统进程和用户进程
ps -ef | grep demo.sh 显示系统中所有名称包含 demo.sh 的进程的详细信息
ps[process status 进程状态]
-e[every 每个] 表示显示所有进程, 包括其他用户的进程
-f[full format 完整格式] 表示以完整格式显示进程信息
| 管道符号 将前一个命令的 "输出" 作为后一个命令的 "输入"
grep demo.sh 会在 ps -ef 命令的 "输出" 中查找包含 demo.sh 的进程信息
ps -u 显示当前终端会话中 当前用户 正在运行的进程信息
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
david 3271 0.0 0.1 19696 5120 pts/0 Ss 10:51 0:00 -bash
david 3717 0.0 0.0 18568 3456 pts/0 S 10:56 0:00 bash demo.sh
david 3725 0.0 0.0 16920 1920 pts/0 S 10:56 0:00 sleep 3
david 3728 0.0 0.1 22716 4864 pts/0 R+ 10:56 0:00 ps -u
USER 用户名
PID (Process ID) 进程ID
CPU CPU使用率
MEM (Memory) 内存使用率
VSZ (Virtual Size) 虚拟内存大小(以KB为单位)
RSS (Resident Set Size) 常驻内存大小(以KB为单位)
TTY (Teletypewriter) 与进程交互的终端设备
STAT (State) 进程状态
START 进程启动时间
TIME 启动进程花费的 CPU 时间
COMMAND 启动进程的命令
ps -x 显示与终端相关的进程
ps -ux 显示终端会话中 当前用户 正在运行的进程信息
注
强制结束 id=4857 的进程
kill -9 4857
-9 表示发送 SIGKILL[signal kill] 信号给进程 id 为 4857 的进程
SIGKILL 信号是一种强制停止进程的信号
16.查看cpu、内存等系统信息
top 查看系统的实时信息,包括CPU占用率、内存使用、进程列表等
top - 13:42:36 up 57 min, 1 user, load average: 0.03,0.02,0.00
(13:42:36) 当前时间为13:42:36
(up 57 min) 系统运行了57分钟
(1 user) 1个登录用户
(load average: 0.03,0.02,0.00) 系统的负载平均值为0.03,0.02,0.00
系统在过去的1分钟(0.03)、5分钟(0.02,)、15分钟内(0.00)的平均负载
任务: 279 total, 1 running,278 sleeping, 0 stopped, 0 zombie
(279 total) 总共有279个进程
(1 running) 1个正在运行的进程数
(278 sleeping) 278个正在休眠的进程
(0 stopped) 0个停止的进程
(0 zombie) 0个僵尸进程
僵尸进程 是指在进程已经结束运行但其相关资源
(如内存空间等)尚未被释放的情况下,该进程的状态,
是一个已经死亡但仍然存在于系统中的进程
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni,99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
(0.2 us)[user] 用户空间占用CPU的百分比为0.2%
0.2 us 表示系统上有一些用户级任务正在运行,但它们对CPU的占用相对较低
(0.2 sy)[system] 系统空间占用CPU的百分比为0.2%
(0.0 ni)[nice] 调整过优先级的用户进程占用 CPU 的百分比为0.0%
nice 优先级调整值,用于调整进程的优先级
当一个进程被赋予较高的nice值时,它将以较低的优先级运行,
从而使其他进程能够获得更多的 CPU 资源
(99.6 id)[idle] 空闲时间占用CPU的百分比为99.6%
99.6 id 表示 CPU 大部分时间处于空闲状态,说明系统负载较低
(0.0 wa)[wait] 等待I/O占用CPU的百分比为0.0%
I/O[Input/Output]操作 是指系统中的输入和输出操作,
常见的 I/O 操作有:读取和写入文件、键盘输入、打印机输出等
0.0 wa 表示 CPU 没有花费时间等待 I/O 操作,
说明着当前系统的 I/O 操作比较高效,没有对CPU造成明显的阻塞,
若wa的值较高,则说明 I/O 操作存在瓶颈
(0.0 hi)[hardware interrupt] 硬中断占用CPU的百分比为0.0%
硬中断是由硬件设备(如键盘、鼠标等)发出的信号,
会打断 CPU 正在执行的任务,使其跳转到中断处进行处理
0.0 hi 表示没有硬中断发生
(0.0 si)[software interrupt] 软中断占用CPU的百分比为0.0%
软中断是由软件程序发出的信号,会打断CPU正在执行的任务,
使其跳转到中断处进行处理
0.0 si 表示没有软中断发生
(0.0 st)[steal] 虚拟化占用CPU的百分比为0.0%
0.0 st 表示没有虚拟机从物理机中窃取CPU时间,
即虚拟化对 CPU 的占用为 0.0%
MiB Mem : 3870.3 total, 2357.1 free, 917.4 used, 838.1 buff/cache
MiB Mem[Megabytes of Memory] 内存的兆字节数
(3870.3 total) 总内存大小为3870.3 MiB
(2357.1 free) 空闲内存大小为2357.1 MiB
(917.4 used) 已使用的内存大小为917.4 MiB
(838.1 buff/cache) 缓冲和缓存区内存大小为838.1 MiB
MiB Swap: 3870.0 total, 3870.0 free, 0.0 used. 2952.8 avail Mem
MiB Swap[Megabytes of Swap] 交换空间兆字节数
交换空间(Swap Space) 是系统中的虚拟内存技术,用于在物理内存不足时,
将部分内存数据暂时存储到磁盘上
(3870.0 total) 总交换空间大小为3870.0 MiB
(3870.0 free) 空闲交换空间大小为3870.0 MiB
(0.0 used) 已使用的交换空间大小为0.0 MiB
(2952.8 avail Mem) 可用的物理内存大小为2952.8 MiB
3870.0 free 表示交换空间完全空闲,没有被使用,
说明系统目前没有内存压力,不需要将内存数据交换到磁盘上
进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
2274 david 20 0 23132 5632 3456 R 1.3 0.1 1:06.52 top
457 systemd+ 20 0 17200 7296 6528 S 0.3 0.2 0:37.21 systemd-oo+
1137 gdm 20 0 4113984 204004 119936 S 0.3 5.1 0:27.26 gnome-shell
1992 root 20 0 0 0 0 I 0.3 0.0 0:03.29 kworker/0:+
USER 用户名
PR(Priority) 优先级
NI(Nice) 优先级调整值,用于调整进程的优先级
VIRT(Virtual Memory) 虚拟内存大小
RES(Resident Memory) 物理内存大小
SHR(Shared Memory) 共享内存大小
%CPU(CPU Usage) CPU使用率
%MEM(Memory Usage) 内存使用率
TIME+(Time Elapsed) 进程使用的CPU时间
COMMAND 命令
注
在 top 命令的交互模式下,
按键盘上 1键, 切换CPU显示模式, 显示每个CPU的使用情况
按键盘上 大写字母M, 按照物理内存(RES)使用率对进程进行排序
按键盘上 大写字母P, 按照CPU占用率对进程进行排序
用来查看CPU占用率最高的进程
top -p 2555 查看PID为2555的进程的实时信息
p(process) 进程
free -m 以兆为单位显示内存的使用情况
-m 兆字节(MB)
total used free shared buff/cache available
内存: 3870 911 2345 13 857 2959
交换: 3869 0 3869
total 总内存大小
used 已使用的内存大小
free 空闲内存大小
shared 共享内存大小
buff/cache 缓冲和缓存区内存大小
available 可用的内存大小 = 空闲内存 + 缓冲和缓存区内存
注
虽然空闲内存为 2345 MB, 缓冲和缓存区内存为 857 MB,
但实际可用的内存大小只有 2959 MB,
这是因为还有其他一些内存区域被占用, 不能立即用于新的进程
17.root 用户 ssh 远程登录 ubuntu
/etc 目录用于存储系统的配置文件
ls /etc/ssh/
moduli sshd_config.d ssh_host_ecdsa_key.pub ssh_host_rsa_key.pub
ssh_config ssh_host_dsa_key ssh_host_ed25519_key ssh_import_id
ssh_config.d ssh_host_dsa_key.pub ssh_host_ed25519_key.pub
sshd_config ssh_host_ecdsa_key ssh_host_rsa_key
su - root
vim /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
PermitRootLogin yes
systemctl status ssh 查看服务状态
systemctl restart ssh 重启服务
注
ssh.service 是 openssh 的服务名称
18.压缩和解压
nginx
https://nginx.org/en/download.html
ubuntu
/usr 目录主要用来存储系统级别的二进制文件、库和文档
可以被视为系统级目录
/usr/local 目录通常用来存储用户手动安装的软件
windows
C:\Windows 主要存储系统文件
C:\Program Files 目录通常用来存储用户手动安装的软件
ls /usr/local/
bin etc games include lib man sbin share src
注
/usr/local/bin
bin(binary) 二进制文件
存储可执行文件,即可以在命令行下直接运行的应用程序
/usr/local/etc
etc(etcetera) 表示"等等"
存储本地安装的软件的配置文件
/usr/local/games
存储游戏相关的文件
/usr/local/include
存储C语言和其他编程语言的头文件(header files),
这些文件包含了函数声明和宏定义等信息,用于编译应用程序
/usr/local/lib
lib(library) 库
存储库文件,这些文件包含了常用的功能函数,可以被其他程序调用
/usr/local/man
man(manual pages)
存储手册页,提供关于命令、库函数、配置文件等的详细说明
/usr/local/sbin
sbin(system binary) 系统二进制文件
存储系统级别的可执行文件,通常是系统管理员才能运行的工具或服务
/usr/local/share
存储共享文件,如字体、图标、文档等
/usr/local/src
src(source) 源代码
存储软件的源代码,用于编译和修改软件
tar
解压
tar -xf nginx-1.24.0.tar.gz
tar -xvf nginx-1.24.0.tar.gz
tar -xvzf nginx-1.24.0.tar.gz
tar -xvzf nginx-1.24.0.tar.gz -C /usr/local/src
压缩
tar -cvzf nginx.tar.gz nginx-1.24.0
注
-x(extract) 表示解压tar文件
-c(create) 表示创建一个新的tar文件
-v(verbose) 表示在解压过程中显示详细信息
-z 表示使用gzip解压缩,使用gzip会减少压缩文件体积
以.gz结尾文件,会自动启用gzip
-f(file) 指定要解压的tar文件的路径
告诉tar命令后面要跟一个文件名
-C(Change Directory) 解压到指定目录
zip
解压
unzip images.zip
压缩
zip -r img.zip images
注
-r(recursive) 递归地压缩指定目录及其所有子目录和文件
19.安装和配置 nginx
创建工作目录
mkdir /usr/local/workspace
切换到 nginx 目录
cd /usr/local/src/nginx-1.24.0
配置
./configure --prefix=/usr/local/workspace/nginx
报错1
./configure: error:
C compiler cc is not found
安装 gcc(GNU Compiler Collection)
apt install gcc
说明
gcc 由GNU开发的编译器,可以将源代码编译成可执行文件
apt 会分析依赖关系,并自动安装所有必要的软件包
gcc --version 查看 gcc 的版本
which gcc 查找系统中 gcc 可执行文件的路径
报错2
./configure: error:
the HTTP rewrite module requires the PCRE library
安装 PCRE(Perl Compatible Regular Expressions)
apt install libpcre3 libpcre3-dev
说明
PCRE 是一个用于正则表达式操作的库
报错3
./configure: error:
the HTTP gzip module requires the zlib library
安装 zlib
apt install zlib1g-dev
说明
zlib 是用于数据压缩的库
编译和安装
make && make install
报错
找不到命令 "make"
安装
apt install make
查看 nginx 版本
/usr/local/workspace/nginx/sbin/nginx -v
软连接
ln -s /usr/local/workspace/nginx/sbin/nginx /usr/bin/nginx
说明
/usr/bin 目录用于存储系统提供的命令行工具,
用户可以通过在终端中输入该命令的名称来执行
查看 nginx 版本
nginx -v
启动 nginx
nginx
停止 nginx
nginx -s stop
说明
-s(signal)发送信号
重新加载 nginx 配置文件
nginx -s reload
说明
平滑地重新加载配置,而不会中断正在进行的请求
ubuntu
windows
查看 nginx 进程
ps -ef | grep nginx
说明
主进程 master process nginx
工作进程 worker process
工作进程是由主进程创建的
停止 nginx 服务
kill 87181
注
nginx 目录说明
client_body_temp
用于存储客户端发送的请求体(body)的临时文件
如:上传的文件
fastcgi_temp
FastCGI进程的临时存储目录
logs
用于存储 nginx 的日志文件
access.log 记录所有访问请求的日志
error.log 记录错误信息的日志
sbin
包含 nginx 服务器的可执行文件
如:启动、停止和重新加载
uwsgi_temp
uWSGI进程的临时存储目录
conf
包含 nginx 的配置文件
html
通常用于存储静态文件,如:html、css、图像等
proxy_temp
代理服务器的临时存储目录
scgi_temp
SCGI进程的临时存储目录
20.使用 systemctl 命令控制 nginx 服务
systemd
用于管理linux系统的初始化系统和服务管理器
systemctl
是systemd的命令行工具,可以用来启动、停止服务等
使用 systemctl 命令管理 nginx 服务
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=Nginx Web Server
After=network.target
[Service]
Type=forking
#ExecStart=/usr/local/workspace/nginx/sbin/nginx
ExecStart=/usr/bin/nginx
ExecReload=/usr/bin/nginx -s reload
ExecStop=/usr/bin/nginx -s stop
[Install]
WantedBy=multi-user.target
注
[Unit]
Description=Nginx Web Server
定义服务的描述信息
After=network.target
指定在 网络服务 启动之后启动
[Service]
Type=forking
设置了服务的类型为 forking,
表示以子进程的方式运行服务
ExecStart=/usr/bin/nginx
启动 nginx
ExecReload=/usr/bin/nginx -s reload
重新加载 nginx 的配置
ExecStop=/usr/bin/nginx -s stop
停止 nginx
[Install]
WantedBy=multi-user.target
该服务在系统进入多用户模式时自动启动,
在多用户模式下,可以有多个用户登录并使用该服务
systemctl 命令
查看服务状态 systemctl status nginx
启动 systemctl start nginx
停止 systemctl stop nginx
重新加载 systemctl reload nginx
检查 nginx 服务是否已设置为开机自动启动
systemctl is-enabled nginx
设置 nginx 服务开机自动启动
systemctl enable nginx
禁止 nginx 服务开机自动启动
systemctl disable nginx
TypeScript
TypeScript 快速掌握
课堂·前端 (更新中)
Electron学习指南
Electron 学习指南
【免费】笔记
Koa2
Koa2 快速掌握
21.安装和配置 mysql 允许远程连接
下载
https://dev.mysql.com/downloads/mysql
切换到 src 目录
cd /usr/local/src
解压
tar -xvf mysql-8.2.0-linux-glibc2.28-x86_64.tar.xz \
-C /usr/local/workspace
说明
-C(change directory) 表示解压到指定目录
切换到 workspace 目录
cd /usr/local/workspace
目录重命名
mv mysql-8.2.0-linux-glibc2.28-x86_64 mysql
切换到 mysql 目录
cd mysql
创建一个名为 mysql 的用户组
groupadd mysql
创建一个名为 mysql 的用户, 并将其添加到 mysql 用户组中
useradd -g mysql mysql
-g(primary group) 指定用户的主用户组
查看用户 mysql 所属的所有用户组
groups mysql
显示 mysql 目录的详细信息
ls -l /usr/local/workspace/mysql
修改 mysql 目录的所有者和所属组
chown -R mysql:mysql /usr/local/workspace/mysql
软连接
ln -s \
/usr/local/workspace/mysql/bin/mysqld \
/usr/bin/mysqld
初始化 mysql 数据库
mysqld \
--initialize \
--user=mysql \
--basedir=/usr/local/workspace/mysql \
--datadir=/usr/local/workspace/mysql/data
错误
error while loading shared libraries: libaio.so.1
解决方法
apt install libaio1
libaio.so.1 是异步I/O库,
允许应用程序进行非阻塞的磁盘读写操作
非阻塞
当调用某个函数或发出一个网络请求时,
程序不会等待这个操作完成就继续执行其他代码
临时密码
A temporary password is generated for
root@localhost: Tq6&)NF4jQa)
配置 my.cnf
vim /etc/my.cnf
启动 mysql
方式1 mysqld
mysqld &
错误
Could not create unix socket lock file
/var/lib/mysql/mysql.sock.lock
解决方法
mkdir /var/lib/mysql
chmod 777 /var/lib/mysql
说明
mysql.sock是数据库与客户端进行通信的套接字文件,
用于在mysql客户端和服务器之间建立本地连接
/var/lib 目录用于存储系统和应用程序的数据文件
方式2 mysqld_safe
软连接
ln -s \
/usr/local/workspace/mysql/bin/mysqld_safe \
/usr/bin/mysqld_safe
# mysqld_safe --user=mysql &
mysqld_safe &
说明
mysqld 直接启动 mysql 服务器
mysqld_safe 是一个封装了 mysqld 的脚本,
在启动 mysqld 之前检查一些配置和环境变量,
并在启动后监控 mysqld 的运行状态
查看错误日志
tail error.log
查找与 mysql 相关的进程
ps -aux | grep mysql
软连接
ln -s \
/usr/local/workspace/mysql/bin/mysql \
/usr/bin/mysql
连接到 mysql 数据库
mysql -u root -p
错误
Can't connect to local MySQL server
through socket '/var/lib/mysql/mysql.sock'
解决方法1
mkdir /var/lib/mysql
chmod 777 /var/lib/mysql
解决方法2
mysql -h 127.0.0.1 -u root -p
设置 root 用户密码为 123456
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
exit
允许远程连接
USE mysql;
UPDATE mysql.user SET host = '%' WHERE User = 'root';
flush privileges;
exit
软连接
ln -s \
/usr/local/workspace/mysql/bin/mysqladmin \
/usr/bin/mysqladmin
关闭 mysql 数据库
mysqladmin -u root -p shutdown
重启 mysql 数据库
mysqladmin -u root -p reload
使用 systemctl 命令管理 mysql 服务
vim /usr/lib/systemd/system/mysql.service
systemctl 命令
查看服务状态 systemctl status mysql
启动 systemctl start mysql
停止 systemctl stop mysql
检查 mysql 是否已设置为开机自动启动
systemctl is-enabled mysql
设置 mysql 开机自动启动
systemctl enable mysql
禁止 mysql 开机自动启动
systemctl disable mysql
评论区