简介
1、Linux认知
1.1、创始人
Unix:肯·汤普森 —— 图灵奖
Linux:林纳斯·托瓦兹
Java:詹姆斯·高斯林
1.2、认知
1.2.1、Windows、虚拟机、Linux、Ubuntu 的关系
Windows 就是我们的操作系统,我们在我们的 PC机上安装虚拟机,
虚拟机是一个软件,可以安装各种操作系统,例如安装 Linux,
Ubuntu 是 Linux操作系统的一种发行版本
1.2.2、Unix 和 Linux 的关系
Unix 是由肯·汤普森创建的商业软件,是闭源的,Unix 多与硬件配套;
Linux 是由林纳斯创建的开源软件,可以运行在多种硬件平台上。
1.2.3、Linux 的标志和其含义
企鹅,据说是因为企鹅是南极洲的标志性动物,根据国际公约,南极洲为全人类共同所有,不属于当今世界上的任何国家,当今任何国家无权将南极洲纳入其版图。
Linux 选择企鹅图案作标志,其含意也是表明:开源的 Linux,为全人类共同所有,任何公司无权将其私有。
2、下载安装配置
2.1、下载安装
Ubuntu服务器版:https://cn.ubuntu.com/download/server/step1
VMware(收费):VMware Desktop Hypervisors for Windows, Linux, and Mac
XShell:家庭/学校免费 - NetSarang Website
Xftp:家庭/学校免费 - NetSarang Website
-
安装 VMware 时,到那个用户体验设置,全部取消勾选
-
因为 VMware 是收费的,可以去网上搜 vmware16最新密钥 类似关键字,打开程序后复制进去就行了
-
通过 iso文件创建虚拟机,将虚拟磁盘拆分成多个文件,其他的自己修改。还可以在虚拟机设置中把网络改成桥接模式,这个看你是否有这个需求,一般默认就是 NAT模式。
-
创建虚拟机完成之后,记得断开光驱,也可以去设置中 CD/DVD 取消勾选启动时连接,选择使用物理驱动器
2.2、配置
使用 SSH终端进行连接
2.2.1、什么是 SSH
SSH 是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用 SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者 TatuYlonen 设计了 SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
云服务器上安装的 Ubuntu 默认都是自带了 OpenSSH服务端的,我们可以直接连接,如果你的 Ubuntu服务器上没有安装 OpenSSH服务器端,那么可以输入命令进行安装:
// 一般都安装在用户目录下,而不是 /根目录 sudo apt install openssh-server // 如果 ifconfig 查看不到 IP地址,再安装一个 net-tools sudo apt install net-tools
2.2.2、SFTP 和 Xftp
Ubuntu 一般是默认安装了 SFTP服务器的,然后我们在 Windows 中使用 Xftp 来对虚拟机中的文件进行管理。
我们一般传文件到虚拟机去,都是传到 /home/你的用户名 即用户文件夹下,
3、Linux基础
> more xxx.log 查看日记信息 > netstat -naop | grep 5672 查看端口是否被占用 > ps -ef | grep 5672 查看进程 > systemctl stop 服务
sudo 临时提升到 root权限 任何命令都可以跟文件路径
用 ; 隔开,可以一行依次运行多个命令
-abcd 可以一起使用,你需要的命令就可以跟在后面 -i:information的意思,产生提示信息 -r:递归 -a:all的意思,所有的文件,包括隐藏文件和隐藏目录 -l:list的意思,变成列表形式
3.1、Linux知识点
3.1.1、目录介绍
/bin:用户二进制文件 /sbin:系统二进制文件 /etc:配置文件 /dev:设备文件
/proc:进程信息 /var:变量文件 /tmp:临时文件 /usr:用户程序
/home:HOME目录 /boot:引导加载程序文件 /lib:系统库 /opt:可选的附加应用程序
/mnt:挂载目录 /media:可移动媒体设备 /srv:服务数据
3.1.2、文件介绍
ls 可以看到一个文件的展示信息,
drwxrwxrwx 2 user1 user1 4030 10月 21 11:54 aa
-
最前面的字符代表文件的类型,不同用户对文件的操作权限
-
-:普通文件、d:目录文件、l:链接文件、s:套接字文件、p:管道文件、c:字符设备文件、b:块设备文件
-
后面有三个 rwx,分别代表了:文件主人 u、同组用户 g、其他用户 对该文件的操作权限,读、写、执行。
-
uid 分为 ruid(当前真实id)和 euid(有效id,执行文件时的权力就是文件主人id),这三位为扩展位,他们会修改文件对应的 rwx:
-
SUID:用户执行的期间可以获得文件主人的权限,若有执行权限也有,SUID 也有,则第三个 x 变成 s,若只有 SUID 则是 S
-
SGID:用户执行期间的组就是主人的同组,这里规矩一样,改变的是第六个 x
-
STICKY:粘滞位,若有 w权限,可修改但不能删除,改变的是第九个 x,s 变成 t,S 变成 T。例如:chmod 5764 则-rwsrw-r--会变成 -rwsrwxr-T
-
-
-
第二个位置的数字代表了对此 inode 的链接数,即有几个对此文件的链接,一般是 1
-
第三个位置的字符代表了此文件的主人名称
-
第四个位置的字符是此文件所在的组的名称
-
第五个位置的数字代表了该文件的字节数
-
后面就是此文件最后一次修改的时间
-
最后一个位置的字符就是该文件的名称
3.1.3、用户和用户组以及权限
当前用户只能在用户目录下才有相关的文件权限,即 /home/test1 目录下。
~ 就默认代表了用户目录。
在控制台可以看见 aa@bb:~$,aa 就是当前用户的名称,bb 是服务器的名称,~ 是当前所在目录。$ 是用户权限,# 代表了最高权限,
sudo -s 可以转变为 root用户,拥有最高权限。 exit 可以退出。命令前加 sudo 是临时使用 root用户的权限。若不在 sudo 所在组,就无法使用这个命令。
// 可以使用这个命令为指定用户添加 sudo用户组 sudo usermod user2 -G sudo
// 查看用户和用户组信息 id // 改变密码 passwd // 创建用户 useradd 也行,还可以加上很多参数 adduser user2 // 删除用户 userdel userdel user2 // 切换用户 su - user2
3.1.3.1、权限修改
-
umask:显示当前的权限掩码 File mask,例如0022,那么当创建文件时会给文件分配默认的权限 7755,分配的权限为7777-0022=7755
-
数字是三位二进制的值,然后其实 rwx 有四组,第一组一般都是 rwx 都有,即 111 = 7,那么 7755 = (111)111 101 101 = (rwx)rwxr-xr-x
// 修改文件权限 chmod 640 ./test1.txt chmod ug-w ./test1.txt // 减去指定权限 // 修改文件的组 chgrp user1 11 // 修改文件的主人和所在组 chown -R chw01:chw01 ./text1.txt
3.1.4、三种进程
-
Interactive process:交互进程,根据命令启动交互进程,无法自动启动
-
Automatic process:自动进程,
-
定时自动进程: vi a1.sh 进入命令模式,
-
date>at_test.dat ls -l>>at_test.dat (这两个你想执行的命令,Ctrl+Z退出)
-
at -f a1.sh now+1 minutes (是在后台执行的,我们看不见,但可以cat at_test.dat这个文件)
-
在总系统负载足够低以接受额外工作的时候 batch 然后输入想要使用的命令
-
-
Daemons:服务进程,系统初始化的时候就启动了,一直运行的服务进程,等待服务被请求
3.1.5、init 可运行级别
有 0-6,一共七种,
用户一般是 5,服务器一般是 3,
3.1.6、延时任务 sleep
使用 sleep命令,使进程等一段时间后(系统负载不高时)运行命令
3.1.7、编写程序
3.1.7.1、写一个 C语言程序
// 去编写一个 C语言的程序 vim a.c // 写入的内容 #include <stdio.h> int main() { printf("Hello World!"); } // 编译 gcc a.c -o test // 直接运行 ./test
3.1.7.2、写一个 Java语言程序
vim Main.java // 内容 public class Main { public static void main(String[] args) { System.out.println("Hello World!"); } } javac Main.java java Main
3.1.8、系统管理
-
top:就相当于 Windows 的任务管理器,
-
free:查看内存使用情况,-m 以 mb 为单位, -g 就是 gb
-
lsblk:查看所有块设备信息,包括硬盘和光驱
-
df:当前磁盘使用情况
-
ps:查看当前前台的进程,类似 top,但不是实时的,ps -ef 查看所有
3.1.9、vim编辑器
-
vim hello.txt:对指定文件进行编辑,如果文件不存在则会帮你创建
-
a、i、o、A、I:从命令模式进入编辑模式,i 是在光标之前继续写,a 是在光标之后,o 是直接跳到下一行,A 是当前行的最后继续写,I 是当前行的最前继续写。
-
:wq 或 :x:保存并退出,
-
:q!:强制退出
-
:447,就是跳到指定行
-
:set number:开启行号
-
/ 或 ?:末行模式中,输入字符,进行查找
-
:s/it/he/g:末行模式下,全局替换 it 成 he
3.1.9.1、三种模式
3.2、基础命令
3.2.1、ls
显示指定目录下的内容
ls -a:显示隐藏文件和隐藏目录 ls -d:查看自身 ls -R:递归显示目录中的内容 ls -l:以列表形式显示内容的详细信息 ls -t:显示目录中的内容列表,并使用时间排序,默认是按着名字排序 ls -r:按名称逆序排序
3.2.2、创建文件(夹) touch、mkdir
不是说有后缀的就是文件,文件夹也可以叫 a.txt
不能在不存在的目录下创建,除非使用 -p,则会级联创建
touch:创建文件 mkdir:创建文件夹 touch -p test1/test2/a.txt mkidir -p t1/t2/t3.txt // 连续创建不加 , 而是空格 touch a.txt b.txt c.txt mkdir game1 game2
3.2.3、查找文件 ls、find
ls:查找文件
find:查找文件或文件夹
grep:查找对应名字
ls ?b*.txt find /test1/test2 -name "?[a-k]*.txt" ls -l | grep *font*
3.2.4、cp
先创建目标文件,再将源文件的内容复制到目标文件中,若复制的是文件夹时,要用上-r,递归 cp
cp不能用在不存在的目录上,例如:t2 不存在,则 cp -r t3 t1/t2 会出错
cp -i:若目标文件不存在,不产生提示信息;若目标文件已存在,无论目标文件是否为空,都会产生覆盖提示
复制多个文件时,是最后一个文件接收前面所有的文件内容
即 d 文件夹接收前面的三个文件 cp -ri a.txt b c.txt d
3.2.5、mv
先将文件复制一份到目标文件,然后删除源文件。
若目标文件不存在,且文件名与源文件名一致,那就是移动;文件名与源文件名不一致,那就是改名。
若目标文件已存在,则 -i 的话会问你是否要覆盖目标文件
可以移动多个文件
mv ./test2/[A-Z]* ./big
3.2.6、rm
删除文件
rmdir:只可删除空文件夹 rm -ri:删除非空目录 rm -rf
3.2.7、重定向
>:输出重定向,会产生覆盖 >>:输出重定向,追加 cat a.txt >> b.txt <:输入重定向,cat < a.txt,输出到屏幕上
3.2.8、清空文件
两种方式都可以
cat /dev/null > c.txt : > c.txt
3.2.9、which
查看某个命令所在的路径
3.2.10、管道
|:无名管道,将上一个命令的输出结果作为下一个命令的输入
cat /home/test2 | wc -l
3.2.11、链接 ln
3.2.11.1、硬链接
创建硬链接,不可跨区,inode 相同
ln /var/tmp ./tmplink
3.2.11.2、软链接
创建软链接,可以跨区,不必在同一个文件夹下,inode 不同
ln -s /var/tmp
3.2.12、转向
3.2.12.1、输出转向
// 会覆盖,不是追加 cat ls -a > a.txt // 是追加,不会覆盖 cat ls -a >> a.txt
3.2.12.2、输入转向
< 是输入转向
3.2.13、查看信息的各种相关命令
-
ps:显示进程,PID 是进程号,TTY 是运行终端,TIME 是允许时间,CMD 是命令。比如 ps -ef、ps -af
-
top:动态显示进程,3s 刷新一次,PR 是优先级(rt 是实时进程,最高),NI 是 nice值,默认是 0
-
nice 数字为 -20~19,越高代表你友好程度越高,为别人让位,负的则是不友好
-
-
kill -信号数字 进程号:杀死进程
-
SIGHUP 1 对于守护进程:重新读取配置文件。
-
SIGINT 2 中断进程。 进程可以忽略这个信号。
-
SIGKILL 9 中断进程。 进程不能忽略这个信号。
-
-
pstree:展示进程树形关系图,
-
命令 &:在后台运行此命令
-
jobs:显示被挂起的进程
-
bg:在后台激活暂停的进程
-
fg:将进程放到前台
-
ctrl + z:挂起当前线程
-
ctrl + c:中断当前线程
-
pwd:查看当前所在目录
-
cat:将文件的文本内容输出到屏幕
-
more:类似cat,但是会将内容一页一页显示,不能后退
-
less:功能和 more一样,但是能后退,因为不用读取整个文件,所以加载速度比 more快,用上下键进行上下翻
-
tail:只显示 10行末尾的文本
-
fdisk:查看磁盘信息
-
df :用于显示目前在 Linux系统上的文件系统磁盘使用情况统计
-
free:显示系统内存使用情况
-
uptime:显示机器启动多久了
3.2.14、write
// 给指定用户写消息 write user2
3.3、临时环境变量、永久环境变量
打开终端窗口默认使用的 bash 是父shell,再次打开的 sh 才是子shell
在终端窗口输入 sh 进入子shell,输入 export 环境变量名,才可以在子shell 中使用你在父shell 中设置的永久环境变量
如果想设置全局的环境变量,就是让所有用户都可以访问到环境变量,那么就需要在 /etc/profile 中进行配置环境变量,但是需要使用 root权限才能修改,或者使用 sudo命令。
3.3.1、临时环境变量
临时环境变量,关闭终端就没了
3.3.1.1、设置临时环境变量
name = jack export PATH=/bin
3.3.1.2、使用临时环境变量 echo
echo $name echo $PATH
3.3.2、永久环境变量
3.3.2.1、进入 .bahsrc 设置永久环境变量
vi .bashrc name=java
3.3.2.2、保存修改
source .bashrc
3.4、归档、解档,压缩、解压
归档:把若干个文件或目录简单地合并在一起,它并不对文件进行压缩,就是将多个文件前后连接在一起,形成一个大文件。
另外归档还会额外的添加一些信息,所以归档后的总文件的大小,反而往往比之前文件之和还要大些
解档:将 tar文件解除归档到指定文件夹
压缩:将 tar文件压缩成tar.gz文件
解压:将 tar.gz文件解压成tar文件
3.4.1、归档、解档,压缩、解压,一步到位
3.4.1.1、归档、解档
-z 是使用 gzip格式进行压缩,-c 是进行归档,-x 是解档,-v 是处理过程中输出日志,-f 是对普通文件进行操作。
将 a、b、c 三个文件夹归档到 work.tar,work.tar 是自动创建的,不需要已存在。
将 work.tar 解档到 dir1文件夹,若直接解压到当前文件夹,则不需要 -C 文件路径 这句话
tar -cvf work.tar a b c tar -xvf work.tar -C dir1
3.4.1.2、压缩、解压
压缩已归档的 tar文件到当前目录下
解压 tar.gz文件到当前目录下
gzip work.tar gunzip work.tar.gz
3.4.1.3、一步到位
tar -zcvf work.tar.gz a b c tar -zxvf work.tar.gz -C dir1
3.5、挂载、卸载
根文件系统之外的其他文件要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”,此目录即为“挂载点”,解除此关联关系的过程称之为“卸载”。挂载点下的所有文件会被隐藏,直至卸载;所以挂载点目录一般使用空目录。
-
挂载:根文件系统外,通过关联至根文件系统上的某个目录,来实现访问。就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录,访问此目录就相当于访问设备文件。
-
挂载点:mount_point,用于作为另一个文件系统的访问入口
// 将 /dev/hda1 挂在 /mnt 之下 mount /dev/hda1 /mnt
3.5.1、挂载点
我们通过 iso 创建 linux系统环境,
但是要修改这个系统环境很麻烦,所以我们把这个 iso 放进文件夹,做一个挂载,
这样的话要修改这个系统,只需要修改这个挂在点下的 iso 就好了,系统会同步做修改
3.5.2、挂载实例
3.5.2.1、U盘挂载
U盘最好格式化为 exFAT,但是这样的挂载是临时挂载。
mkdir u-test // 创建一个文件夹,以后用这个文件夹来挂载 U盘 // 注意,/dev/sad1 是你 U盘在虚拟机中的名称,可用 sudo fdisk -l 来查看硬盘情况 sudo mount /dev/sad1 u-test // 解除挂载 sudo umount /dev/sad1
4、环境安装和项目部署
我们可以直接使用 apt 进行软件的安装,它是一个 高级的安装包管理工具,我们可以直接寻找对应的软件进行安装,无需再去官网进行下载,非常方便,软件仓库中默认已经帮助我们存放了大量实用软件的安装包,只需要一个安装命令就可以进行安装了。
如果 apt 无法使用,就去使用 yum。
// 安装 C语言的编译工具 GCC sudo apt install gcc // 安装 JDK sudo apt install openjdk-8-jdk // 安装 Redis,redis-cli 即可直接使用 sudo apt install redis // 安装 MySQL服务器,sudo mysql -u root -p // sudo vim mysql.conf.d/mysqld.cnf 注释掉 bind-address 这行代码 sudo apt install mysql-server-8.0 // 安装 Nginx sudo apt install nginx
5、实践
5.1、端口占用处理
// 先用 ps -ef 命令,查看相关进程占用的端口 ps -ef | grep 'java' // 然后用 kill -9 强制中断进程,使端口可用 kill -9 2074