2022-11-22 13:14:34 +08:00

584 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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指令
ip addrip a查看主机的ip地址
clear清屏
cd进入指定的目录
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打印输出一句话。也可以用作向文本文件内写入信息。会自动追加并换行。
### 压缩:
1、打包把多个文件打成一个包。
2、压缩把文件占用的大小进行压缩。
tar命令用来进行压缩和解压缩的。
-c 建立一个压缩文件(打包)
-x 解开一个压缩文件(解包)
-z 是否需要使用gzip压缩
-v 压缩过程中是否显示文件日志
-f 使用的文件名
tar -cf只打包不压缩不显示日志
tar -xf解压文件不显示日志
tar -cvf只打包不压缩显示日志
tar -xvf解压文件显示日志。
tar -zcvf打包压缩显示日志
tar -zxvf解压最常用
### 系统服务:
systemstl操作系统服务。
status查看某个服务的状态
stop终止某个服务
start启动某个服务
restart重启某个服务
```shell
systemctl status mysqld
```
网络服务network
防火墙服务firewalld
Mysqlmysqld
systemctl status network
## 文件详情以home目录为例
d说明当前文件是一个目录- 代表的是文件)
rwxr可读w可写x可执行。代表当前文件的创建者的权限
r-x代表的是和文件创建者的同组的用户的权限
r-x代表的是其他用户
2链接数
root创建者
root创建者所在的组
6文件占用空间的大小字节
Apr 11 2018最后一次修改时间
home文件名或目录名
## 进程管理
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
```
## 软件安装
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
```
## 用户
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
```
## 安装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;
```
---
## 配置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 --reload
```
查看防火墙开放的端口
```shell
firewall-cmd --list-all
```
指定作用域开发防火墙端口
```shell
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# -zone 作用域
# -add-port 添加端口,格式为端口/协议
# -permanent 永久生效,没有此参数重启后失效
```
## 分配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了
## 安装Nginx
```shell
tar -zxvf nginx-1.21.4.tar.gz
cd nginx-1.21.4/
./configure
make
make install
```
## 安装.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
```