--- 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 addr(ip a):查看主机的ip地址 clear:清屏 cd:进入指定的目录 ls:列出当前目录下的所有文件及目录 ls -l:给ls指令传了一个参数l。等同于ll。列出当前目录下的所有文件及目录的详情。 ls bin:ls后可以接目录名,要么接绝对路径。 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 Mysql:mysqld systemctl status network ## 文件详情:(以home目录为例) d:说明当前文件是一个目录(- 代表的是文件) rwx:r,可读;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空间,swappiness=100的时候表示积极的使用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 ``` /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 ```