1.系统下载与虚拟机设置
系统下载https://cn.ubuntu.comhttps://releases.ubuntu.com
虚拟机设置:
桥接模式
在桥接模式下, 虚拟出来的操作系统就像是局域网中的一台独立的主机, 它可以访问网内任何一台机器主机网卡和虚拟网卡的IP地址处于同一个网段, 子网掩码、网关、DNS等参数都相同
NAT模式
使用NAT模式网络连接时, 会在主机上建立单独的专用网络, 虚拟机不能直接和其他计算机进行通信,只能通过宿主机作为中介来进行通信
sudo apt update 和 sudo apt upgrade 区别:
sudo apt update 用于更新系统中可用软件包的列表, 不会安装或删除任何软件包, 只是更新软件包列表
sudo apt upgrade 用于升级系统中已经安装的软件包到最新版本
因此, 通常先执行 sudo apt update 命令来获取最新的软件包列表, 再执行 sudo apt upgrade
2.安装 openssh 和远程连接 ubuntu
Ubuntu:
查看IP:
ip addr
Windows:
检查 IP 是否连通
ping 192.168.177.130
Ubuntu:
安装 openssh-server
sudo apt install openssh-server
Windows:
使用密码登录
现在可以使用密码登录SSH。在客户端机器上使用以下命令:
ssh username@server_ip
系统会提示输入密码。输入正确密码后即可登录
如果能Ping通,但无法连接,请重启SSH服务或做下面相关设置.
Ubuntu:
配置SSH服务
安装完成后,SSH服务会自动启动。可以通过以下命令检查SSH服务状态:
sudo systemctl status ssh
如果服务未运行,可以手动启动:
sudo systemctl start ssh
启用密码登录
编辑SSH配置文件以允许密码登录:
sudo nano /etc/ssh/sshd_config
找到并修改以下行:
PasswordAuthentication yes
保存文件并重启SSH服务:
sudo systemctl restart ssh
安全建议
虽然密码登录方便,但为提高安全性,建议:
- 使用强密码
- 限制登录尝试次数
- 考虑使用密钥认证替代密码登录
- 定期更新系统和SSH服务
通过以上步骤,您已成功在Linux环境中安装并配置了openssh-server,实现了使用密码进行SSH登录。请记住定期检查和更新系统,以确保安全性。
vscode远程连接设置
root 用户 ssh 远程登录 ubuntu
root 默认禁止ssh 远程
修改 /etc 目录中的 sshd_config 文件, 设置 PermitRootLogin yes
/etc 目录用于存储系统的配置文件
su - root
vim /etc/ssh/sshd_config
vim 查询 / PermitRootLog 回车
#PermitRootLogin prohibit-password
查找到这行后在下面添加
PermitRootLogin yes
systemctl status ssh 查看服务状态
systemctl restart ssh 重启服务
注 ssh.service 是 openssh 的服务名称
3.文件与目录操作
(LINUX 目录 等于 WINDOWS文件夹)
clear 清屏命令
clear
pwd 显示当前路径
ls 当前文件夹有那些文件与文件夹
ls
ls -l 按照长格式(long format)显示文件信息
mkdir 创建文件夹
创建单个目录 mkdir web1
创建多个目录 mkdir web2 test1
创建多级目录 mkdir -p web3/test2
[p:parents 父级目录] -p表示创建指定的目录,并自动创建其中所需的所有缺少的父级目录
cd 切换目录
cd web1
cd ../
cd /home/zzb/web2
注:相对路径中 "./" 表示当前目录, "../" 表示上一级目录
绝对路径是相对于系统 根目录"/" 的完整路径. 如 /home/zzb/web1
相对路径是以 当前目录"./" 为基准的路径, 是从当前目录到目标文件或目录的路径.
如 ./web1/test1.txt 表示当前目录下的 web 目录中的 test1.txt 文件
touch 创建空文件
创建单个空文件 touch w.txt
创建多个空文件 touch d.txt t.txt
扩展:
更新时间戳:
touch -a file.txt 更新访问时间戳
touch -m file.txt 更新修改时间戳
touch -a -m file.txt 同时更新访问和修改时间戳
设置时间戳:
touch -t 202101011200 file.txt 访问和修改时间设置为2021年1月1日12点
echo 打印输出文本
echo "A1"
向文件中添加一行文字 [ >> w.txt 将打印输出的文本 追加 到 w.txt 文件末尾, 若文件不存在, 则会创建该文件 ]
echo "A1" >> w.txt
注: >符号 是重定向输出
[ > 会覆盖已有的文件, >> 则会保留原来文件的内容, 在文件末尾追加内容 ]
cat 显示文件内容
cat w.txt
head 从文件开头显示指定数量的行
head w.txt 默认显示文件的前 10 行
head -n 1 w.txt 显示文件的前 1 行
tail 从文件末尾显示指定数量的行
tail w.txt 默认显示文件的最后 10 行
tail -n 1 w.txt 显示文件的最后 1 行
cp 复制
将文件复制到另一个目录中
cp w.txt ../web1
cp /home/zzb/w.txt /home/zzb/web2
将文件复制到另一个目录中并重命名
cp w.txt ../web2/newW2.txt
将目录复制到另一个目录中
[r:recursive 递归] -r表示复制整个目录树的内容
cp -r /home/zzb/web2/ /home/zzn/web1/
mv 重命名或移动
文件
mv newW2.txt w.txt 重命名文件
mv w.txt /home/zzb/web1 移动文件
mv w.txt ../text.txt 移动文件并重命名
目录
mv web1 newWeb 重命名目录
mv newWeb /home/zzb/test 移动目录
mv newWeb /home/zzb/test/demo 移动目录并重命名
rm 删除文件或目录
删除单个文件 rm d.txt
删除多个文件 rm t.txt w.txt
删除目录 rm -r web1
[r:recursive 递归] -r表示删除此文件夹和其子文件夹中的所有文件和目录
4.vim 编辑器
[vim 是 vi 的增强版, 增加了许多功能和特性, 如语法着色、自动补全、多窗口编辑、插件支持等]
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表示替换操作 g表示全局替换,若不加g,则只会替换每行中第一个匹配到的文本退出:q 退出不保存 [q:quit 退出]:q! 强制退出不保存:w 保存文件 [w:write 写入]:wq 保存退出
5.grep 使用正则表达式来搜索文本
在单个文件中查找指定的字符串
grep A1 test.txt
在 web.txt 文件中查找包含 A1 字符串的所有行并打印出来
在单个文件中查找指定的字符串 [行号] -n 的全称是 "line-number" 表示输出匹配行的行号
grep -n A1 test.txt
在单个文件中查找指定的字符串 [忽略字母大小写] -i 的全称是 "ignore-case" 表示忽略字母的大小写
grep -i a1 test.txt
在单个文件中查找指定的字符串 [忽略字母大小写并输出匹配行的行号]
grep -i -n a1 test.txt
grep -in a1 test.txt
在单个文件中查找指定的字符串 -A 全称 "after-context", 表示上下文
[-A1 表示显示匹配行后1行的内容]
grep -n -A1 k test.txt
在单个文件中查找指定的字符串 -B 全称 "before-context", 表示上下文
[-B1 表示显示匹配行前1行的内容]
grep -n -B1 k test.txt
在单个文件中查找指定的字符串 -C 全称 "context", 表示上下文
[-C1 表示显示匹配行上下各1行的内容]
grep -n -C1 k test.txt
grep -nC1 k test.txt
在多个文件中查找指定的字符串
grep A1 test.txt test2.txt
在 test.txt test2.txt 文件中查找包含 A1 字符串的所有行并打印出来
在多个文件中查找指定的字符串 [全词匹配] -w 的全称是 "word-regexp",
表示使用全词匹配, 即只有匹配到整个单词才算匹配成功
grep -w A1 test.txt test2.txt
6.su 切换到 root 用户
在 Ubuntu 系统中, root 用户没有设置默认密码
sudo passwd root 更改 root 用户的密码
su - root 将当前用户临时切换到 root 用户 [su:switch user]
exit 注销root 退出当前的 shell 环境或终端
注
su root
将当前用户临时切换到 root 用户, 但不会切换当前用户的环境变量和工作目录,
当前用户的环境并不完全适合作为 root 用户来运行, 因为可能会出现一些权限问题
su - root
将当前用户临时切换到 root 用户, 同时切换当前用户的环境变量和工作目录
建议使用 su - root 命令来切换到 root 用户, 以确保当前用户的环境变量和工作目录
与 root 用户的环境变量和工作目录保持一致, 避免出现不必要的问题
在 linux 系统中, 用户的系统设置通常是独立的, 每个用户都有自己的配置文件和环境变量
当使用 su - root 命令临时切换到 root 用户后, 可以执行一些需要 root 权限的操作, 比如:修改系统设置
修改的设置只会影响当前 root 的用户环境, 不会影响其他用户的系统设置
当你退出 root 用户环境后, 这些操作将不会对其他用户或会话产生影响
7.adduser 添加、deluser 删除用户
su - root 切换到root用户
#当创建一个新用户账户时, 系统都会在 /home 目录下自动创建与该用户账户同名的文件夹
adduser user1 创建 用户 [ ls /home 查看该系统上所有已创建用户的主目录 ]
deluser user1 删除luna用户 [ rm -r /home/user1 删除user1用户的主目录 ]
deluser --remove-home user1 删除 user1 用户及其相关文件
--remove-home 删除用户的主目录和邮箱
--remove-all-files 删除用户拥有的所有文件
--backup 删除前将文件备份。
--backup-to <DIR> 备份的目标目录。
默认是当前目录。
--system 只有当该用户是系统用户时才删除
passwd user1 更改用户密码
删除时可能碰到的问题,用户可能有任务在运行
报错 userdel: user user1 is currently used by process 16577
解决:
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 user1 显示系统中所有名称包含 user1 的进程的详细信息
ps[process status 进程状态]
-e[every 每个] 表示显示所有进程, 包括其他用户的进程
-f[full format 完整格式] 表示以完整格式显示进程信息
| 管道符号 将前一个命令的 "输出" 作为后一个命令的 "输入"
grep user1 会在 ps -ef 命令的 "输出" 中查找包含 luna 的进程信息
强制结束 id=16577的进程
kill -9 16577
-9 表示发送 SIGKILL[signal kill] 信号给进程 id 为 16577 的进程
SIGKILL 信号是一种强制停止进程的信号
8.查看用户的所属组信息
groups查看组信息
groups 显示当前用户的所属组信息
zzb adm cdrom sudo dip plugdev users lpadmin
zzb : 组名为 zzb 的用户组 [zzb 用户隶属于和自己同名用户组]
adm(Administrator) : 管理员用户组, 具有系统管理权限
cdrom(CD-ROM) : 光盘用户组, 具有读取光盘的权限
sudo(Super User Do) : 超级用户组, 具有执行系统管理任务的权限
dip(Device Interface) : 接口用户组, 具有配置网络接口的权限
plugdev(Plug-in Device) : 设备插件用户组, 具有管理设备插件(如声卡、显卡等)的权限
LXD(LXC on steroids)是LXD容器管理工具的用户组
users(Users) : 普通用户组, 不具有系统管理权限
lpadmin(Local Printer Administration) : 打印机管理用户组, 具有管理打印机的权限
LXD是基于Linux容器的技术,它提供了以下主要功能:
- 容器创建和管理:用户可以轻松创建、启动、停止和删除容器。
- 网络配置:LXD支持网络配置,允许容器访问外部网络或与其他容器通信。
- 存储管理:LXD提供了灵活的存储解决方案,用户可以定义存储池和卷,用于容器的数据存储。
- 安全性和隔离:LXD确保容器之间的隔离,每个容器运行在自己的环境中,互不干扰。
groups zzb [查看 zzb 用户的所属组信息]
zzb : zzb adm cdrom sudo dip plugdev lxd
zzb 当前登录用户的用户名是 zzb
zzb 组名为 zzb 的用户组
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 表示该用户组的成员, 每个成员用逗号分隔
列出包含 zzb 字符串的用户组的信息
grep zzb /etc/group
adm:x:4:syslog,zzb [表示名为adm的组, 组密码是x, 组ID是4, 组成员包括syslog和zzb]
cdrom:x:24:zzb [表示名为cdrom的组, 组密码是x, 组ID是24, 组成员包括zzb]
sudo:x:27:zzb [表示名为sudo的组, 组密码是x, 组ID是27, 组成员包括zzb]
dip:x:30:zzb [表示名为dip的组, 组密码是x, 组ID是30, 组成员包括zzb]
plugdev:x:46:zzb [表示名为plugdev的组, 组密码是x, 组ID是46, 组成员包括zzb]
lxd:x:118:zzb [表示名为lpadmin的组, 组密码是x, 组ID是101, 组成员包括zzb]
zzb:x:1000: [表示名为david的组, 组密码是x, 组ID是1000, 没有其他组成员]
查看用户 zzb 的用户ID和组ID
id zzb
uid=1000(zzb) gid=1000(zzb)
groups=1000(zzb),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),101(lxd)
groupadd 创建组
创建测试用户
su - root 切换到root用户
adduser user2 创建user2用户
创建一个名为 test 的用户组
groupadd test
注
grep test /etc/group
test:x:1003:
将 user1 用户添加到 test 用户组
查看用户 user1 所属组信息
groups user1
user1 : user1 users
将 user1 用户添加到 test 用户组(保留原来的组,添加到新组)
usermod -a -G test user1
注 [-a:append -G:group]
-a 表示以追加方式(append) 将用户 user1 添加到 test 组中, 不影响其原有所属组
若省略了 -a, 用户 user1 将从其当前组中删除,并被添加到名为 test 的新组中
-G test 表示将用户添加到名为 test 的组中
查看用户 user1 所属的所有用户组
groups user1
user1 : user1 users test
注
grep test /etc/group
test:x:1003:user1
将用户 user1 从 test 用户组中删除
deluser user1 test
groupdel 删除 test 的用户组
groupdel test
groupdel user1 报错 [不能移除用户 luna 的主组]
9.文件和目录权限
目录权限
示例
mkdir demo 创建目录
ls -l 按照长格式(long format)显示文件信息
drwxrwxr-x 2 zzb zzb 4096 Dec 21 15:24 demo
d 表示目录(directory)
rwxrwxr-x 是目录的权限部分, 其中:
r(read) 表示读取权限, 允许用户列出目录中的文件列表
w(write) 表示写入权限, 允许用户对目录创建、删除、修改等
x(execute) 表示执行权限, 允许用户进入目录并访问其中的文件和子目录
rwx 是目录所有者(owner)的权限(前面一组), 表示具有读取、写入和执行权限
rwx 是目录所属组(group)的权限(后面一组), 表示具有读取、写入和执行权限
r-x 是其他用户(others)的权限, 表示只具有读取和执行权限
2 是文件的硬链接数, 表示该目录有2个硬链接
除了根目录(/)外, 每个目录至少包含2个目录项 . 和 ..
.(点) 表示当前目录
..(点点) 表示上级目录
zzb 是目录的所有者, 即创建该目录的用户
zzb 是目录的所属组, 即该目录所属的用户组
4096 是文件的大小, 表示该目录占用的磁盘空间为 4096 字节
11 月 30 15:15 是该目录最后一次被修改的日期和时间
demo 创建的目录
创建软链接(符号链接) (等于 创建的快捷方式)
ln -s /home/zzb/test.txt /home/zzb/zzbLink.txt
创建硬链接(相当于创建一个变量指向同一个内容地址)
ln /home/zzb/test2.txt /home/zzb/zzbLink2.txt
实现方式:
硬链接是指向文件索引节点的引用, 类似原始文件的别名,
硬链接与原始文件共享同一个索引节点,在系统中可以被视为同一个文件.
软链接是指向另一个文件或目录的路径, 类似Windows的快捷方式,
软链接有自己的索引节点
删除原始文件时:
硬链接仍然存在, 因为它指向的是文件的索引节点
软链接则会失效, 因为它指向的文件已不存在
文件权限
示例
touch test.txt 创建空文件
ls -l 按照长格式(long format)显示文件信息
-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 是文件的硬链接数, 表示该文件有一个硬链接
在默认情况下, 创建一个文件时, 系统通常会创建一个硬链接
zzb 是文件的所有者, 即创建该文件的用户
zzb 是文件的所属组, 即该文件所属的用户组
94 是文件的大小, 表示该文件目前数据大小
11 月 30 14:58 是该文件最后一次被修改的日期和时间
test.txt 创建的文件
10.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= test.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
11.chown 和 chgrp更改文件或目录的所有者和所属组
su - root 切换到 root 用户
chown(change owner) 更改文件或目录的所有者
将 test.txt 文件的所有者更改为 zzb 用户
chown zzb test.txt
将 web 目录的所有者更改为 zzb 用户
chown zzb web
将 web 目录及其包含的所有文件和子目录的所有者更改为 zzb 用户
[-R:recursive 递归]
chown -R zzb web
chgrp(change group) 更改文件或目录的所属组
将 test.txt 文件的所属组更改为 zzb 组
chgrp zzb test.txt
将 web 目录的所属组更改为 zzb 组
chgrp zzb web
注
将目录 web 的所有者更改为 zzb 用户,所属组更改为 root 组
chown zzb:root web
12.日期和时间
date 显示当前日期、时间和时区
date
Sun Dec 22 03:40:07 AM UTC 2024
UTC(协调世界时)
UTC,即协调世界时,是基于原子钟的时间标准,被广泛用作全球事件时间的一致性参考。UTC不包含任何时区信息,因此它是一个“纯”时间标准。
CST(中国标准时间)
CST,即中国标准时间,是UTC+8时区的别名,适用于中国大陆、香港和澳门。CST时间比UTC时间快8小时
+%Y-%m-%d 日期格式化
年(Year)、月(Month)、日(Day) YYYY-MM-DD
date +%Y-%m-%d
2024-12-22
简化
date +%F
2024-12-22
+%H:%M:%S 时间格式化
时(Hour)、分(Minute)、秒(Second) HH:MM:SS
date +%H:%M:%S
03:41:17
简化
date +%T
03:41:17
年、月、日、时、分、秒 YYYY-MM-DD HH:MM:SS
date +"%Y-%m-%d %H:%M:%S"
2024-12-22 03:42:21
简化
date +"%F %T"
2024-12-22 03:42:21
注
错误示范
echo date +"%F %T" >> log.txt
echo 'date +"%F %T"' >> log2.txt
正确示范
echo `date +"%F %T"` >> log3.txt 不是单引号
echo $(date +"%F %T") >> log4.txt
反引号` 和 $() 都可以用来执行命令或表达式的值
$()不仅可以引用命令的输出, 还可以引用变量的值、命令的参数等
将时间从UTC设置为CST:
sudo timedatectl set-timezone Asia/Shanghai
查看当前时区设置:
timedatectl
13.前台和后台运行 shell 脚本
shell 是一个命令行解释器, 负责接收和解析用户通过终端输入的命令每当用户在终端中输入一条命令,shell 会立即将其 "翻译" 成操作系统可以理解的指令
终端 是一个提供命令输入和输出环境的程序,可以把它看作是一个窗口,让用户可以看到系统的反馈而 shell 则是这个窗口中的工具,帮助用户向操作系统发出指令
demo.sh
#!/bin/bashwhile true
doecho $(date +"%F %T") >> time.txtsleep 3
done
#!/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 79426
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的进程信息
14.ps 查看进程信息
进程是指在计算机中正在运行的程序
ps (Process Status) 进程状态 显示当前终端会话中运行的进程信息
ps -f 显示当前终端会话中运行的进程的详细信息
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 (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=80124 的进程
kill -9 80124
-9 表示发送 SIGKILL[signal kill] 信号给进程 id 为 80124 的进程
SIGKILL 信号是一种强制停止进程的信号
15.查看cpu、内存等系统信息
top 查看系统的实时信息,包括CPU占用率、内存使用、进程列表等
top - 16:28:23 up 13:25, 4 users, load average: 0.00, 0.00, 0.00
(16:28:23) 当前时间为16:28:23
(up 13:25) 系统运行了的时间
(4 user) 4个登录用户
(load average: 0.00,0.00,0.00) 系统的负载平均值为0.00,0.00,0.00
系统在过去的1分钟(0.00)、5分钟(0.00,)、15分钟内(0.00)的平均负载
Tasks: 231 total, 1 running, 230 sleeping, 0 stopped, 0 zombie
(231 total) 总共有231个进程
(1 running) 1个正在运行的进程数
(230 sleeping) 230个正在休眠的进程
(0 stopped) 0个停止的进程
(0 zombie) 0个僵尸进程
僵尸进程 是指在进程已经结束运行但其相关资源
(如内存空间等)尚未被释放的情况下,该进程的状态,
是一个已经死亡但仍然存在于系统中的进程
%Cpu(s): 0.2 us, 0.5 sy, 0.0 ni, 99.3 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.5 sy)[system] 系统空间占用CPU的百分比为0.5%
(0.0 ni)[nice] 调整过优先级的用户进程占用 CPU 的百分比为0.0%
nice 优先级调整值,用于调整进程的优先级
当一个进程被赋予较高的nice值时,它将以较低的优先级运行,
从而使其他进程能够获得更多的 CPU 资源
(99.3 id)[idle] 空闲时间占用CPU的百分比为99.3%
99.3 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 : 3868.1 total, 1559.8 free, 755.6 used, 1864.6 buff/cache
MiB Mem[Megabytes of Memory] 内存的兆字节数
(3868.1 total) 总内存大小为3868.1 MiB
(1559.8 free) 空闲内存大小为1559.8 MiB
(755.6 used) 已使用的内存大小为755.6 MiB
(1864.6 buff/cache) 缓冲和缓存区内存大小为1864.6 MiB
MiB Swap: 2998.0 total, 2998.0 free, 0.0 used. 3116.7 avail Mem
MiB Swap[Megabytes of Swap] 交换空间兆字节数
交换空间(Swap Space) 是系统中的虚拟内存技术,用于在物理内存不足时,
将部分内存数据暂时存储到磁盘上
(2998.0 total) 总交换空间大小为2998.0 MiB
(2998.0 free) 空闲交换空间大小为2998.0 MiB
(0.0 used) 已使用的交换空间大小为0.0 MiB
(3116.7 avail Mem) 可用的物理内存大小为3116.7 MiB
2998.0 free 表示交换空间完全空闲,没有被使用,
说明系统目前没有内存压力,不需要将内存数据交换到磁盘上
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 1036 查看PID为1036的进程的实时信息
p(process) 进程
free -m 以兆为单位显示内存的使用情况
-m 兆字节(MB)
显示内存与交换内存使用情况
total 总内存大小
used 已使用的内存大小
free 空闲内存大小
shared 共享内存大小
buff/cache 缓冲和缓存区内存大小
available 可用的内存大小 = 空闲内存 + 缓冲和缓存区内存
注 虽然空闲内存为 1559 MB, 缓冲和缓存区内存为 1865 MB,
但实际可用的内存大小只有 3112 MB,
这是因为还有其他一些内存区域被占用, 不能立即用于新的进程
16.压缩和解压
nginx https://nginx.org/en/download.html 下载稳定版本 nginx-1.26.2.tar.gz
ubuntu
/usr 目录主要用来存储系统级别的二进制文件、库和文档可以被视为系统级目录
/usr/local 目录通常用来存储用户手动安装的软件
windows
C:\Windows 主要存储系统文件
C:\Program Files 目录通常用来存储用户手动安装的软件
ls /usr/local/
注 /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: 需要安装,系统没自带
sudo apt install unzip
sudo apt install zip
解压 unzip images.zip
压缩 zip -r img.zip images
注 -r(recursive) 递归地压缩指定目录及其所有子目录和文件
不能对文件直接zip,需要放到目录中,对目录zip
17.安装和配置 nginx
创建工作目录
mkdir /usr/local/workspace
切换到 nginx 目录
cd /usr/local/src/nginx-1.26.2
配置
./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
http://127.0.0.1
windows
http://192.168.177.130
查看 nginx 进程
ps -ef | grep nginx
停止 nginx 服务
kill 88485
注 nginx 目录说明
client_body_temp 用于存储客户端发送的请求体(body)的临时文件
如:上传的文件
conf 包含 nginx 的配置文件
fastcgi_temp FastCGI进程的临时存储目录
html 通常用于存储静态文件,如:html、css、图像等
logs 用于存储 nginx 的日志文件
access.log 记录所有访问请求的日志
error.log 记录错误信息的日志
proxy_temp 代理服务器的临时存储目录
sbin 包含 nginx 服务器的可执行文件
如:启动、停止和重新加载
scgi_temp SCGI进程的临时存储目录
uwsgi_temp uWSGI进程的临时存储目录
18.使用 systemctl 命令控制 nginx 服务
systemd 用于管理linux系统的初始化系统和服务管理器
systemctl 是systemd的命令行工具,可以用来启动、停止服务等
使用 systemctl 命令管理 nginx 服务
vim /usr/lib/systemd/system/nginx.service
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
19.安装和配置 mysql 允许远程连接
Ubuntu和MySQL默认版本对照
以下是一个以表格形式列出了不同Ubuntu版本和它们通常默认安装的MySQL版本:
Ubuntu 版本 | 默认 MySQL 版本 |
Ubuntu 22.04 LTS | MySQL 8.0 |
Ubuntu 20.04 LTS | MySQL 8.0 |
Ubuntu 18.04 LTS | MySQL 5.7 |
Ubuntu 16.04 LTS | MySQL 5.7 |
在线安装MySQL
步骤1:更新软件包列表
在进行任何软件安装之前,请确保你的系统的软件包列表是最新的。打开终端并运行以下命令:
sudo apt update
步骤2:安装MySQL服务器
在更新软件包列表后,这里我们可以查看一下可使用的MySQL安装包:# 查看可使用的安装包
sudo apt search mysql-server
接下来可以使用以下命令安装MySQL服务器:
# 安装最新版本
sudo apt install -y mysql-server
# 安装指定版本
sudo apt install -y mysql-server-8.0
如果不加-y
会在安装过程中,系统将提示你设置MySQL的root密码。确保密码足够强,且记住它,因为你将在以后需要用到它。
步骤3:启动MySQL服务
安装完成后,MySQL服务会自动启动,未启动则使用以下命令启动MySQL服务:
sudo systemctl start mysql
并将MySQL设置为开机自启动:
sudo systemctl enable mysql
步骤4:检查MySQL状态
你可以使用以下命令来检查MySQL是否正在运行:
sudo systemctl status mysql
至此,你已经成功在线安装了MySQL服务器。
步骤5:修改密码、权限
默认安装是没有设置密码的,需要我们自己设置密码
# 登录mysql,在默认安装时如果没有让我们设置密码,则直接回车就能登录成功。
sudo mysql -uroot -p
# 设置密码 mysql8.0
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
# 设置密码 mysql5.7
set password=password('新密码');
# 配置IP 5.7
grant all privileges on *.* to root@"%" identified by "密码";
# 刷新缓存
flush privileges;
注意:配置8.0版本参考:我这里通过这种方式没有实现所有IP都能访问;我是通过直接修改配置文件才实现的,MySQL8.0版本把配置文件 my.cnf
拆分成mysql.cnf
和mysqld.cnf
,我们需要修改的是mysqld.cnf
文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
修改 bind-address
,保存后重启MySQL即可。
bind-address = 0.0.0.0
重启MySQL重新加载一下配置:
sudo systemctl restart mysql
离线安装MySQL
如果你需要在没有互联网连接的环境中安装MySQL,可以在另一台联网的计算机上下载MySQL的安装包,然后将其传输到目标Ubuntu机器上进行安装。
步骤1:下载MySQL安装包
在联网的计算机上,访问 MySQL官方网站 或者MySQL的软件仓库,然后下载适合你系统版本的MySQL安装包(通常是.deb文件)。将下载的文件保存到一个可移动的存储设备上。
步骤2:传输安装包到目标机器
将下载的MySQL安装包从联网计算机传输到目标Ubuntu机器。你可以使用USB驱动器、外部硬盘、网络传输等方法来完成这个步骤。
步骤3:安装MySQL
在目标Ubuntu机器上,使用以下命令来安装MySQL:
.deb文件安装方法
sudo dpkg -i mysql-package-name.deb
请将 mysql-package-name.deb
替换为你下载的MySQL安装包的文件名。
# 解压文件
tar -zxvf mysql-package.tar.gz
# 安装
cd /tmp/mysql-package/bin/
./mysql_install_db
请将 mysql-package.tar.gz 替换为你实际下载的MySQL安装包的文件名。
步骤4:配置MySQL
安装完成后,你可以使用以下命令启动MySQL服务:
sudo systemctl start mysql
然后将MySQL设置为开机自启动:
sudo systemctl enable mysql
步骤5:检查MySQL状态
使用以下命令来检查MySQL是否正在运行:
sudo systemctl status mysql
至此,你已经成功在离线环境中安装了MySQL服务器。总结起来,你可以根据你的网络连接情况选择在线或离线安装MySQL。在线安装更加简单,但离线安装可以让你在没有网络连接的情况下进行安装。希望这篇博客对你有所帮助,顺利安装MySQL!如果你需要更详细的步骤或进一步的配置,请查阅MySQL官方文档或相关教程。
查找与 mysql 相关的进程 ps -aux | grep mysql
使用 systemctl 命令管理 mysql 服务
systemctl 命令
查看服务状态 systemctl status mysql
启动 systemctl start mysql
停止 systemctl stop mysql
检查 mysql 是否已设置为开机自动启动
systemctl is-enabled mysql
设置 mysql 开机自动启动
systemctl enable mysql
禁止 mysql 开机自动启动
systemctl disable mysql
关闭 mysql 数据库 mysqladmin -u root -p shutdown
重启 mysql 数据库 mysqladmin -u root -p reload
登入mysql后设置允许远程连接
USE mysql;UPDATE mysql.user SET host = '%' WHERE User = 'root';flush privileges;exit
mysql8装完,怎么进入mysqladmin
MySQL 8 安装完成后,您可以通过命令行使用 mysqladmin
工具来进行一些基本操作,例如创建或删除数据库,重置密码等。
要使用 mysqladmin
,您需要确保 MySQL 服务正在运行,并且 mysqladmin
工具在您的系统 PATH 环境变量中可用。
以下是一些使用 mysqladmin
的基本示例:
创建新数据库:
mysqladmin -u root -p create my_new_database
在执行上述命令时,系统会提示您输入 root 用户的密码。
删除数据库:
mysqladmin -u root -p drop my_new_database