linux基础

本文详细介绍了Linux操作系统的基础知识,包括其应用场景,以及Vagrant在虚拟机管理中的使用,包括安装、配置、创建和管理虚拟机的步骤。此外,还讲解了Linux常用命令,如文件操作、系统管理、权限控制等,并提供了实例演示。最后,文章提到了在Linux中安装JDK和Tomcat的过程,以及MySQL的安装和配置方法。
摘要由CSDN通过智能技术生成

1 Linux基础

1.1 Linux简介

Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机

1.2 应用场景

  1. 桌面应用
    linux在桌面场景下应用不多,这个场景下一般还是使用windows
  2. 服务端(后端)
    电商,门户网站后端服务,一般采用linux作为操作系统,java,c++,python,go,运行和部署在linux服务
  3. 嵌入式
    linux最小和最核心的版本只有几百K,智能物联设备方便嵌入式开发
  4. 云计算
    运维和部署场景,使用linux

2 Vagrant

2.1 虚拟机

虚拟机是一种虚拟化技术,它允许在一台物理计算机上创建和运行多个独立的虚拟计算机环境。虚拟机可以模拟一台完整的计算机系统,包括处理器、内存、硬盘等,并且可以运行操作系统和应用程序。通过虚拟机,您可以在同一台计算机上同时运行多个不同的操作系统,如Windows、Linux等,而无需额外的硬件设备。

2.2 vagrant是什么

Vagrant是一个比较流行的虚拟机管理软件,使用Vagrant 可以让我们用命令直接从云上下载虚拟机的镜像,然后进行创建和管理等,vagrant集成了主流的虚拟机管理工具vmvare 和 virtualbox,默认使用virtualbox
vagrant 的精髓在一个 Vagrantfile 里面,和 docker 的 Dockerfile 功能上一样。我们只需要把需要安装部署的步骤写在 Vagrantfile 里面,便可以实现轻松部署。vagrant 还支持把当前系统做成一个.box 后缀命名的镜像,类似 docker 的 image,可轻松实现环境的移植。
vagrant 可以把配置好的环境打包成一个box,分享给其他人直接使用。
在容器流行之前,Vagrant 就是用来编排虚机和自动部署开发环境的,有了 Docker/Kubernetes 之后,直接用容器来编排应用确实更简单。但是还有一些工作,例如容器平台自身的安装,多节点集群的部署测试等,更方便用虚拟机解决。

2.3 vagrant实战

2.3.1 安装Virtualbox

1 安装目录:
~ D:\DFRT\develop\Oracle\VirtualBox
2 配置:
~默认虚拟电脑位置: D:\DFRT\develop\vms

2.3.2 安装vagrant

1 安装目录
~D:\DFRT\develop\vagrant
2 配置 环境变量
~ vagrant的box默认下载用户的宿主目录\vagrant_box(后期重装,配置环境变量值为E:vagrant)
在这里插入图片描述

2.3.3 Centos7安装

1.下载文件vagrantfile
2.创建目录
~E:\VirtualSystem\s13
3.产生配置文件
~在目录下执行命令 生成vagrantgfile文件

vagrant init centos

4.修改配置文件

># -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  (1..3).each do |i|
    config.vm.define vm_name = "s#{i}"  do |config|
        config.vm.provider "virtualbox" do |v|
            v.customize ["modifyvm", :id, "--name", vm_name]
	    v.customize ["modifyvm", :id, "--memory", "8192"]
            v.customize ["modifyvm", :id, "--cpus", "2"]
        end
        config.vm.box = "centos_v1"
        config.vm.hostname =vm_name
        config.ssh.username = "root"
        config.ssh.password = "vagrant"
							#		config.ssh.shell = "powershell"
							#config.ssh.shell = "bash -l"
        config.vm.network :private_network, ip: "192.168.56.7#{i}"
	config.vm.provision :shell, :path => "bootstrap.sh"
    end
  end
end

5.下载并修改bootstrap.sh文件,如下:

#!/usr/bin/env bash

# The output of all these installation steps is noisy. With this utility
# the progress report is nice and concise.

echo "Update /etc/hosts"
cat > /etc/hosts <<EOF
127.0.0.1       localhost

