2024-02-18 17:18:48 +08:00

1628 lines
38 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Linux
author: 文永达
top_img:https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg
---
# Linux
---
## 简介
在linux系统中没有盘符的概念。
一个盘。/根目录
没有图形化界面
通过指令操作
linux指令是可以传参数的。
在Linux系统下万事万物皆文件。
## Linux的文件结构19个
bin存放的是二进制的可以执行文件。重点
sbin存放的是二进制的可以执行文件。super只有root用户才能访问
etc存放系统配置文件重点
usr用来存放共享的系统资源
home家目录重点
root就是root用户的家目录
dev存放设备文件
## Linux指令
Ctrl+u 删除命令行开始至光标处
Ctrl+k 删除光标至命令行结尾
Ctrl+a 光标移到最前
Ctrl+e 光标移到最后
ip addrip a查看主机的ip地址
clear清屏
### 跳转目录:
```shell
# 跳转指定目录 root目录下的www
cd /root/www
# 返回跳转前的目录
cd -
# 跳转上一级目录
cd ../
# 跳转根目录
cd /
# 跳转root目录
cd ~
```
### 复制粘贴:
```shell
# 把aa.txt复制到init目录下
cp aa.txt init/
# 把init文件夹以及所包含的文件复制到 spring文件夹下
cp -r init spring/
```
ls列出当前目录下的所有文件及目录
ls -l给ls指令传了一个参数l。等同于ll。列出当前目录下的所有文件及目录的详情。
ls binls后可以接目录名要么接绝对路径。
tab键提示作用。自动补全。
cd cd ~):代表回到家目录
pwd查看当前所在的目录
方向键↑和↓:浏览历史指令
mkdir创建目录
mkdir -p创建多级目录
cp aa.txt init复制粘贴。把aa.txt复制到init目录下
cp -r init spring复制粘贴。把init目录以及包含的文件复制到spring目录下
mv aa.txt xiaoqiang.txt重命名。把aa.txt重命名为xiaoqiang.txt。
mv bb.txt spring移动。把bb.txt移动到spring目录。
mv -f spring aaaaa在覆盖前不提示
mv -r aaaaa bbbbb强行覆盖。前提是被覆盖的目录和覆盖的目录要结构相同。慎用
rm xiaoqiang.txt删除xiaoqiang.txt
rm -f spring.xml强行删除spring.xml没有确认提示
rm -r init递归删除init目录
rm -rf bbbbb递归删除bbbbb并且没有确认提示慎用
rmdir aa删除空目录aa用的很少
rm -rf *:删除所有的目录及文件(慎用)
cat显示文本文件的内容一部分。.java.py.c++.xml.html.js.css
more分页显示文本文件的内容。只能向下查看不能向上翻页。
less分页显示文本文件的内容。上下翻页。通过PgUp和PgDn进行上下翻页↑和↓一行一行的查看。输入q退出查看。
top -n 10 xxxx查看文本文件的前10行
tail -n 10 xxxx查看文本文件的后10行
tail -f xxxx实时监控文本文件的变化
Ctrl + c几乎可以退出所有的操作
echo打印输出一句话。也可以用作向文本文件内写入信息。会自动追加并换行。
find: 查找文件夹或目录 find /usr -iname "\*docker\*" 查找/usr目录下 名称为docker 的文件或目录 模糊查询 并忽略大小写
### 压缩:
1、打包把多个文件打成一个包。
2、压缩把文件占用的大小进行压缩。
tar命令用来进行压缩和解压缩的。
-c 建立一个压缩文件(打包)
-x 解开一个压缩文件(解包)
-z 是否需要使用gzip压缩
-v 压缩过程中是否显示文件日志
-f 使用的文件名
tar -cf只打包不压缩不显示日志
tar -xf解压文件不显示日志
tar -cvf只打包不压缩显示日志
tar -xvf解压文件显示日志。
tar -zcvf打包压缩显示日志
```shell
tar -zcvf wwwroot.tar.gz wwwroot/
```
tar -zxvf解压最常用
```shell
tar -zxvf wwwroot.tar.gz
```
### 系统服务:
systemstl操作系统服务。
status查看某个服务的状态
stop终止某个服务
start启动某个服务
restart重启某个服务
```shell
systemctl status mysqld
```
网络服务network
防火墙服务firewalld
Mysqlmysqld
systemctl status network
### 网络状态:
```shell
# -l或--listening 显示监控中的服务器的Socket
# -n或--numeric 直接使用IP地址而不通过域名服务器。
# -p或--programs 显示正在使用Socket的程序识别码和程序名称。
netstat -lnp | grep 8080
```
### 获取路径:
```shell
readlink -f sample.txt /home/gliu/sample.txt
realpath -s sample.txt /home/gliu/sample.txt
find $(pwd) -name sample.txt /home/gliu/sample.txt
ls -l $PWD/sample.txt
```
## 文件详情以home目录为例
d说明当前文件是一个目录- 代表的是文件)
rwxr可读w可写x可执行。代表当前文件的创建者的权限
r-x代表的是和文件创建者的同组的用户的权限
r-x代表的是其他用户
2链接数
root创建者
root创建者所在的组
6文件占用空间的大小字节
Apr 11 2018最后一次修改时间
home文件名或目录名
## 查找文件
### find 命令
基本格式find path expression
1. 按照文件名查找
find / -name httpd.conf # 在根目录下 查找文件httpd.conf表示在整个硬盘查找
find /etc -name httpd.conf # 在 /etc 目录下查找文件 httpd.conf
find /etc -name '\*srm*' # 使用通配符\*(0或者任意多个)。表示在 /etc 目录下查找文件名中含有字符串'srm'的文件
2. 按照文件特征查找
find / -amin -10 # 查找在系统中最后10分钟访问的文件(access time)
find / atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 group 为 cat 的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件(modify time)
find / -mtime -1 # 查找在系统中最后24小时里修改过的文件
find / -user fred # 查找在系统中属于fred这个用户的文件
find / -size +10000c # 查找出大鱼10000字节的文件(c:字节w:双字, k:KB, M:MB, G:GB)
find / -size -1000k
3. 使用混合查找方式查找文件
参数有:!, -and(-a), -or(-0)
find /tmp -size +10000c -and -mtime +2 # 在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件
find / -user fred -or -user george # 在根目录下查找用户是fred或者george的文本文件
find /tmp ! -user panda #在/tmp目录中查找所有不属于panda用户的文件
## 进程管理
ps 查看前台进程
ps -aux 查看所有进程详细信息 UID 用户 PID 进程ID
ps -ef 查看所有进程详细信息 UID 用户 PID 进程ID PPID 父进程ID
父进程id为1 为系统进程
top 动态显示进程
ps -aux|grep network 查看所有进程详细信息并搜索network进程
kill 根据PID终止进程
kill -9 强制终止
## vi命令 编辑器
i 切换到编辑模式
ESC 切换到命令模式
:wq 保存并退出
:q 不保存退出
:w 保存
:q! 强制不保存退出
:wq! 强制保存退出
a 在光标后插入
A 在光标当前行的行尾插入
i 在光标前插入
I 在光标当前行的行头插入
:set nu 显示行号
:set nonu 取消显示行号
gg 到文本的第一行
G 到文本的最后一行
u 后退一步 相当于 Ctrl + z
Ctrl + r 前进一步
Shift + zz 保存退出 跟:wq一样
起始行号,结束行号 del 删除对应范围内的行
安装vim编辑器
```shell
yum install -y vim
```
## 配置网络
```shell
cd /etc/sysconfig/network-scripts
vi ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=08913b58-0bc2-42c5-8b59-6782e0029d7b
DEVICE=ens33
ONBOOT=yes
# 修改ONBOOT=yes
systemctl restart network
ip addr
```
## 端口映射
```shell
# 将 80 端口 映射到 8080端口上 dport为目标端口 to-port为来源端口
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
# 查看iptables规则
iptables -t nat -L -n -v
##
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
12925 4377K DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
0 0 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 redir ports 80
```
## 软件安装
rpm 本地安装
yum centos安装软件 需要源
安装screenFetch
```shell
#使用wget 下载安装包
wget https://github.com/KittyKatt/screenFetch/archive/master.zip
#使用unzip解压unzip需要安装
yum install unzip
unzip master.zip
#移动
mv screenFetch-master/screenfetch-dev /usr/bin/screenfetch
```
## wget 下载工具
#### 格式
wget [参数] [URL地址]
wget -O 图片名.png https://www.baidu.com/img/bd_logo1.png
#### 记录和输入文件参数
| 短格式 | 长格式 | 说明 |
| ------ | ------------------- | ---------------------------------------------------- |
| -o | output-file=FILE | 把记录写到FILE文件中 |
| -a | append-output=FILE | 把记录追加到FILE文件中 |
| -d | debug | 打印调试输出 |
| -q | quiet | 安静模式(没有输出) |
| -v | verbose | 冗长模式(这是缺省设置) |
| -nv | non-verbose | 关掉冗长模式,但不是安静模式 |
| -i | input-file=FILE | 下载在FILE文件中出现的URLs |
| -F | force-html | 把输入文件当作HTML格式文件对待 |
| -B | base=URL | 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀 |
| | sslcertfile=FILE | 可选客户端证书 |
| | sslcertkey=KEYFILE | 可选客户端证书的KEYFILE |
| | egd-file=FILE | 指定EGD socket的文件名 |
#### 下载参数
| 短格式 | 长格式 | 说明 |
| ------ | --------------------- | -------------------------------------------------------- |
| | bind-address=ADDRESS | 指定本地使用地址(主机名或IP当本地有多个IP或名字时使用) |
| -t | tries=NUMBER | 设定最大尝试链接次数(0 表示无限制). |
| -O | output-document=FILE | 把文档写到FILE文件中 |
| -nc | no-clobber | 不要覆盖存在的文件或使用.#前缀 |
| -c | continue | 接着下载没下载完的文件 |
| | progress=TYPE | 设定进程条标记 |
| -N | timestamping | 不要重新下载文件除非比本地文件新 |
| -S | server-response | 打印服务器的回应 |
| | spider | 不下载任何东西 |
| -T | timeout=SECONDS | 设定响应超时的秒数 |
| -w | wait=SECONDS | 两次尝试之间间隔SECONDS秒 |
| | waitretry=SECONDS | 在重新链接之间等待1…SECONDS秒 |
| | random-wait | 在下载之间等待0…2*WAIT秒 |
| -Y | proxy=on/off | 打开或关闭代理 |
| -Q | quota=NUMBER | 设置下载的容量限制 |
| | limit-rate=RATE | 限定下载速率 |
## 用户
who am i 查看当前用户
who --count 查看当前登录用户数量
exit 退出登录
groupadd 创建用户组
groupdel 删除用户组
useradd xiaoqiang -g user 创建一个用户xiaoqiang并指定用户组user
passwd xiaoqiangf 给xiaoqiang用户指定密码
su 切换用户 从root切换到其他用户不需要输入密码 如果从其他用户切换到root用户需要输入密码
### 权限管理
Linux 下文件有三种权限 r 读 w写 x可执行
---
```shell
chmod 755 file
```
## Shell 脚本
### 为什么大多数 shell 脚本都包含 #! /bin/bash 在 shell 脚本的开头?
`#!/bin/bash`”这一行被称为`shebang` 行,在某些文献中,它被称为`hashbang` 行,这是因为它以两个字符`hash '#'``bang '!' `开头。
```shell
#! /bin/bash
echo 'Hello, World!'
```
当你在脚本的最顶部包含“`#!/bin/bash`”行时,系统知道你想使用 `bash` 作为脚本的解释器。因此,你现在可以直接运行 `hello.sh` 脚本,而无需在其前面加上 `bash`
使用 `/bin/bash` 表示该脚本是 `bash shell` 脚本,无论系统上正在使用什么 `shell`,都应该使用 `bash` 作为解释器运行。如果你使用的是 `zsh` 特定的语法,你可以通过添加 `#! /bin/zsh` 作为脚本的第一行。
`#!``/bin/bash` 之间的空格无关紧要。你也可以使用 `#!/bin/bash`
## yum
### 改阿里源
```shell
yum install -y wget && mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && yum clean all && yum makecache
```
## 安装MySQL
有些Linux会自带MariaDB数据库所以需要先卸载
列出安装的MariaDB的包
```shell
rpm -qa | grep mariadb
```
得到查看到的包名
卸载包 后面加上包名
```shell
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
```
自此下载MariaDB已经完成了
切换到home目录下
```shell
cd /home/
```
安装 wget 并下载yum库
```shell
yum install wget -y
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
rpm -Uvh mysql80-community-release-el7-1.noarch.rpm
cd /etc/yum.repos.d/
vim mysql-community.repo
```
选择要安装的MySQL版本
```shell
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=0 // 将这里的0改为1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=1 //将这里的1改为0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
```
enabled=0为禁用对应版本的YUM库enabled=1为启用默认8.0的配置为enabled=1安装5.7的话我们就把8.0的enabled=1修改为enabled=0然后把5.7的enabled=0修改为enabled=1
安装MySQL并启动
```shell
yum install mysql-community-server
service mysqld start
```
第一步安装成功之后然后启动MySQL
如果失败了提示GPG
RPM 维护一个单独的密钥环,因为它是一个系统范围的应用程序,而用户的 GPG 公钥环是一个用户特定的文件。要将 MySQL 公钥导入 RPM 密钥环,首先获取密钥,然后使用 rpm --import 导入密钥
```shell
# centos
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# Ubuntu
wget -q -O - https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | apt-key add -
yum install mysql-community-server
```
查看MySQL初始密码
```shell
sudo grep 'temporary password' /var/log/mysqld.log
```
登录MySQL
```shell
mysql -u root -p
```
设置密码的验证强度等级
```shell
set global validate_password_policy=LOW;
```
设置密码长度为6位
```shell
set global validate_password_length=6;
```
修改MySQL初始密码
```shell
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
```
给root权限开启远程登录
```shell
use mysql;
select user,host from user;
update user set host = '%' where user = 'root';
flush privileges;
```
---
### AlmaLinux 安装 (dnf包管理器方式)
1. 首先确保系统是最新的。
```shell
sudo dnf clean all
sudo dnf update
sudo dnf groupinstall "Development Tools"
```
2. 安装 MySQL
默认情况下MySQL 在 AlmaLinux 9 基础存储库中可用。 只需使用以下命令安装 MySQL 服务器包 `dnf` 命令:
```shell
sudo dnf install mysql mysql-server
```
设置表名不区分大小写
```shell
vim /etc/my.cnf.d/mysql-server.cnf
# 在 [mysqld] 中添加
lower_case_table_names=1
```
初始化后查询是否生效
```mysql
show global variables like '%lower_case%';
# lower_case_table_names 为 1
```
启动 MySQL 服务并通过运行以下命令使其在启动时自动启动:
```shell
sudo systemctl status mysqld
sudo systemctl enable --now mysqld
```
确认安装并检查已安装的 MySQL 构建版本:
```shell
mysql --version
```
3. 在 AlmaLinux 9 上保护 MySQL。
默认情况下MySQL 未加固。 您可以使用 `mysql_secure_installation` 脚本。 您应该仔细阅读以下每个步骤,这些步骤将设置 root 密码、删除匿名用户、禁止远程 root 登录、删除测试数据库和访问安全 MySQL
```shell
mysql_secure_installation
```
对提示使用以下选项:
```shell
Enter current password for root (enter for none): Just press the Enter
Set root password? [Y/n]: Y
New password: Enter your password
Re-enter new password: Repeat your password
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
```
安全后,您可以使用以下命令登录 MySQL shell:
```shell
sudo mysql -u root -p
```
要创建数据库、数据库用户并向数据库用户授予所有权限,请运行以下命令:
```mysql
CREATE DATABASE test_db;
CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'your-password';
GRANT ALL ON tests_db.* TO 'test_user'@'localhost';
FLUSH PRIVILEGES;
EXIT
```
### AlmaLinux 安装 (rpm手动方式)
```shell
mkdir mysql_install
cd mysql_install
# 下载安装包
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.41-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.41-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-5.7.41-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.41-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.41-1.el7.x86_64.rpm
# 如果出现以下错误
error: Failed dependencies:
libcrypto.so.10()(64bit) is needed by mysql-community-libs-compat-5.7.41-1.el7.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by mysql-community-libs-compat-5.7.41-1.el7.x86_64
libssl.so.10()(64bit) is needed by mysql-community-libs-compat-5.7.41-1.el7.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by mysql-community-libs-compat-5.7.41-1.el7.x86_64
# 执行
dnf install -y https://repo.almalinux.org/almalinux/8/AppStream/x86_64/os/Packages/compat-openssl10-1.0.2o-4.el8_6.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.41-1.el7.x86_64.rpm
# 如果出现以下错误
error: Failed dependencies:
/usr/bin/pkg-config is needed by mysql-community-devel-5.7.41-1.el7.x86_64
# 执行
dnf install openssl-devel -y
rpm -ivh mysql-community-client-5.7.41-1.el7.x86_64.rpm
# 如果出现以下错误
错误:依赖检测失败:
libncurses.so.5()(64bit) 被 mysql-community-client-5.7.41-1.el7.x86_64 需要
libtinfo.so.5()(64bit) 被 mysql-community-client-5.7.41-1.el7.x86_64 需要
# 执行
dnf install libncurses* -y
dnf install epel-release -y
dnf install ncurses-compat-libs -y
rpm -ivh mysql-community-server-5.7.41-1.el7.x86_64.rpm
# 如果出现以下提示
/usr/lib/tmpfiles.d/mysql.conf:23: Line references path below legacy directory /var/run/, updating /var/run/mysqld → /run/mysqld; please update the tmpfiles.d/ drop-in file accordingly.
# 执行
vim /usr/lib/tmpfiles.d/mysql.conf
# 将/var/run/mysqld 改为 /run/mysqld
# 如果出现以下提示
error: Failed dependencies:
libcrypt.so.1()(64bit) is needed by mysql-community-server-5.7.41-1.el7.x86_64
libcrypt.so.1(GLIBC_2.2.5)(64bit) is needed by mysql-community-server-5.7.41-1.el7.x86_64
# 执行
dnf install -y libxcrypt-compat
# 如果出现以下提示
error: Failed dependencies:
/usr/bin/perl is needed by mysql-community-server-5.7.41-1.el7.x86_64
perl(Getopt::Long) is needed by mysql-community-server-5.7.41-1.el7.x86_64
perl(strict) is needed by mysql-community-server-5.7.41-1.el7.x86_64
dnf install -y perl.x86_64
# 如果出现以下提示
error: Failed dependencies:
net-tools is needed by mysql-community-server-5.7.41-1.el7.x86_64
# 执行
dnf install net-tools -y
rpm -ivh mysql-community-embedded-compat-5.7.41-1.el7.x86_64.rpm
```
**编辑配置文件**
```shell
vim /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[client]
port = 3306
user = mysql
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
basedir=/usr/local/mysql
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
max_connections = 400
character-set-server = utf8mb4
explicit_defaults_for_timestamp = true
lower_case_table_names = 1
```
**初始化**
```shell
mysqld --defaults-file=/etc/my.cnf --initialize-insecure --user=mysql
# 给mysql用户添加数据目录权限
chown mysql:mysql /var/lib/mysql -R
systemctl start mysqld
systemctl enable mysqld
# 查看root随机生成密码
grep 'temporary password' /var/log/mysqld.log
# 若没有提示,则没有密码,可直接登录
mysql -uroot
```
## 配置Java环境变量
将tar.gz格式的jdk解压后移动到/usr目录下
```shell
mv jdk1.8.0_301/ /usr/
```
编辑/etc目录下profile文件 G到最后一行
```shell
vim /etc/profile
export JAVA_HOME=/usr/jdk1.8.0_301
export PATH=$PATH:$JAVA_HOME/bin
```
:wq保存退出
重新加载配置文件
```shell
source /etc/profile
```
---
## CentOS7防火墙
放行特定端口
```shell
firewall-cmd --add-port=6379/tcp --permanent
```
移除放行端口
```shell
firewall-cmd --permanent --remove-port=8080/tcp
```
查询端口是否开放
```shell
firewall-cmd --query-port=8080/tcp
```
任何修改操作配置完成后需要重新加载firewall
重新加载防火墙
```shell
firewall-cmd --reload
```
查看防火墙开放的端口
```shell
firewall-cmd --list-all
```
指定作用域开发防火墙端口
```shell
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# -zone 作用域
# -add-port 添加端口,格式为端口/协议
# -permanent 永久生效,没有此参数重启后失效
```
## 查看硬盘空间
```shell
# 统计磁盘整体情况,包括磁盘大小,已使用,可用
df -lh
# 查看根目录下文件夹大小
du -sh /*
```
## 扩容
### LVM
#### 旧有卷
将 `/home`部分空间合并至`/`下
```shell
df -h
```
![image-20240201162619794](Linux/image-20240201162619794.png)
查看卷的文件系统类型
```shell
mount |grep home
```
![image-20240201162720183](Linux/image-20240201162720183.png)
安装`xfsdump`备份工具
```shell
dnf install -y xfsdump
```
备份`/home`
```shell
xfsdump -f ~/sdb_dump/ /home -M sdb_home -L sdb_home_1
```
卸载`/home`
```shell
umount /home/
df -h
```
![image-20240201162906958](Linux/image-20240201162906958.png)
移除 `/dev/mapper/almalinux-home`(删除前请确保重要文件已备份)
```shell
lvremove /dev/mapper/almalinux-home
```
![image-20240201163026019](Linux/image-20240201163026019.png)
```shell
lsblk
```
![image-20240201163052988](Linux/image-20240201163052988.png)
扩展`/dev/mapper/almalinux-root`增加8.7G
```shell
lvresize -L +8.7G /dev/mapper/almalinux-root
lsblk
```
![image-20240201163211759](Linux/image-20240201163211759.png)
```shell
df -h
```
![image-20240201163229297](Linux/image-20240201163229297.png)
扩展文件系统根目录
```shell
xfs_growfs /
```
![image-20240201163300368](Linux/image-20240201163300368.png)
```shell
df -h
```
![image-20240201163342757](Linux/image-20240201163342757.png)
重新创建`/dev/mapper/almalinux-home`
```shell
lvcreate -L 9G -n home almalinux
lsblk
```
![image-20240201163506115](Linux/image-20240201163506115.png)
将剩余空闲空间扩展给`/dev/mapper/almalinux-home`
```shell
lvextend -l +100%FREE -n /dev/mapper/almalinux-home
lsblk
```
![image-20240201163544310](Linux/image-20240201163544310.png)
格式化`/dev/mapper/almalinux-home`
```shell
mkfs.xfs /dev/mapper/almalinux-home
```
![image-20240201163800217](Linux/image-20240201163800217.png)
挂载
**因为lv名称和挂载点不变因此无需修改/etc/fstab**
```shell
mount -a
df -Th
```
![image-20240201163826924](Linux/image-20240201163826924.png)
还原
```shell
xfsrestore -f sdb_dump /home/
```
![image-20240201163847295](Linux/image-20240201163847295.png)
#### 新加卷
Orale VirtualBox
![image-20240130093530200](Linux/image-20240130093530200.png)
需要选择最后一个,因为前几个是之前的备份快照
![image-20240130093629718](Linux/image-20240130093629718.png)
分配大小即可,只能增加不能缩小
查看现有分区大小
```shell
df -Th
```
![image-20240130093817210](Linux/image-20240130093817210.png)
查看扩容后磁盘大小
```shell
lsblk
```
![image-20240130093857754](Linux/image-20240130093857754.png)
创建分区
```shell
fdisk /dev/sda
```
![image-20240130093939297](Linux/image-20240130093939297.png)
![image-20240130094105250](Linux/image-20240130094105250.png)
刷新分区并创建物理卷
```shell
partprobe /dev/sda
pvcreate /dev/sda4
```
![image-20240130094218593](Linux/image-20240130094218593.png)
查看卷组名称,以及卷组使用情况
```shell
vgdisplay
```
![image-20240130094244545](Linux/image-20240130094244545.png)
将物理卷扩展到卷组
```shell
vgextend rl /dev/sda4
```
![image-20240130094253931](Linux/image-20240130094253931.png)
查看当前逻辑卷的空间状态
```shell
lvdisplay
```
![image-20240130094329028](Linux/image-20240130094329028.png)
将卷组中的空闲空间扩展到根分区逻辑卷
```shell
lvextend -l +100%FREE /dev/rl/root
```
![image-20240130094418379](Linux/image-20240130094418379.png)
刷新根分区
```shell
xfs_growfs /dev/rl/root
```
![image-20240130094442884](Linux/image-20240130094442884.png)
扩容成功
![image-20240130094540550](Linux/image-20240130094540550.png)
## 分配Swap
查看分区大小
```shell
free -h
```
使用dd命令创建一个swap分区
```shell
dd if=/dev/zero of=/home/swap bs=1024 count=4194304
```
count的值是size多少M* 1024
格式化swap分区
```shell
mkswap /home/swap
```
把格式化后的文件分区设置为swap分区
```shell
swapon /home/swap
```
swap分区自动挂载
```shell
vim /etc/fstab
# G 在文件末尾加上
/home/swap swap swap default 0 0
```
关闭Swap
```shell
swapoff /home/swap
```
### 修改swap使用率
swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存然后才是 swap空间swappiness100的时候表示积极的使用swap分区并且把内存上的数据及时的搬运到swap空间里面。两个极端
查看swappiness
```shell
cat /proc/sys/vm/swappiness
```
修改swappiness值为60
```shell
sysctl vm.swappiness=60
```
但是这只是临时性的修改,还要做一步
```shell
vim /etc/sysctl.conf
# 编辑这行
vm.swappiness=60
```
## Windows Linux子系统
### WSL2
打开 Windows Terminal PowerShell
#### 安装
```powershell
wsl --install
```
微软官方文档 [安装 WSL | Microsoft Docs](https://docs.microsoft.com/zh-cn/windows/wsl/install)
默认安装Ubuntu 20.04 LTS版
更改默认安装的Linux发行版
```powershell
wsl --install -d <Distribution Name>
```
/mnt目录下是Windows系统的挂载盘可直接访问Windows磁盘文件
#### 通过FinalShell连接WSL2
1. 需要先删除ssh再安装ssh
```shell
apt-get remove --purge openssh-server #先删ssh
apt-get install openssh-server #再安装ssh
rm /etc/ssh/ssh_config
service ssh --full-restart #重启ssh服务
```
2. 修改配置文件
```shell
vim /etc/ssh/sshd_config
Port 6666 # 指定连接端口 6666
ListenAddress 0.0.0.0 # 指定连接的IP
PasswordAuthentication yes # 开启密码认证
PermitRootLogin yes # 开启root用户登录
```
3. 重启ssh每次重启wsl都要执行该语句
```shell
service ssh --full-restart
```
4. 重新生成host key
```shell
dpkg-reconfigure openssh-serve
```
FinalShell就可以连接WSL2了
#### 启用systemctl
进入当前发行版
编辑 /etc/wsl.conf
```shell
vim /etc/wsl.conf
# 内容如下
[boot]
systemd=true
```
重启WSL
```powershell
wsl --shutdown
```
## 安装 7zip
```shell
# 更新系统数据库
sudo dnf update -y
# 启用 Epel repository
sudo dnf install epel-release
# 安装 7-Zip
sudo dnf install p7zip p7zip-plugins
# 检验是否安装上
7z
# 使用
# 创建压缩文件 命令中的选项a用于压缩
7z a data.7z data.txt
# 显示每个存档文件的详细信息列表
7z l data.7z
# 解压缩
# 注意 -o 用来指定解压缩文件存放目录,-o 后是没有空格的,直接接目录
7z x data.7z -r -o./data
```
## 安装 Nginx
```shell
tar -zxvf nginx-1.21.4.tar.gz
cd nginx-1.21.4/
./configure
make
make install
```
AlmaLinux 下安装
```shell
# 确保软件是最新的
sudo dnf clean all
sudo dnf update
sudo dnf groupinstall "Development Tools"
# 安装
sudo dnf install nginx
sudo systemctl restart nginx
sudo systemctl status nginx
sudo systemctl enable nginx
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
```
- `/etc/nginx`: 包含所有 Nginx 配置文件的主目录。
- `/etc/nginx/nginx.conf`: 主要的 Nginx 配置文件。
- `/etc/nginx/sites-available`定义各个网站的目录。请记住Nginx 不会使用在此目录中找到的配置文件,除非它们链接到该目录。`/etc/nginx/sites-enabled`
- `/etc/nginx/sites-enabled`: Nginx 积极服务的网站列表。
- `/var/log/nginx`: Nginx日志目录
## 安装 Redis
在安装Redis之前运行下面的命令来重建软件包缓存并获得最新版本的软件包信息。
```shell
sudo dnf makecache
```
现在运行下面的dnf命令来安装Redis。在提示时输入y然后按ENTER键继续。
```shell
sudo dnf install redis
```
Redis安装完毕后运行下面的systemctl命令启动并启用Redis服务。
```shell
sudo systemctl start redis
sudo systemctl enable redis
```
最后使用下面的命令验证Redis的服务状态。
```shell
sudo systemctl is-enabled redis
sudo systemctl status redis
redis-server
```
下面的输出确认Redis正在运行并被启用这意味着它将在系统启动时自动运行。
### 配置Redis
使用下面的vim编辑器命令打开Redis配置文件"/etc/redis.conf"。
```
sudo vim /etc/redis.conf
```
### Redis-CLI
```shell
redis-cli
auth <password>
```
## 安装.Net 6 SDK
```shell
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-6.0
dotnet --info
```
## 安装Node.js
从官网下载Node.js安装包
地址:[Download | Node.js (nodejs.org)](https://nodejs.org/en/download/)
![image-20221122084035020](https://markdownhexo.oss-cn-hangzhou.aliyuncs.com/img/image-20221122084035020.png)
上传
```shell
# 解压
tar -xvf node-v18.12.1-linux-x64.tar.xz
# 重命名为nodejs
mv node-v18.12.1-linux-x64 nodejs
# 移动到指定目录
mv nodejs /usr/local
# 软链接方式让npm和node命令全局生效
ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
ln -s /usr/local/nodejs/bin/node /usr/local/bin/
# or 加入环境变量
vim /etc/profile
# 加入下面行
export PATH=$PATH:/usr/local/nodejs/bin
# 查看nodejs是否安装成功
node -v
npm -v
# 如果报错
wget https://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz
tar -zxvf glibc-2.17.tar.gz
cd glibc-2.17
mkdir build
cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin #安装 make && make install
docker run -itd --name nodejs -v /usr/local/bin/npm:/usr/local/bin/npm n
```
### AlmaLinux 安装
```shell
dnf update -y
dnf install nodejs -y
```
## 安装宝塔面板
## 安装 Neofetch
```shell
dnf install epel-release
dnf install neofetch
neofetch
```
## 安装 Screenfetch
```shell
dnf install git
git clone https://github.com/KittyKatt/screenFetch.git
cp screenFetch/screenfetch-dev /usr/bin/screenfetch
chmod +x /usr/bin/screenfetch
screenfetch
```
## 安装 Edge 和 Chrome
### Edge
更新源
```shell
sudo dnf update -y
#sudo dnf install dnf-utils -y
```
添加Edge源
```shell
sudo dnf config-manager --add-repo https://packages.microsoft.com/yumrepos/edgexxxxxxxxxx2 1sudo dnf confsudo dnf config-manager --add-repo https://packages.microsoft.com/yumrepos/edge2
```
再次更新源
```shell
sudo dnf update -y
```
安装Edge
```shell
sudo dnf install microsoft-edge-stable -y
```
### Chrome
下载chrome安装文件
```shell
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
```
安装chrome
```shell
sudo dnf install ./google-chrome-stable_current_x86_64.rpm -y
```
## 安装 Supervisor
### 安装
```shell
sudo dnf update -y
sudo dnf install epel-release -y
sudo dnf install supervisor -y
```
### 配置
```shell
sudo vim /etc/supervisord.conf
# 开启web服务管理界面
# 修改port中的ip为0.0.0.0以允许任何ip访问
# 修改用户名密码
# 去掉行首的 ; 以使配置生效
[inet_http_server] ; inet (TCP) server disabled by default
port=0.0.0.0:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
# 修改包含子配置文件,文件类型为.conf默认为.ini
[include]
files = supervisord.d/*.conf
```
### 常用命令
```shell
# 启动 supervisord
sudo systemctl start supervisord
# 开机启动 supervisord
sudo systemctl enable supervisord
# 检查是否开机启动 supervisord
sudo systemctl is-enable supervisord
# 检查 supervisord 状态
sudo systemctl status supervisord
# 更新新的配置到supervisord不会重启原来已运行的程序
sudo supervisorctl update
# 载入所有配置文件,并按新的配置启动、管理所有进程(会重启原来已运行的程序)
sudo supervisorctl reload
# 启动某个进程
sudo supervisorctl start xxx
# 重启某个进程
sudo supervisorctl restart xxx
# 停止某个进程(xxx)xxx为[program:theprogramname]里配置的值
sudo supervisorctl stop xxx
# 重启所有属于名为groupworker这个分组的进程(start,restart同理)
sudo supervisorctl restart groupworker
# 停止全部进程
sudo supervisorctl stop all
# 查看服务状态
sudo supervisorctl status
```
### 程序配置
```conf
[program:ckadminnetcore]
command=dotnet CK.Admin.WebApi.dll --urls http://[*]:8888
directory=/root/www/ckadminnetcore/publish
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
autostart=true
autorestart=true
stderr_logfile=/var/log/ckadminnetcore/err.log
stdout_logfile=/var/log/ckadminnetcore/out.log
stopasgroup=true
```
## 安装 FastGithub
```shell
wget https://gitee.com/chcrazy/FastGithub/releases/download/2.1.4/fastgithub_linux-x64.zip
dnf install -y libicu
# 配置系统代理
# 配置系统环境变量
vim /etc/profile
# 尾行加上
export http_proxy="http://127.0.0.1:38457"
export https_proxy="http://127.0.0.1:38457"
# 生效
source /etc/profile
unzip fastgithub_linux-x64.zip
cd fastgithub_linux-x64
./fastgithub
```
## 安装 ohmyzsh
### 安装zsh
```shell
dnf install -y zsh
```
### 脚本安装
```shell
sh -c "$(wget -O- https://install.ohmyz.sh/)"
```
### 配置
```shell
vim ~/.zshrc
# 修改主题
# ZSH_THEME='robbyrussell'
ZSH_THEME='agnoster'
source ~/.zshrc
```
### 切换为默认shell
```shell
dnf install util-linux-user -y
chsh -s /bin/zsh
#查看默认Shell
echo $SHELL
```
### 主题
#### Powerlevel10K
```shell
```
安装Nerd Fonts
```shell
unzip nerd-fonts.zip
```
运行install.sh提示/usr/bin/env: bash\r: No such file or directory
```shell
vim install.sh
:set ff
# 可以看到fileformat=dos
:set ff=unix
:set ff
# 可以看到fileformat=unix 即保存成功
:wq
```
## 安装 ElasticSearch
```shell
cd /etc/yum.repos.d
vim elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
dnf install --enablerepo=elasticsearch elasticsearch -y
```
## 安装 Rsync
```shell
dnf install rsync -y
```
### 配置
```shell
vim /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = root
gid = root
ignore errors
hosts allow = 10.0.3.0/24
secrets file = /etc/rsyncd.secrets
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
# path = /home/ftp
# comment = ftp export area
# 同步模块名称
[syncwspswwwroot]
# 服务器同步的路径
path = /root/wwwroot
log file = /var/log/rsync.log
# 只读模式 不允许客户端向同步路径进行同步上传文件
read only = yes
[mysql_bakup]
path = /root/mysql_bakup
read only = yes
```