一、Linux 文件管理
1、目录结构
- /bin:存放着最经常使用的命令。(/usr/bin、/usr/local/bin)
- /sbin:存放的是系统管理员使用的系统管理程序。(/usr/sbin、/usr/local/sbin)
- /home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
- /root:该目录为系统管理员root,也称作超级权限者的用户主目录。
- /tmp:这个目录是用来存放一些临时文件的。
- /var:这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件。
- /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
- /mnt:用户可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容。
- /etc:配置文件(系统相关如:network/etc/sysconfig)
- /opt:这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下。默认为空。
- /usr:系统文件,相当于C:\Windows
- /usr/local:软件安装目录,一般是通过编译源码方式安装的程序,相当于C:\Program
- /boot:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
- /proc:这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
- /srv :service缩写,该目录存放一些服务启动之后需要提取的数据。
- /sys:这是linux2.6内核的一个很大的变化。该目录下安装了26内核中新出现的一个文件系线。
- /dev:类似于windows的设备管理器,把所有的硬件用文件的形式存储。
- /selinux[security-enhanced linux]360:SELinux是一种安全子系统,它能控制程序只能访问特定文件
2、查看目录
1. ls 命令
ls [-a -l -h] [linux路径] # 获取指定工作目录下的内容
ls # 获取当前工作目录下的内容
- -a:表示 all 的意思,列出文件包含 隐藏文件
- -l:竖向排列,详细信息
- -h:获取文件大小单位(要与 -l 结合使用)
2. cd 切换目录
cd linux路径 # 切换工作目录
cd # 回到 Home 目录( /home/用户名 )
3. pwd 查看工作目录
pwd # 查看当前工作目录
4. 特殊路径
cd ./Desktop # ./ 表示当前目录
cd ../ # 表示返回上一级目录
cd ~ # 表示返回 Home 目录
3、文件操作
1. mkdir 创建文件夹
mkdir [-p] linux路径 # 创建新的目录
- -p 创建多层级目录
mkdir -p ~/erer/good/test # Home 目录内创建 erer/good/test 路径
2. touch 创建文件
touch linux路径 # 创建文件夹
touch test.txt
3. cp 复制文件
cp [-r] 参数1 参数2
cp test.txt test2.txt # 复制文件
cp -r erer erer # 复制文件夹
- -r:用于复制文件夹,表示递归
- 参数1:Linux路径,被复制的文件或文件夹
- 参数2:Linux路径,要复制去的地方
4. mv 移动文件
mv 参数1 参数2
mv test.txt Desktop/ # 将 test.txt 文件移动到 Desktop 文件夹下
mv test2.txt test3.txt # 将 test2.txt 文件更名为 test3.txt
mv test Desktop/ # 将 test 文件夹移动到 Desktop 文件夹下
- 参数1:Linux路径,被移动的文件或文件夹
- 参数2:Linux路径,要移动去的地方,如果目标不存在,则进行改名
5. rm 删除文件
rm [-r -f] 参数1 参数2 ... 参数N # 删除文件、文件夹
rm -r test* # 匹配任意以 test 开头的内容
rm -r *test # 匹配任意以 test 结尾的内容
- -r:用于删除文件夹
- -f:强制删除
- 参数1 参数2 … 参数N:要删除的文件夹、文件
4、查看文件
1. cat 查看文件
cat linux路径 # 查看文件内容
2. more 查看文件
more linux路径 # 翻页查看文件内容
- 空格翻页
- q退出
3. tail 持续追踪
tail [-f -num] linux路径
- -f:表示持续跟踪
- -num:查看尾部多少行,不填默认10行
4. find 查找文件
find 起始路径 -name "被查找文件名"
find 起始路径 -size +|-n[kMG]
- -name:根据文件名查找文件
- -size:根据文件大小查找文件
- +:大于、-:小于
- n表示大小
- kMG表示单位,k=kb、M=MB、G=GB
5. wc 文件统计
wc [-c -m -l -w] linux路径 # 统计文件的行数、单词数量等
- -c:统计 bytes 数量
- -m:统计字符数量
- -l:统计行数
- -w:统计单词数量
6. grep 过滤关键字
grep [-n] 关键字 linux路径 # 过滤关键字查找对应文件行数
- -n:显示行数
- 关键字:要过滤的关键字
5、vim 编辑器
1. 工作模式
- 命令模式:不能自由编辑文本,以命令驱动执行不同的功能;
- 输入模式:编辑模式、插入模式,自由编辑文本;
- 底线命令模式:用于文件的保存和退出。
2. 命令模式
vim linux路径 # 打开文件,如果文件不存在新建并打开
命令 | 作用 |
---|---|
i | 进入输入模式 |
0 | 移动光标到当前行的头部 |
$ | 移动光标到当前行的尾部 |
/ | 进入到搜索模式 |
n | 向下继续搜索 |
N | 向上继续搜索 |
dd | 删除光标所在行 |
ndd | n是数字,删除当前行和下面的n行 |
yy | 复制当前行 |
nyy | n是数字,复制当前行和下面的n行 |
gg | 跳到首行 |
G | 跳到尾行 |
dG | 从当前行开始向下全部删除 |
dgg | 从当前行开始向上全部删除 |
u | 撤销修改 |
ctrl+r | 反向撤销修改 |
;x,y s/原内容/新内容/g | x到y行进行全局替换,新内容替换原内容 |
3. 输入模式
- esc:退出输入模式
4. 底线命令模式
命令 | 作用 |
---|---|
:wq | 保存并退出 |
:q | 退出 |
:set nu | 显示行号 |
:set paste | 设置粘贴模式 |
:set list | 显示控制字符 |
二、Linux 权限管理
1、用户和用户组
1. 用户组管理
groupadd 用户组名 # 创建用户组名
groupdel 用户组名 # 删除用户组名
2. 用户管理
id [用户名] # 查看用户
[erer@localhost ~]$ id
用户id=1000(erer) 组id=1000(erer) 组=1000(erer) 上下文=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
- 用户名:被查看的用户,如果不提供则查看自身
useradd [-g -d -u] 用户名 # 创建用户
- -g:指定用户的组,不指定-g,会创建同名组并自动加入;指定-g需要组已经存在,如已存在同名组,必须使用-g
- -d:指定用户HOME路径;不指定,HOME目录默认在:/home/用户名
- -u:指定用户的ID
userdel [-r] 用户名 # 删除用户
- -r:删除用户的HOME目录,不使用-r,删除用户时,HOME目录保留
usermod -aG 用户组 用户名 # 修改用户所属组
passwd [用户名] # 修改密码
- 用户名:被修改的用户,如果不提供则修改自身
3. su 切换用户
su [-] [用户名]
- -:是否在切换用户的时候加载环境变量
- exit:登出,退回上一个用户
- Ctrl + D:登出,退回上一个用户
- su -:默认切换root用户
2、sudo root权限
- 切换到 root 用户
- 执行 visudo 命令
- 在文件最后添加:
[用户名] ALL=(ALL) NOPASSWD: ALL
- 切换普通用户,执行 sudo 命令
3、查看用户
1. getent 查看用户
getent passwd # 查看当前系统中有哪些用户
- 共有7份信息,分别是:
- 用户名:密码(X:密码占位符):用户UID:组ID:描述信息(默认是用户名):HOME目录:执行终端(默认/bin/bash)
- 系统约定: RHEL7–9
- uid: 0 特权用户
- uid: 1~999 系统用户
- uid: 1000+ 普通用户
[erer@localhost ~]$ getent passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
libstoragemgmt:x:992:992:daemon account for libstoragemgmt:/:/usr/sbin/nologin
systemd-oom:x:991:991:systemd Userspace OOM Killer:/:/usr/sbin/nologin
geoclue:x:990:990:User for geoclue:/var/lib/geoclue:/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/sbin/nologin
cockpit-ws:x:989:989:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:x:988:988:User for cockpit-ws instances:/nonexisting:/sbin/nologin
colord:x:987:987:User for colord:/var/lib/colord:/sbin/nologin
sssd:x:986:986:User for sssd:/:/sbin/nologin
setroubleshoot:x:985:985:SELinux troubleshoot server:/var/lib/setroubleshoot:/sbin/nologin
pipewire:x:984:984:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
flatpak:x:983:983:User for flatpak system helper:/:/sbin/nologin
clevis:x:982:982:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:981:980::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin
chrony:x:980:979:chrony system user:/var/lib/chrony:/sbin/nologin
dnsmasq:x:979:978:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
erer:x:1000:1000:erer:/home/erer:/bin/bash
2. cat 查看用户
[erer@localhost ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
libstoragemgmt:x:992:992:daemon account for libstoragemgmt:/:/usr/sbin/nologin
systemd-oom:x:991:991:systemd Userspace OOM Killer:/:/usr/sbin/nologin
geoclue:x:990:990:User for geoclue:/var/lib/geoclue:/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/sbin/nologin
cockpit-ws:x:989:989:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:x:988:988:User for cockpit-ws instances:/nonexisting:/sbin/nologin
colord:x:987:987:User for colord:/var/lib/colord:/sbin/nologin
sssd:x:986:986:User for sssd:/:/sbin/nologin
setroubleshoot:x:985:985:SELinux troubleshoot server:/var/lib/setroubleshoot:/sbin/nologin
pipewire:x:984:984:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
flatpak:x:983:983:User for flatpak system helper:/:/sbin/nologin
clevis:x:982:982:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:981:980::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin
chrony:x:980:979:chrony system user:/var/lib/chrony:/sbin/nologin
dnsmasq:x:979:978:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
erer:x:1000:1000:erer:/home/erer:/bin/bash
3. getent 查看组
getent group # 查看当前系统中有哪些用户组
- 包含3份信息,组名称:组认证(显示为x):组ID
4、权限控制
1. 查看权限控制
ll # 以列表形式查看内容,并显示权限细节
- 序号1,表示文件、文件夹的权限控制信息
- 序号2,表示文件、文件夹所属用户
- 序号3,表示文件、文件夹所属用户组
2. 认知权限信息
- r:表示读权限
- 针对文件:可以查看文件内容
- 针对文件夹:可以查看文件夹内容,如ls命令
- w:表示写权限
- 针对文件:表示可以修改此文件
- 针对文件夹:可以在文件夹内:创建、删除、改名等操作
- x:表示执行权限
- 针对文件:表示可以将文件作为程序执行
- 针对文件夹:表示可以更改工作目录到此文件夹,即cd进入
举例:drwxr-xr-x,表示:
- 这是一个文件夹,首字母d表示
- 所属用户(右上角图序号2)的权限是:有r有w有x,rwx
- 所属用户组(右上角图序号3)的权限是:有r无w有x,r-x (-表示无此权限)
- 其它用户的权限是:有r无w有x,r-x
3. chmod 修改权限
只有文件、文件夹的所属用户或root用户可以修改。
chmod [-R] 权限 文件或文件夹
- -R:对文件夹内的全部内容应用同样的操作
chmod u=rwx,g=rx,o=x hello.txt # 将文件权限修改为:rwxr-x--x
chmod u+x shell.txt # 将 shell.txt 增加所属用户执行权限
- u:表示user所属用户权限
- g:表示group组权限
- o:表示other其它用户权限
4. 权限的数字序号
权限可以用3位数字来代表,第一位数字表示用户权限,第二位表示用户组权限,第三位表示其它用户权限:
chmod 751 hello.txt # 即:rwx(7) r-x(5) --x(1)
- 0:无任何权限,即 —
- 1:仅有x权限,即 --x
- 2:仅有w权限,即 -w-
- 3:有w和x权限,即 -wx
- 4:仅有r权限,即 r–
- 5:有r和x权限,即 r-x
- 6:有r和w权限,即 rw-
- 7:有全部权限,即 rwx
5. chown 修改用户/组
普通用户无法修改所属为其它用户或组,所以此命令只适用于root用户执行
chown [-R] [用户][:][用户组] 文件或文件夹 # 修改文件、文件夹的所属用户和用户组
- -R:对文件夹内全部内容应用相同规则
- 用户:修改所属用户
- 用户组:修改所属用户组
- ::用于分隔用户和用户组
chown root hello.txt # 将 hello.txt 所属用户修改为 root
chown :root hello.txt # 将 hello.txt 所属用户组修改为 root
chown root:erer hello.txt # 将 hello.txt 所属用户修改为 root,用户组修改为 erer
chown -R root test # 将 文件夹test 的所属用户修改为 root 并对文件夹内全部内容应用同样规则
6. chgrp 修改组
chgrp [-R] [用户组] 文件或文件夹 # 修改文件、文件夹的所属用户组
- -R:对文件夹内全部内容应用相同规则
chgrp it file1 # 改文件属组
chgrp -R it dir1 # 改文件
三、Linux 系统及服务
1、IP/主机名/端口
1. Ifconfig 获取 IP 地址
- 127.0.0.1:这个IP地址用于指代本机
- 0.0.0.0:特殊IP地址
- 可以用于指代本机
- 可以在端口绑定中用来确定绑定关系(后续讲解)
- 在一些IP地址限制中,表示所有IP的意思,如放行规则设置为0.0.0.0,表示允许任意IP访问
2. ping 命令
ping [-c num] 参数 # 检查指定的网络服务器是否是可联通状态
- -c:检查的次数,不使用-c选项,将无限次数持续检查
- 参数:ip或主机名,被检查的服务器的ip地址或主机名地址
3. 查看主机名
4. 修改主机名
sudo hostnamectl set-hostname erer
5. 域名解析
- 先查看本机的记录(私人地址本)
- Windows看:C:\Windows\System32\drivers\etc\hosts
- Linux看:/etc/hosts
- 再联网去DNS服务器(如114.114.114.114,8.8.8.8等)询问
6. 端口介绍
- 计算机程序之间的通讯,通过IP只能锁定计算机,但是无法锁定具体的程序;
- 通过端口可以锁定计算机上具体的程序,确保程序之间进行沟通
Linux系统,可以支持65535个端口,这6万多个端口分为3类进行使用:
- 公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如SSH服务的22端口,HTTPS服务的443端口,非特殊需要,不要占用这个范围的端口
- 注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序/服务
- 动态端口:49152~65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用。
7. 获取端口占用情况
# 安装 nmap 服务
sudo yum -y install nmap
# 获取端口占用情况
nmap 127.0.0.1
8. 查看指定端口的占用情况
# 安装 netstat 服务
yum -y install net-tools
# 获取端口占用情况
netstat -anp
# 查看指定端口的占用情况
netstat -anp | grep 111
2、固定虚拟机 IP 地址
1. 切换 root 用户
su -
2. 修改配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens160
- 修改:BOOTPROTO=“static”
- 插入:
- IPASSR=“172.16.196.129” (固定的IP地址)
- NETMASK=“255.255.255.0”
- GATEWAY=“172.16.196.2”
- DNS1=“172.16.196.2”
3. 重启网卡
systemctl restart network
3、进程管理
1. 什么是进程
- 程序运行在操作系统中,是被操作系统所管理的:
- 二进制文件,静态 /usr/bin/passwd ,/usr/sbin/useradd
- 进程是已启动的可执行程序的运行实例,进程有以下组成部分:
- 已分配内存的地址空间;
- 安全属性,包括所有权凭据和特权;
- 程序代码的一个或多个执行线程;
- 进程状态。
- 每一个进程都分配一个独有的:进程ID(进程号)
2. 进程的生命周期
- 父进程复制自己的地址空间(fork)创建一个新的(子)进程结构;
- 每个新进程分配一个,唯一的进程 ID (PID),满足跟踪安全性之需;
- 任何进程都可以创建子进程;
- 所有进程都是第一个系统进程的后代:
- Centos5/6系统进程: init
- Centos7系统进程: systemd
- Centos9系统进程:/usr/lib/systemd/systemd
3. 查看进程
3.1 ps aux
[erer@localhost ~]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.9 173036 16516 ? Ss 12:03 0:02 /usr/lib/systemd/systemd --switched-root
root 2 0.0 0.0 0 0 ? S 12:03 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 12:03 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 12:03 0:00 [rcu_par_gp]
root 5 0.0 0.0 0 0 ? I< 12:03 0:00 [slub_flushwq]
root 6 0.0 0.0 0 0 ? I< 12:03 0:00 [netns]
root 10 0.0 0.0 0 0 ? I< 12:03 0:00 [mm_percpu_wq]
root 12 0.0 0.0 0 0 ? I 12:03 0:00 [rcu_tasks_kthre]
- USER: 进程所属的用户 ID
- PID:进程的进程号 ID
- %CPU: 此进程的 CPU 占用率(百分比)
- %MEM: 内存占用率
- VSZ:占用虚拟内存
- RSS: 占用实际内存
- TTY:进程运行的终端
- STAT:进程状态
- R:运行
- S:睡眠 Sleep
- T:停止的进程
- Z:僵尸进程
- X:死掉的进程
- START:进程的启动时间
- TIME:进程占用CPU的总时间
- COMMAND:进程文件,进程名
3.2 ps -ef
ps [-e -f]
- -e:显示出全部的进程
- -f:以完全格式化的形式展示信息(展示全部信息)
- UID:进程所属的用户 ID
- PID:进程的进程号 ID
- PPID:进程的父 ID (启动此进程的其它进程)
- C:此进程的 CPU 占用率(百分比)
- STIME:进程的启动时间
- TTY:启动此进程的终端序号,如显示 ?,表示非终端启动
- TIME:进程占用 CPU 的时间
- CMD:进程对应的名称或启动路径或启动命令
4. 关闭进程
kill [-9] 进程ID
- -9:表示强制关闭进程
4、主机状态
1. 查看系统资源占用
top [-p -d -c -n -b -i -u]
- -p:只显示某个进程的信息
- -d: 置刷新时间,默认是5s
- -c:显示产生进程的完整命令,默认是进程名
- -n:指定刷新次数,比如
top -n 3
,刷新输出3次后退出 - -b:以非交互非全屏模式运行,以批次的方式执行 top,一般配合 -n 指定输出几次统计信息,将输出重定向到指定文件,比如
top -b -n 3 > /tmp/top.tmp
- -i:不显示任何闲置(idle)或无用(zombie)的进程
- -u:查找特定用户启动的进程
2. top命令内容详解
- top:命令名称,00:12:53:当前系统时间,up 1:30:启动时间,1 users:1个用户登录,load:1、5、15分钟负载
- Tasks:253个进程,1 running:1个进程子在运行,162 sleeping:162个进程睡眠,0个停止进程,0个僵尸进程
- %Cpu(s):CPU使用率,us:用户CPU使用率,sy:系统CPU使用率,ni:高优先级进程占用CPU时间百分比,id:空闲CPU率,wa:IO等待CPU占用率,hi:CPU硬件中断率,si:CPU软件中断率,st:强制等待占用CPU率
- Kib Mem:物理内存,total:总量,free:空闲,used:使用,buff/cache:buff和cache占用
- KibSwap:虚拟内存(交换空间),total:总量,free:空闲,used:使用,buff/cache:buff和cache占用
- PID:进程 ID
- USER:进程所属用户
- PR:进程优先级,越小越高
- NI:负值表示高优先级,正表示低优先级
- VIRT:进程使用虚拟内存,单位KB
- RES:进程使用物理内存,单位KB
- SHR:进程使用共享内存,单位KB
- S:进程状态(S休眠,R运行,Z僵死状态,N负数优先级,I空闲状态)
- %CPU:进程占用CPU率
- %MEM:进程占用内存率
- TIME+:进程使用CPU时间总计,单位10毫秒
- COMMAND:进程的命令或名称或程序文件路径
3. top交互式选项
4. 查询线上cup飙高问题
- top 命令获取cpu占用最高的 进程PID
- 通过
top -H -p
进程PID 命令获取占有 cpu 较高的 线程PID - 通过
printf '0x%x\n' 线程PID
命令将线程 PID 转换为十六进制 - jstack 进程PID | grep 十六进制现场PID -A 20
top -H -p 3361
printf '0x%x\n' 3472
jstack 3361 | grep 0xd90 -A 20
5、环境变量
1. 查看环境变量
- 环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。
- 在Linux系统中执行:env命令即可查看当前系统中记录的环境变量
- 环境变量是一种KeyValue型结构,即名称和值,如下图:
XDG_SESSION_ID=24
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm-256color
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=172.16.196.1 54491 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
USER=erer # 当前的操作用户
LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
MAIL=/var/spool/mail/erer
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/erer/.local/bin:/home/erer/bin
PWD=/home/erer # 当前工作路径
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/home/erer # 用户的HOME路径
LOGNAME=erer
XDG_DATA_DIRS=/home/erer/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
SSH_CONNECTION=172.16.196.1 54491 172.16.196.129 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/1000
_=/usr/bin/env
2. 环境变量 PATH
- 无论当前工作目录是什么,都能执行/usr/bin/cd这个程序,这个就是借助环境变量中:PATH这个项目的值来做到的。
- PATH记录了系统执行任何命令的搜索路径,如上图记录了(路径之间以:隔开):
- /usr/local/bin
- /usr/bin
- /usr/local/sbin
- /usr/sbin
- /home/erer/.local/bin
- /home/erer/bin
- 当执行任何命令,都会按照顺序,从上述路径中搜索要执行的程序的本体
- 比如执行cd命令,就从第二个目录 /usr/bin 中搜索到了cd命令,并执行
3. $ 符号
- 在Linux系统中,$符号被用于取“变量”的值
- 环境变量记录的信息,除了给操作系统自己使用外,如果我们想要取用,也可以使用
- 取得环境变量的值就可以通过语法:$ 环境变量名 来取得
- 配合
echo
和{}
使用
[erer@localhost ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/erer/.local/bin:/home/erer/bin
[erer@localhost ~]$ echo ${PATH}ABC
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/erer/.local/bin:/home/erer/binABC
4. 自行设置环境变量
Linux环境变量可以用户自行设置,其中分为:
- 临时设置
- 语法:export 变量名=变量值
- 永久生效
- 针对当前用户生效,配置在当前用户的: ~/.bashrc 文件中
- 针对所有用户生效,配置在系统的: /etc/profile 文件中
- 并通过语法:source 配置文件,进行立刻生效
四、Linux 实用操作
1、快捷操作
1. 快捷键
快捷键 | 作用 |
---|---|
ctrl + c | 强制停止Linux某些程序的运行;退出当前输入,重新输入 |
ctrl + d | 退出账户的登录;退出某些特定程序的专属页面 |
ctrl + r | 输入内容去匹配历史命令 |
ctrl + a | 跳到命令开头 |
ctrl + e | 跳到命令结尾 |
ctrl + ← | 向左跳一个单词 |
ctrl + → | 向右跳一个单词 |
ctrl + l | 清空终端内容 |
2. 命令
命令 | 作用 |
---|---|
history | 查看历史输入过的命令;可以配合 |+ grep 使用 |
!命令前缀 | 自动执行上一次匹配前缀的命令 |
clear | 清空终端内容 |
2、管道/重定向
1. | 管道符
- 管道符的作用:将管道符左边命令的结果,作为右边命令的输入
2. echo 输出命令
echo 参数
- 参数:要输出的内容
- `参数`:反引号(飘号)包含的内容会被作为命令执行
3. 输出重定向
- >:将左侧命令的结果,覆盖写入到符号右侧制定的文件中
- >>:将左侧命令的结果,追加写入到符号右侧制定的文件中
- 2>:错误输出,覆盖
- 2>>:错误输出,追加
4. 输入重定向
- 先准备一段邮件内容:
vim word.txt
mail -s "test01" alice < word.txt
- 原理:利用输入重定向,把文件内容代替人为的输入。
3、查找命令
1. which 命令查找
which 命令
[erer@localhost ~]$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
[erer@localhost ~]$ which java
/usr/bin/which: no java in (/home/erer/.local/bin:/home/erer/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin)
[erer@localhost ~]$
2. find 文件查找
find 起始路径 -name "被查找文件名"
find 起始路径 -size +|-n[kMG]
- -name:根据文件名查找文件
- -size:根据文件大小查找文件
- +:大于、-:小于
- n表示大小
- kMG表示单位,k=kb、M=MB、G=GB
[erer@localhost ~]$ find /home -name "test*" # home目录开始查找名为 test 开头的文件
/home/erer/test.txt
[erer@localhost ~]$ find -name "shell*" # home目录开始查找名为 shell 开头的文件
./shell.txt
[erer@localhost ~]$ find -name "shell*" -ls # home目录开始查找名为 shell 开头的文件,显示详情
19545026 4 -rwxr--r-- 1 erer erer 82 8月 6 23:35 ./shell.txt
[erer@localhost ~]$ find /home -size +100M # home目录开始查找大于100MB的文件
[erer@localhost ~]$ find /home -size -1k # home目录开始查找小于1kB的文件
/home/erer/.mozilla/firefox/z0g27se2.default-default/.parentlock
/home/erer/.local/share/gnome-shell/gnome-overrides-migrated
/home/erer/.local/share/flatpak/.changed
/home/erer/.local/share/gnome-settings-daemon/input-sources-converted
/home/erer/.local/share/nautilus/tracker2-migration-complete
/home/erer/.config/.gsd-keyboard.settings-ported
/home/erer/.cache/mozilla/firefox/z0g27se2.default-default/cache2/ce_T151c2VyQ29udGV4dElkPTUs
/home/erer/.cache/mozilla/firefox/z0g27se2.default-default/cache2/ce_T151c2VyQ29udGV4dElkPTUsYSw=
3. locate 文件查找
locate 文件名
[erer@localhost ~]$ locate test.txt
/home/erer/test.txt
[erer@localhost ~]$ locate test
/etc/fwupd/remotes.d/lvfs-testing.conf
/etc/sane.d/test.conf
/home/erer/test.txt
/usr/bin/cupstestppd
/usr/bin/dbus-test-tool
/usr/bin/gr2fonttest
/usr/bin/l2test
/usr/bin/libieee1284_test
/usr/bin/rctest
/usr/bin/sg_test_rwbuf
/usr/bin/speaker-test
/usr/bin/test
/usr/bin/test_ppa
/usr/bin/tpm2_gettestresult
/usr/bin/tpm2_incrementalselftest
/usr/bin/tpm2_selftest
4、软件管理
1. yum下载软件
yum命令需要root权限,可以su切换到root,或使用sudo提权。
CentOS使用yum管理器,Ubuntu使用apt管理器
yum [-y] search|install|remove 软件名称
yum clean packages # 清除下载缓存
- -y:自动确认,无需手动确认安装或卸载过程
- search:搜索
- install:安装
- remove:卸载
# 查询软件下载地址
[root@localhost ~]# yum repolist
仓库 id 仓库名称
appstream CentOS Stream 9 - AppStream
baseos CentOS Stream 9 - BaseOS
extras-common CentOS Stream 9 - Extras packages
# 查询 yum 下载仓库
[root@localhost ~]# ls /etc/yum.repos.d/
centos-addons.repo centos.repo
# 备份
[root@localhost ~]# cp /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.backup
[root@localhost ~]# ls /etc/yum.repos.d/
centos-addons.repo centos.repo centos.repo.backup
# 配置阿里云下载仓库
[root@localhost ~]# vim /etc/yum.repos.d/centos.repo
# 更新缓存
[root@localhost ~]# yum makecache
CentOS-9 - Base - mirrors.aliyun.com 2.5 MB/s | 8.6 MB 00:03
CentOS-9 - AppStream - mirrors.aliyun.com 2.6 MB/s | 16 MB 00:05
CentOS Stream 9 - Extras packages 1.2 kB/s | 3.6 kB 00:03
Metadata cache created.
# 配置阿里epel源
[root@localhost ~]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-9.noarch.rpm
# 更新缓存
[root@localhost ~]# yum makecache
[root@localhost ~]# yum repolist
仓库 id 仓库名称
AppStream CentOS-9 - AppStream - mirrors.aliyun.com
base CentOS-9 - Base - mirrors.aliyun.com
extras-common CentOS Stream 9 - Extras packages
- centos.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
#failovermethod=priority
baseurl=https://mirrors.aliyun.com/centos-stream/$stream/BaseOS/$basearch/os/
http://mirrors.aliyuncs.com/centos-stream/$stream/BaseOS/$basearch/os/
http://mirrors.cloud.aliyuncs.com/centos-stream/$stream/BaseOS/$basearch/os/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos-stream/RPM-GPG-KEY-CentOS-Official
#additional packages that may be useful
#[extras]
#name=CentOS-$releasever - Extras - mirrors.aliyun.com
#failovermethod=priority
#baseurl=https://mirrors.aliyun.com/centos-stream/$stream/extras/$basearch/os/
# http://mirrors.aliyuncs.com/centos-stream/$stream/extras/$basearch/os/
# http://mirrors.cloud.aliyuncs.com/centos-stream/$stream/extras/$basearch/os/
#gpgcheck=1
#gpgkey=https://mirrors.aliyun.com/centos-stream/RPM-GPG-KEY-CentOS-Official
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
#failovermethod=priority
baseurl=https://mirrors.aliyun.com/centos-stream/$stream/centosplus/$basearch/os/
http://mirrors.aliyuncs.com/centos-stream/$stream/centosplus/$basearch/os/
http://mirrors.cloud.aliyuncs.com/centos-stream/$stream/centosplus/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=https://mirrors.aliyun.com/centos-stream/RPM-GPG-KEY-CentOS-Official
[PowerTools]
name=CentOS-$releasever - PowerTools - mirrors.aliyun.com
#failovermethod=priority
baseurl=https://mirrors.aliyun.com/centos-stream/$stream/PowerTools/$basearch/os/
http://mirrors.aliyuncs.com/centos-stream/$stream/PowerTools/$basearch/os/
http://mirrors.cloud.aliyuncs.com/centos-stream/$stream/PowerTools/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=https://mirrors.aliyun.com/centos-stream/RPM-GPG-KEY-CentOS-Official
[AppStream]
name=CentOS-$releasever - AppStream - mirrors.aliyun.com
#failovermethod=priority
baseurl=https://mirrors.aliyun.com/centos-stream/$stream/AppStream/$basearch/os/
http://mirrors.aliyuncs.com/centos-stream/$stream/AppStream/$basearch/os/
http://mirrors.cloud.aliyuncs.com/centos-stream/$stream/AppStream/$basearch/os/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos-stream/RPM-GPG-KEY-CentOS-Official
2. systemctl管理软件
systemctl start|stop|status|enable|disable 服务名 # 控制内置或第三方服务
systemctl stop firewalld.service
systemctl disable firewalld.service
- start:启动
- stop:关闭
- status:查看状态
- enable:开启开机自启
- disable:关闭开机自启
系统内置的服务比较多,比如:
- NetworkManager:主网络服务
- network:副网络服务
- firewalld:防火墙服务
- sshd、ssh服务:FinalShell远程登录Linux使用的就是这个服务
3. ln 创建软连接
ln -s 参数1 参数2 # 创建参数1的快捷方式
- -s选项:创建软连接
- 参数1:被链接的文件或文件夹
- 参数2:要链接去的目的地
4、date 时间操作
1. 获取时间信息
date [-d] [+格式化字符串]
- -d:按照给定的字符串显示日期,一般用于日期计算
- 格式化字符串:通过特定的字符串标记,来控制显示的日期格式
- %Y :年
- %y :年份后两位数字 (00-99)
- %m :月份 (01-12)
- %d :日(01-31)
- %H :小时(00-23)
- %M :分钟(00-59)
- %S :秒(00-60)
- %s :自1970-01-01 00:00:00 UTC 到现在的秒数
2. 时间计算
其中支持的时间标记为:
- year年
- month月
- day天
- hour小时
- minute分钟
- second秒
3. 修改时区
sudo rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
4. ntp服务自动校准时间
sudo yum -y install ntp
sudo ntpdate -u ntp.aliyun.com
systemctl start ntpd
systemctl enable ntpd
5、压缩和解压
市面上有非常多的压缩格式
- zip格式:Linux、Windows、MacOS系统常用
- 7zip:Windows系统常用
- rar:Windows系统常用
- tar:Linux、MacOS常用
- gzip:Linux、MacOS常用
1. tar 命令
Linux和Mac系统常用有2种压缩格式,后缀名分别是:
.tar,称之为tarball,归档文件,即简单的将文件组装到一个.tar的文件内,并没有太多文件体积的减少,仅仅是简单的封装
.gz,也常见为.tar.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积
针对这两种格式,使用tar命令均可以进行压缩和解压缩的操作
tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数N
- -c:创建压缩文件,用于压缩模式
- -v:显示压缩、解压过程,用于查看进度
- -x:解压模式
- -f:要创建的文件,或要解压的文件,-f 选项必须在所有选项中位置处于最后一个
- -z:gzip模式,不使用 -z 就是普通的 tarball 格式
- -C:选择解压的目的地,用于解压模式
2. tar 命令压缩
[erer@localhost erer]$ ll
总用量 36
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 1.txt
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 2.txt
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 3.txt
[erer@localhost erer]$ tar -cvf test.tar 1.txt 2.txt 3.txt # 将1.txt 2.txt 3.txt 压缩到test.tar文件内
1.txt
2.txt
3.txt
[erer@localhost erer]$ tar -zcvf test.gz 1.txt 2.txt 3.txt # gzip模式将1.txt 2.txt 3.txt 压缩到test.gz文件内
1.txt
2.txt
3.txt
[erer@localhost erer]$ ll
总用量 80
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 1.txt
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 2.txt
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 3.txt
-rw-rw-r--. 1 erer erer 3523 8月 2 01:45 test.gz
-rw-rw-r--. 1 erer erer 40960 8月 2 01:45 test.tar
- -z:如果使用的话,一般处于选项位第一个
- -f :必须在选项位最后一个,后面跟压缩包的名称
3. tar 命令解压
[erer@localhost erer]$ ls
test.gz test.tar
[erer@localhost erer]$ tar -xvf test.tar # 解压test.tar,到当前目录
1.txt
2.txt
3.txt
[erer@localhost erer]$ ll
总用量 80
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 1.txt
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 2.txt
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 3.txt
-rw-rw-r--. 1 erer erer 3523 8月 2 01:45 test.gz
-rw-rw-r--. 1 erer erer 40960 8月 2 01:45 test.tar
[erer@localhost erer]$ rm *.txt
[erer@localhost erer]$ ls
test.gz test.tar
[erer@localhost erer]$ mkdir test
[erer@localhost erer]$ ls
test test.gz test.tar
[erer@localhost erer]$ tar -xvf test.tar -C test # 解压test.tar,到指定目录
1.txt
2.txt
3.txt
[erer@localhost erer]$ ls test
1.txt 2.txt 3.txt
[erer@localhost erer]$ tar -zxvf test.gz # 以Gzip模式解压test.gz,到当前目录
1.txt
2.txt
3.txt
[erer@localhost erer]$ ll
总用量 80
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 1.txt
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 2.txt
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 3.txt
drwxrwxr-x. 2 erer erer 45 8月 2 01:57 test
-rw-rw-r--. 1 erer erer 3523 8月 2 01:45 test.gz
-rw-rw-r--. 1 erer erer 40960 8月 2 01:45 test.tar
- -f:必须在选项组合体的最后一位
- -z:建议在开头位置
- -C:单独使用,和解压所需的其它参数分开
4. zip 命令
zip [-r] 参数1 参数2 ... 参数N
- -r:被压缩的包含文件夹的时候,需要使用-r选项,同 rm、cp 等命令
5. zip 命令压缩文件
[erer@localhost erer]$ ls
1.txt 2.txt 3.txt test test.gz test.tar
[erer@localhost erer]$ zip test.zip 1.txt 2.txt 3.txt
adding: 1.txt (deflated 67%)
adding: 2.txt (deflated 67%)
adding: 3.txt (deflated 67%)
[erer@localhost erer]$ ls
1.txt 2.txt 3.txt test test.gz test.tar test.zip
[erer@localhost erer]$ zip -r erer.zip test 1.txt 2.txt 3.txt
adding: test/ (stored 0%)
adding: test/1.txt (deflated 67%)
adding: test/2.txt (deflated 67%)
adding: test/3.txt (deflated 67%)
adding: 1.txt (deflated 67%)
adding: 2.txt (deflated 67%)
adding: 3.txt (deflated 67%)
[erer@localhost erer]$ ll
总用量 112
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 1.txt
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 2.txt
-rw-r--r--. 1 erer erer 9516 8月 2 01:44 3.txt
-rw-rw-r--. 1 erer erer 19648 8月 2 02:08 erer.zip
drwxrwxr-x. 2 erer erer 45 8月 2 01:57 test
-rw-rw-r--. 1 erer erer 3523 8月 2 01:45 test.gz
-rw-rw-r--. 1 erer erer 40960 8月 2 01:45 test.tar
-rw-rw-r--. 1 erer erer 9751 8月 2 02:07 test.zip
6. unzip 命令解压文件
unzip [-d] 参数
- -d:指定要解压去的位置,同 tar 的 -C 选项
- 参数:被解压的zip压缩包文件
[erer@localhost erer]$ ls
erer.zip test.gz test.tar test.zip
[erer@localhost erer]$ unzip test.zip # 将test.zip解压到当前目录
Archive: test.zip
inflating: 1.txt
inflating: 2.txt
inflating: 3.txt
[erer@localhost erer]$ ls
1.txt 2.txt 3.txt erer.zip test.gz test.tar test.zip
[erer@localhost erer]$ rm *.txt
[erer@localhost erer]$ ls
erer.zip test.gz test.tar test.zip
[erer@localhost erer]$ mkdir erer
[erer@localhost erer]$ unzip erer.zip -d erer # 将erer.zip解压到指定文件夹内
Archive: erer.zip
creating: erer/test/
inflating: erer/test/1.txt
inflating: erer/test/2.txt
inflating: erer/test/3.txt
inflating: erer/1.txt
inflating: erer/2.txt
inflating: erer/3.txt
[erer@localhost erer]$ ls erer
1.txt 2.txt 3.txt test
五、yum软件安装
1、MySQL8.0
1. 配置yum仓库
# 更新密钥
[root@localhost ~]# rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 安装Mysql8.x版本 yum库
[root@localhost ~]# rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
2. 安装MySQL
# 修改配置文件
[root@localhost ~]# vim /etc/yum.repos.d/mysql-community.repo
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/9/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
# yum安装Mysql
[root@localhost ~]# yum -y install mysql-community-server
3. 启动MySQL
# 启动
[root@localhost ~]# systemctl start mysqld
# 开机自启
[root@localhost ~]# systemctl enable mysqld
# 检查MySQL的运行状态
[root@localhost ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
Active: active (running) since Fri 2023-08-25 17:48:51 CST; 11s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 34299 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 10544)
Memory: 436.7M
CPU: 2.771s
CGroup: /system.slice/mysqld.service
└─34299 /usr/sbin/mysqld
Aug 25 17:48:48 localhost.localdomain systemd[1]: Starting MySQL Server...
Aug 25 17:48:51 localhost.localdomain systemd[1]: Started MySQL Server.
MySQL安装完成后,会自动配置为名称叫做:
mysqld
的服务,可以被systemctl所管理
4. 获取初始密码
# 通过grep命令,在/var/log/mysqld.log文件中,过滤 temporary password 关键字,获取初始密码
[root@localhost ~]# grep 'temporary password' /var/log/mysqld.log
2023-08-24T18:21:04.944129Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: hZiJjMh;;8,e
5. 登陆root账号
# 登陆账号
[root@localhost ~]# mysql -uroot -p
Enter password: hZiJjMh;;8,e
Welcome to the MySQL monitor. Commands end with ; or \g.
6. 修改密码及权限
-- 初始化 'root'@'localhost' 账户密码:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Shifan1992.12.24';
Query OK, 0 rows affected (0.00 sec)
-- 密码安全级别低
mysql> set global validate_password.policy=0;
Query OK, 0 rows affected (0.00 sec)
-- 密码长度最低4位即可
mysql> set global validate_password.length=4;
Query OK, 0 rows affected (0.00 sec)
-- 修改 'root'@'localhost' 账户密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1992.12.24';
Query OK, 0 rows affected (0.00 sec)
-- 设置 'root'@'%' 账户远程登录
mysql> update mysql.user set host = '%' where user = 'root';
Query OK, 0 rows affected (0.02 sec)
-- 查看 'root'@'%' 账户远程登陆情况
mysql> select user,host,authentication_string from mysql.user;
+------------------+-----------+------------------------------------------------------------------------+
| user | host | authentication_string |
+------------------+-----------+------------------------------------------------------------------------+
| root | % | *1F200AB4D2B5111B1987E2BED48DB3C54A896ABF |
| mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.session | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.sys | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
+------------------+-----------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)
-- 赋予权限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.01 sec)
7. 退出关闭防火墙
mysql> exit;
Bye
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
[root@localhost ~]# netstat -anp | grep 3306
tcp6 0 0 :::33060 :::* LISTEN 1791/mysqld
tcp6 0 0 :::3306 :::* LISTEN 1791/mysqld
8. 初始化
# 删目录
[root@localhost ~]# rm -rf /var/lib/mysql
# 修改配置文件 my.cnf
[root@localhost ~]# vim /etc/my.cnf
# 添加 lower-case-table-names=1
# 初始化数据库
[root@localhost ~]# mysqld --initialize --user=mysql --lower-case-table-names=1
# 通过grep命令,在/var/log/mysqld.log文件中,过滤 temporary password 关键字,获取初始密码
[root@localhost ~]# grep 'temporary password' /var/log/mysqld.log
# 启动服务
[root@localhost ~]# systemctl start mysqld.service