192.168.56.71 s1
192.168.56.72 s2
192.168.56.73 s3
EOF

echo "Disable iptables"
setenforce 0 >/dev/null 2>&1 && iptables -F

### Set env ###
echo "export LC_ALL=en_US.UTF-8"  >>  /etc/profile
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

在这里插入图片描述

6.列表本地box (此时还没有box)

E:\VirtualSystem\s13>vagrant box list

7.添加box
把刚才下载的box添加到vagrant中

F:\java\virtual\s13>vagrant box add centos_v1 ./centos_v1.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos_v1' (v0) for provider:
    box: Unpacking necessary files from: file://F:/java/virtual/s13/vagrant-centos-7.2.box
    box:
==> box: Successfully added box 'centos_v1' (v0) for 'virtualbox'!

8.再次查看是否添加(此时已经有了box)

~E:\VirtualSystem\s13>vagrant box list

9.删除box 命令(删除之前的box,centos-travel)

~E:\VirtualSystem\s13>vagrant box remove centos-travel
~Removing box 'centos-travel' (v0) with provider 'virtualbox'..

10.把box(centos_v1.box)作为模板,安装虚拟机

#必须在vagrantfile所在的目录安装,执行如下命令:
vagrant up

11.测试连接
使用MobaXterm连接刚才安装的3个服务器192.168.56.71,72,73

ip addr #查看ip地址
hostname #服务器名

2.3.4 测试不同box安装的虚拟机

  1. box和虚拟机的关系
    ● 类->对象
    ● 镜像->容器
    ● box->虚拟机
    ● 铸造模型->产品
  1. 测试不同box安装的虚拟机(重复之前的步骤)
#打开虚拟机
vagrant up

#进入虚拟机

#把hello v3输入到v3.txt中(原来没有v3.txt就自动创建)
echo "hello v3" > v3.txt

#查看v3.txt中内容
[root@s1 ~]# cat v3.txt
hello v3

#关闭虚拟机
E:\VirtualSystem\s13>vagrant halt
==> s1: Attempting graceful shutdown of VM...

#打包虚拟机到box
E:\VirtualSystem\s13>vagrant package --output ./centos_v3.box
==> s1: Clearing any previously set forwarded ports...
==> s1: Exporting VM...
==> s1: Compressing package to: E:\VirtualSystem/s13/centos_v3.box

#添加box到vagrant
E:\VirtualSystem\s13>vagrant box add centos_v3 ./centos_v3.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos_v3' (v0) for provider:
    box: Unpacking necessary files from: file://E:\VirtualSystem/s13/centos_v3.box
    box:
==> box: Successfully added box 'centos_v3' (v0) for 'virtualbox'!

创建3个目录,每个目录配置Vagrantfile和bootstrap

在这里插入图片描述

#分别进入v1,v2,v3,安装
vagrant up

远程登录虚拟机,查看内容

2.3.5 在虚拟机上装Vim

  1. 安装命令
yum install vim -y
  1. 打包,生成自定制的box
#关闭虚拟机
vagrant halt s1
#打包当前虚拟机
vagrant package --base s1 --output centos_v2.box
  1. 删除现有虚拟机
vagrant halt
vagrant destroy # 删除所有的虚拟机
vagrant destroy s1 #删除s1

然后添加centos_v2

#列表
E:\VirtualSystem\s13>vagrant box list
centos_v1 (virtualbox, 0)

#添加
\s13>vagrant box add centos_v2 ./centos_v2.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos_v2' (v0) for provider:
    box: Unpacking necessary files from: file://E:\VirtualSystem/s13/centos_v2.box
    box:
==> box: Successfully added box 'centos_v2' (v0) for 'virtualbox'!

#列表
E:\VirtualSystem\s13>vagrant box list
centos_v1 (virtualbox, 0)
centos_v2 (virtualbox, 0)
  1. 修改Vagrantfile,设置box使用centos_v2

在这里插入图片描述

  1. 使用已经安装了vim的box安装新的虚拟机
vagrant up

进入虚拟机查看vim,已经安装好了

3Linux 常用命令

3.1 Linux基本目录

在这里插入图片描述● bin (binaries)存放二进制可执行文件
● sbin (super user binaries)存放二进制可执行文件,只有root才能访问
● etc (etcetera)存放系统配置文件
● usr (unix shared resources)用于存放共享的系统资源
● home 存放用户文件的根目录
● root 超级用户目录
● dev (devices)用于存放设备文件
● lib (library)存放跟文件系统中的程序运行所需要的共享库及内核模块
● mnt (mount)系统管理员安装临时文件系统的安装点
● boot 存放用于系统引导时使用的各种文件
● tmp (temporary)用于存放各种临时文件
● var (variable)用于存放运行时需要改变数据的文件

3.2 vagrant默认的挂载目录

Vagrantfile所在目录,默认挂载到虚拟机/vagrant
在这里插入图片描述
自定义挂载
在这里插入图片描述

3.3 启动和关闭虚拟机命令

  1. 启动虚拟机
#启动全部虚拟机
vagrant up
#启动单个虚拟机s1
vagrant up s1
  1. 关闭虚拟机
#关闭所有虚拟机
vagrant halt
#关闭一个虚拟机s1
vagrant halt s1

3.4 文件或目录常用命令

  1. 打印命令
echo hello linux
echo hello v3 > v3.txt #覆盖
echo hello v3 >> v3.txt #追加
  1. ls命令
ls -la #详细查看,所有文件和目录
   -l		(long)详细列表
   -a	(all)         显示隐藏文件、特殊目录...   
ll = ls -l
  1. man 命令 查看命令的帮助
man ls
#ctrl+f 下一页
#ctrl+b 上一页
#:q退出
  1. cd命令 进入目录
#绝对路径
[root@s1 ~]# cd /vagrant
[root@s1 vagrant]# ls
bootstrap.sh  centos_v1.box  centos_v2.box  centos_v3.box  lua-demo  Vagrantfile

#进入用户的宿主目录
cd ~ 

cd .. #进入上级目录

#./ 不写,都是代表当前目录

cd - 进入上一个历史目录

[root@s1 man]# cd ~
[root@s1 ~]# pwd
/root
[root@s1 ~]# cd -
/usr/local/share/man
[root@s1 man]# pwd
/usr/local/share/man
[root@s1 man]#
  1. pwd 显示当前工作目录(print working directory)
[root@s1 ~]# pwd
/root
  1. su 切换用户
[vagrant@s1 /]$ cd /root/
-bash: cd: /root/: Permission denied #使用vagrant不能访问/root

[vagrant@s1 /]$ su root
Password:
[root@s1 /]# cd /root/
  1. mkdir 创建目录(make directory)
    -p 父目录不存在的情况下先生成父目录(parents)
[vagrant@s1 ~]$ cd ~ #进入宿主目录
[vagrant@s1 ~]$ ll
total 0
[vagrant@s1 ~]$ mkdir /home/vagrant/java-project/src #创建目录
mkdir: cannot create directory ‘/home/vagrant/java-project/src’: No such file or directory
[vagrant@s1 ~]$ mkdir -p /home/vagrant/java-project/src #-p自动产生父目录
[vagrant@s1 ~]$ ll
total 0
drwxrwxr-x 3 vagrant vagrant 16 Jul  6 11:16 java-project
[vagrant@s1 ~]$ cd java-project/
[vagrant@s1 java-project]$ ll
total 0
drwxrwxr-x 2 vagrant vagrant 6 Jul  6 11:16 src
[vagrant@s1 java-project]$
  1. tree 以树列表目录
su root #切换管理员
yum install -y tree

[root@s1 vagrant]# su vagrant
[vagrant@s1 ~]$ tree java-project
java-project
├── resources
│   └── db
└── src
  1. touch 创建空文件
[vagrant@s1 src]$ touch Hello.java
[vagrant@s1 src]$ ll
total 0
-rw-rw-r-- 1 vagrant vagrant 0 Jul  6 14:01 Hello.java
[vagrant@s1 src]$
  1. cp 拷贝文件,目录
    -r :递归拷贝
    在这里插入图片描述
[vagrant@s1 ~]$ cp java-project/src/Hello.java ./java-project/src/main/java/
[vagrant@s1 ~]$ tree java-project/
java-project/
├── resources
│   └── db
└── src
    ├── Hello.java
    ├── main
    │   └── java
    │       └── Hello.java
    └── test

递归拷贝

[vagrant@s1 ~]$ cp -r  java-project/resources/ java-project/src/main/
[vagrant@s1 ~]$ tree java-project/
java-project/
├── resources
│   └── db
│       └── jdbc.properties
└── src
    ├── main
    │   ├── java
    │   │   └── Hello.java
    │   └── resources
    │       └── db
    │           └── jdbc.properties
    └── test

8 directories, 3 files
  1. rm 删除文件或目录
    -r: 递归删除
    -f: 强制删除
[vagrant@s1 ~]$ rm java-project/src/Hello.java
[vagrant@s1 ~]$ tree java-project/
java-project/
├── resources
│   └── db
└── src
    ├── main
    │   └── java
    │       └── Hello.java
    └── test
  1. mv 移动文件或目录
[vagrant@s1 ~]$ mv  java-project/resources/ java-project/src/main/
[vagrant@s1 ~]$ tree java-project/
java-project/
└── src
    ├── main
    │   ├── java
    │   │   └── Hello.java
    │   └── resources
    │       └── db
    │           └── jdbc.properties
    └── test

6 directories, 2 files

mv可以修改文件名

[vagrant@s1 ~]$ tree java-project/
java-project/
└── src
    ├── main
    │   ├── java
    │   │   └── Hello.java
    │   └── resources
    │       └── db
    │           └── jdbc.properties
    └── test

6 directories, 2 files
[vagrant@s1 ~]$ mv java-project/src/main/java/Hello.java java-project/src/main/java/HelloWorld.java
[vagrant@s1 ~]$ tree java-project/
java-project/
└── src
    ├── main
    │   ├── java
    │   │   └── HelloWorld.java
    │   └── resources
    │       └── db
    │           └── jdbc.properties
    └── test

6 directories, 2 files

先把OAuth2Config.java下载到Vagrantfile
cd vagrant #在vagrant下操作

13.cat 显示文本文件内容(catenate)

cat OAuth2Config.java
cat a.txt > b.txt #把a.txt内容覆盖到b.txt
cat a.txt >> b.txt #吧a.txt追加到b.txt
  1. more,less 分页显示文本文件内容
more OAuth2Config.java
less OAuth2Config.java
  1. head -n 显示前几行内容
  2. tail (使用场景:查看日志文件中后面的新增部分)
    -n 显示后几行数据
    -f 循环读取(fellow)
tail -n 10 OAuth2Config.java

启动两个session
在其中一个session中追加内容

[vagrant@s1 ~]$ echo "hello 1111" >> OAuth2Config.java
[vagrant@s1 ~]$ echo "hello aaaaa" >> OAuth2Config.java
[vagrant@s1 ~]$ echo "hello bbbbb" >> OAuth2Config.java

在另一个session中,可以刷新最新的日志

tail -n 20 -f OAuth2Config.java
  1. wc 统计文本的行数、字数、字符数
    -m 统计文本字符数
    -w 统计文本字数
    -l 统计文本行数
echo "hello java welcome to beijing" > a.txt
wc -w -l -m a.txt
  1. find 查找文件
find -name Hello*.java

[vagrant@s1 ~]$ tree java-project/
java-project/
└── src
    ├── java -> app
    ├── main
    │   ├── java
    │   │   └── HelloWorld.java
    │   └── resources
    │       └── db
    │           └── jdbc.properties
    └── test

6 directories, 3 files
[vagrant@s1 ~]$ find -name Hello*.java
./java-project/src/main/java/HelloWorld.java
[vagrant@s1 ~]$ find -name jdbc.*
./java-project/src/main/resources/db/jdbc.properties
  1. grep 查找文本 ,在指定的文本文件中查找指定的字符串
    -n 显示行数
    -i 不区分大小写查找
grep class OAuth2Config.java -n -i -o
  1. ln 创建软连接
#ln -s 目标地址 文件名

ln -s /home/vagrant/java-project/src/main/java/HelloWorld.java app
echo "hello spring" >> app #通过软连接添加内容
cat app #通过软连接查看文件内容

3.5 系统命令

  1. du
    显示指定的文件(目录)已使用的磁盘空间
    ● -h 显示单位
    ● -s 显示总的大小
cd ~
du -s -h
[root@c1 jack]# du
12      .
[root@c1 jack]# du -s
12 
[root@c1 jack]# du -h
12K     .
[root@c1 jack]# du -sh
12K  
  1. free
    显示当前内存和交换空间的使用情况
[root@c1 jack]# free
              total        used        free      shared  buff/cache   available
Mem:        8011464      121356     7671900        8508      218208     7693036
Swap:       1023996           0     1023996
  1. netstat
    显示网络状态信息,查看端口占用情况
    ● -a 显示所有连接和监听端口
    ● -t (tcp)仅显示tcp相关选项
    ● -u (udp)仅显示udp相关选项
    ● -n 拒绝显示别名,能显示数字的全部转化成数字。
    ● -p 显示建立相关链接的程序名
[root@c1 jack]# sudo yum install net-tools -y #sudo :得到管理员权限执行命令,下载net-tools
Loaded plugins: fastestmirror
base                                                                                                                                   | 3.6 kB  00:00:00
epel/x86_64/metalink                                                                                                                   | 6.8 kB  00:00:00
epel                                                                                                                                   | 4.7 kB  00:00:00
extras                                                                                                                                 | 2.9 kB  00:00:00
puppetlabs-pc1  
......
Complete!
[root@c1 jack]# netstat -tunpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      981/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1685/master
tcp6       0      0 :::22                   :::*                    LISTEN      981/sshd
udp        0      0 0.0.0.0:68              0.0.0.0:*                           2898/dhclient
udp        0      0 0.0.0.0:41045           0.0.0.0:*                           2898/dhclient
udp6       0      0 :::21532                :::*                                2898/dhclient
  1. ifconfig
    网卡网络配置详解
  2. ping 测试网路连通性
  3. top 显示当前系统中耗费最多资源的进程(实时)
  4. ps显示瞬间的进程状态(快照)
    ● -e /-A 显示所有进程,环境变量
    ● -f 全格式
    ● -a 显示所有用户的所有进程(包括其它用户)
    ● -u 按用户名和启动时间的顺序来显示进程
    ● -x 显示无控制终端的进程
 ps -aux

 #管道 命令1 | 命令2 把命令1的结果给命令2作为参数
 cat OAuth2Config.java | grep class
 
 ps -aux | grep tail
  1. kill根据进程ID(pid)杀死进程
kill -9 3860

3.6 打包和压缩命令

以操作OAuth2Config.java为例

  1. gzip 把文件和目录压缩成gz格式
  gzip OAuth2Config.java #压缩
  gzip -d OAuth2Config.java.gz #解压
  1. bzip2 以bzip2格式压缩和解压
  bzip2 OAuth2Config.java
  bzip2 OAuth2Config.java.bz2 -d
  1. tar
    ● 打包目录成tar文件
    ● 整合gzip和bzip2压缩
    ● -c 建立一个压缩文件的参数指令(create)
    ● -x 解开一个压缩文件的参数指令(extract)
    ● -z 是否需要用 gzip 压缩
    ● -j 是否需要用 bzip2 压缩
    ● -v 压缩的过程中显示文件(verbose)
    ● -f 使用档名,在 f 之后要立即接档名(file)

(1)打包

tar -cvf java-project.tar ./java-project/ #打包java-project目录成java-project.tar文件
rm -rf java-project #删除java-project
tar -xvf java-project.tar #解除打包

(2)以gzip方式压缩

tar -czvf java-project.tar.gz ./java-project #z表示已gz格式压缩
tar -zxvf java-project.tar.gz #解压

(3)以biz2方式压缩和解压

#压缩
tar -cjvf java-project.tar.bzip2 ./java-project
#解压
tar -xjvf java-project.tar.bzip2

3.7 vim命令

vi / vim是Unix / Linux上最常用的文本编辑器而且功能非常强大。

  1. vim的模式
    在这里插入图片描述

  2. 底行命令
    ● :wq保存退出
    ● :q! 不保存退出
    ● :q 退出,如果内容有改变不能退出
    ● :set number 显示行号
    ● :set nonumber 隐藏行号
    ● :w filename 另存为文件
    ● :e!撤销所有操作
    ● :行号:调到指定的行

  1. 移动命令
    ● w b 下一个,上一个单词
    ● 0, $ 行首,行尾
    ● gg 第一行
    ● G 最后一行
    ● xG到x行
  1. 替换命令
    ● :1 $s/private/public/g 将第一行到追后一行的private替换为public
    ● :1 $s/public/protected/c 将第一行到追后一行的public替换为protected(有提示)
  1. 编辑命令
    ● x删除一个字符
    ● dd 删除一行
    ● yy复制一行
    ● p粘贴
    ● 输入v进入选择模式,选择内容,输入y复制,调到要黏贴的位置输入p粘贴
    ● 输入u 撤销操作
    ● 在一般模式中输入/8080查找8080,输入n查找下一个
    ● 在一般模式输入r+替换的字符,执行替换

3.8 用户管理

linux操作系统是一个多用户操作系统,它允许多用户同时登录到系统上并使用资源。系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰

3.8.1 用户管理的配置文件

● 保存用户信息的文件:/etc/passwd
● 保存密码的文件:/etc/shadow
● 保存用户组的文件:/etc/group
● 保存用户组密码的文件:/etc/gshadow
● 用户配置文件:/etc/default/useradd

3.8.2 /etc/passwd格式

用户名 用户登陆系统的用户名
密码 密码位
UID 用户标示号
GID 默认组标示号
描述信息 存放用户的描述信息
宿主目录 用户登陆系统的默认目录,默认是在/home/下
命令解析器 用户使用的Shell,默认是bash

在这里插入图片描述
用户的分类
● 超级用户:(root,UID=0)
● 普通用户:(UID在1000以上)
● 伪用户:(UID在1到999)
○ 系统和服务相关的:bin、daemon、shutdown等
○ 进程相关的:mail、news、games等
○ 伪用户不能登陆系统,而且没有宿主目录

3.8.3 /etc/shadow格式

密码配置文件

配置配置解释
用户名登录系统的用户名
密码加密密码
最后一次修改时间用户最后一次修改密码距现在的天数,从1970-1-1起
最小时间间隔两次修改密码之间的最小天数
最大时间间隔密码有效天数
警告时间从系统警告到密码失效的天数
账号闲置时间账号闲置时间
失效时间密码失效的天数

3.8.4 用户的组

● 每个用户至少属于一个用户组
● 如果创建用户,没有指定组,此用户指定跟用户名同名组
● 每个用户组可以包含多个用户
● 同一个用户组的用户享有该组共有的权限

组名 用的所在的组
组密码 密码位,一般不使用
GID 主标示号
组内用户列表 属于改组的用户列表

3.8.5 用户和组管理命令

1.用户管理命令
● useradd:添加用户
○ -u 指定组ID(uid)
○ -g 指定所属的组名(gid)
○ -G 指定多个组,用逗号“,”分开(Groups)
○ -c 用户描述(comment)
○ -e 失效时间(expire date)
● usermod:修改用户
○ -l 修改用户名 (login)usermod -l a b(b改为a)
○ -g 添加组 usermod -g sys tom
-G添加多个组 usermod -G sys,root jack
○ -G sys,root tom–L 锁定用户账号密码(Lock)
○ -U 解锁用户账号(Unlock)
● userdel:删除用户
○ -r 删除账号时同时删除目录(remove)

2.组管理命令
● 添加组:groupadd
○ -g 指定gid
● 修改组:groupmod
○ -n 更改组名(new group)
● 删除组:groupdel
● groups 显示用户所属组

3.案例
添加一个jack用户,设置它属于users组,并添加注释信息

useradd jack
usermod -g users jack
usermod -c "hr jack" jack

#等于上面三个命令,创建一个新用户"jackson",并将其添加到"users"用户组中。选项"-g users"指定了用户组为"users",而选项"-c “hr jackson”“用于设置用户的注释/说明为"hr jackson”
useradd -g users -c "hr jackson" jackson

设置密码为jack

passwd jack 

将用户"jack"添加到"sys"和"root"用户组中。这样"jack"用户将获得与这两个用户组相关联的权限和访问级别。

usermod -G sys,root jack
usermod -G sys,root jackson

将jackson从sys组中删除

gpasswd -d jackson sys

显示jack的组

groups jack

添加一个hr组

groupadd hr

修改hr组为sale组

groupmod -n sale hr

jack添加到sale组
“-a” 选项表示在现有的用户组列表中追加新的用户组,而不是覆盖。
“-G sale” 表示要将用户添加到"sale"组中。

usermod -a -G sale jack
groups jack

3.9 权限管理

3.9.1 权限表示符号

执行 ll
在这里插入图片描述
● 第1位:文件类型(d 目录,- 普通文件,l 链接文件)
● 第2-4位:所属用户权限,用u(user)
● 表示第5-7位:所属组权限,用g(group)表示
● 第8-10位:其他用户权限,用o(other)表示第
● 2-10位:表示所有的权限,用a(all)表示

三种基本权限
● r 读权限(read)4
● w 写权限(write)2
● x 执行权限 (execute)1

3.9.2 chmod命令

chmod修改文件权限命令(change mode)
● 参数:-R 下面的文件和子目录做相同权限操作(Recursive递归的)
● 两种方式
○ 例如:chmod u+x a.txt,给a.txt增加当前用户的执行权限
○ 用数字来表示权限(r=4,w=2,x=1,-=0) 例如:chmod 750 b.txt :表示b.txt的权限当前用户是rwx,当前用户的组rx,其他用户没有权限

案例:

su vagrant
#设置~/vagrant目录让其他人可以进入
chmod o+x vagrant
#这时我们切换jack,可以执行(进入)~/vagrant
su jack 
cd /home/vagrant
#设置~/vagrant的目录的其他用户有读写执行权限
su vagrant/root
chmod o+rwx ~/vagrant

#修改OAuth2Config.java的权限,让所有人有读写执行
su root/vagrant
chmod 777 ~/OAuth2Config.java
#修改OAuth2Config.java的权限,当前用户

在这里插入图片描述

#设置OAuth2Config.java文件
当前用户(u)
 - rwx
当前组(g)
 - rx
 其他用户(o)
 - 没有权限
 所有用户(a)
  xxx

#方式1
chomod u+rwx,g-w,o-rwx ~/OAuth2Config.java
#方式2
chmod 750 OAuth2Config.java

3.9.3 chown

改变文件所属用户,文件所属的组
-R:递归

chown root:users OAuth2Config.java
#使用jack查看OAuth2Config文件,因为jack属于users,所以可以查看
cat OAuth2Config.java

3.10 安装JDK在linux

1.把下载的文件上传到虚拟机

在这里插入图片描述

2.创建安装目录

一般程序安装的目录 /usr/local

mkdir /usr/local/java

3.移动安装文件到目录

mv ~/jdk-8u11-linux-x64.tar.gz /usr/local/java/

4.解压文件

tar -zxvf jdk-8u11-linux-x64.tar.gz

5.配置Java环境变量

● JAVA_HOME:java程序访问的jdk根目录,比如tomcat就要访问这个目录
● path:命令的寻址目录

whereis java #查找java在哪
vim /etc/profile
#输入G到文件末尾,增加2个环境变量
JAVA_HOME=/usr/local/java/jdk1.8.0_11
export PATH=$JAVA_HOME/bin:$PATH

#重新加载文件
source /etc/profile
java -version
#显示jdk版本...JDK1.8

6.Hello.java

新建文件Hello.java

cd ~
vim Hello.java

写入程序

public class Hello {

  public static void main(String[] args) {
     System.out.println("hello java");
  }
}

编译

javac Hello.java

运行

java Hello

3.11 安装tomact

  1. 上传到虚拟机(下载到挂载目录)
    在这里插入图片描述
  2. 创建目录(移动到java),解压
mv ~/apache-tomcat-8.5.56.tar.gz /usr/local/java
tar -zxvf apache-tomcat-8.5.56.tar.gz
  1. 运行(在根目录下)
/usr/local/java/apache-tomcat-8.5.56/bin/startup.sh #启动
#cd /usr/local/java/apache-tomcat-8.5.56/bin #进入bin目录
#./startup.sh  #运行
jps #java的一个工具,跟javac一样,查看java的进程
netstat -tunpl

netstat -tunpl 是一个用于显示系统网络连接、网络接口和网络端口状态的命令。它的各个参数的含义如下:

-t:显示 TCP 连接信息。
-u:显示 UDP 连接信息。
-n:以数字形式显示网络地址和端口。
-p:显示与连接关联的进程/程序的信息。
-l:仅显示监听状态的连接。
综合起来,netstat -tunpl 命令将显示系统中所有的 TCP 和 UDP 连接,包括监听状态的连接,并以数字形式显示网络地址和端口。它还会显示连接所关联的进程/程序的信息。

执行该命令时,你将看到类似以下输出的网络连接信息:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 5678/mysql
udp 0 0 0.0.0.0:68 0.0.0.0:* 910/dhclient
在这个示例输出中,可以看到其中包含了一些 TCP 和 UDP 连接的信息,例如本地地址、远程地址、状态和相关进程/程序的信息。

注意:以上示例中的端口和进程ID仅作为示意,实际输出中会显示具体的端口号和进程/程序名称。

  1. 测试
    在宿主机浏览器访问http://192.168.56.71:8080/index.jsp

测试修改/usr/local/java/apache-tomcat-8.5.56/webapp/ROOT/index.jsp(修改网页内容,刷新看是否修改成功)

vim /usr/local/java/apache-tomcat-8.5.56/webapp/ROOT/index.jsp

使用curl命令打开(同上)

curl http://localhost:8080/index.jsp

3.12 安装Mysql

  1. 下载MySQL
    下载地址 https://downloads.mysql.com/archives/community/
    在这里插入图片描述
  2. 安装
    拷贝mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz到/root目录下
cd ~
tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz

解压完成后重命名

mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql-5.7.28
mv mysql-5.7.28 /usr/local/

检查mysql组和用户是否存在,如果没有则创建

cat /etc/group|grep mysql
groupadd mysql
useradd -r -g mysql mysql  #useradd -r参数表示mysql用户是系统用户,不可用于登录系统

安装数据库

创建data目录
cd /usr/local/mysql-5.7.28
mkdir data

将/usr/local/mysql-5.7.28的所有者及所属组改为mysql

chown -R mysql.mysql /usr/local/mysql-5.7.28

在/usr/local/mysql-5.7.28/support-files目录下创建my_default.cnf

cd /usr/local/mysql-5.7.28/support-files
vim my_default.cnf

具体配置内容如下:

[mysqld]

#设置mysql的安装目录
basedir =/usr/local/mysql-5.7.28
#设置mysql数据库的数据存放目录
datadir = /usr/local/mysql-5.7.28/data
#设置端口
port = 3306

socket = /tmp/mysql.sock
#设置字符集
character-set-server=utf8
#日志存放目录
log-error = /usr/local/mysql-5.7.28/data/mysqld.log
pid-file = /usr/local/mysql-5.7.28/data/mysqld.pid
#允许时间类型的数据为零(去掉NO_ZERO_IN_DATE,NO_ZERO_DATE)
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

拷贝配置文件,是否覆盖,是

cp my_default.cnf /etc/my.cnf

初始化mysql

cd /usr/local/mysql-5.7.28/
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql-5.7.28/ --datadir=/usr/local/mysql-5.7.28/data/

如果报错:./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or 就安装libaio,如果没有则跳过

yum install libaio

初始化完成之后查看日志

cat /usr/local/mysql-5.7.28/data/mysqld.log

蓝框里的是临时密码
在这里插入图片描述

把启动脚本放到开机初始化目录

cp support-files/mysql.server /etc/init.d/mysql

启动mysql

service mysql start

进入mysql并更改密码

cd /usr/local/mysql-5.7.28
./bin/mysql -u root -p 上面生成的初始化密码
mysql> set password=password('123456');
mysql> grant all privileges on *.* to root@'%' identified by '123456';
mysql> flush privileges;

添加远程访问权限

mysql> use mysql;
mysql> update user set host='%' where user = 'root';
mysql> flush privileges;

如果更改时报错:ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’,就先查询一下是否已更改,最后执行刷新。
重启mysql生效

service mysql restart
  1. 常用命令
    ● 启动service mysql start
    ● 关闭service mysql stop
    ● 重启service mysql restart
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值