1 Linux基础
1.1 Linux简介
Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机
1.2 应用场景
- 桌面应用
linux在桌面场景下应用不多,这个场景下一般还是使用windows- 服务端(后端)
电商,门户网站后端服务,一般采用linux作为操作系统,java,c++,python,go,运行和部署在linux服务- 嵌入式
linux最小和最核心的版本只有几百K,智能物联设备方便嵌入式开发- 云计算
运维和部署场景,使用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安装的虚拟机
- box和虚拟机的关系
● 类->对象
● 镜像->容器
● box->虚拟机
● 铸造模型->产品
- 测试不同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
- 安装命令
yum install vim -y
- 打包,生成自定制的box
#关闭虚拟机
vagrant halt s1
#打包当前虚拟机
vagrant package --base s1 --output centos_v2.box
- 删除现有虚拟机
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)
- 修改Vagrantfile,设置box使用centos_v2
- 使用已经安装了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 启动和关闭虚拟机命令
- 启动虚拟机
#启动全部虚拟机
vagrant up
#启动单个虚拟机s1
vagrant up s1
- 关闭虚拟机
#关闭所有虚拟机
vagrant halt
#关闭一个虚拟机s1
vagrant halt s1
3.4 文件或目录常用命令
- 打印命令
echo hello linux
echo hello v3 > v3.txt #覆盖
echo hello v3 >> v3.txt #追加
- ls命令
ls -la #详细查看,所有文件和目录
-l (long)详细列表
-a (all) 显示隐藏文件、特殊目录.和..
ll = ls -l
- man 命令 查看命令的帮助
man ls
#ctrl+f 下一页
#ctrl+b 上一页
#:q退出
- 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]#
- pwd 显示当前工作目录(print working directory)
[root@s1 ~]# pwd
/root
- su 切换用户
[vagrant@s1 /]$ cd /root/
-bash: cd: /root/: Permission denied #使用vagrant不能访问/root
[vagrant@s1 /]$ su root
Password:
[root@s1 /]# cd /root/
- 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]$
- tree 以树列表目录
su root #切换管理员
yum install -y tree
[root@s1 vagrant]# su vagrant
[vagrant@s1 ~]$ tree java-project
java-project
├── resources
│ └── db
└── src
- 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]$
- 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
- 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
- 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
- more,less 分页显示文本文件内容
more OAuth2Config.java
less OAuth2Config.java
- head -n 显示前几行内容
- 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
- wc 统计文本的行数、字数、字符数
-m 统计文本字符数
-w 统计文本字数
-l 统计文本行数
echo "hello java welcome to beijing" > a.txt
wc -w -l -m a.txt
- 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
- grep 查找文本 ,在指定的文本文件中查找指定的字符串
-n 显示行数
-i 不区分大小写查找
grep class OAuth2Config.java -n -i -o
- ln 创建软连接
#ln -s 目标地址 文件名
ln -s /home/vagrant/java-project/src/main/java/HelloWorld.java app
echo "hello spring" >> app #通过软连接添加内容
cat app #通过软连接查看文件内容
3.5 系统命令
- 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
- free
显示当前内存和交换空间的使用情况
[root@c1 jack]# free
total used free shared buff/cache available
Mem: 8011464 121356 7671900 8508 218208 7693036
Swap: 1023996 0 1023996
- 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
- ifconfig
网卡网络配置详解- ping 测试网路连通性
- top 显示当前系统中耗费最多资源的进程(实时)
- ps显示瞬间的进程状态(快照)
● -e /-A 显示所有进程,环境变量
● -f 全格式
● -a 显示所有用户的所有进程(包括其它用户)
● -u 按用户名和启动时间的顺序来显示进程
● -x 显示无控制终端的进程
ps -aux
#管道 命令1 | 命令2 把命令1的结果给命令2作为参数
cat OAuth2Config.java | grep class
ps -aux | grep tail
- kill根据进程ID(pid)杀死进程
kill -9 3860
3.6 打包和压缩命令
以操作OAuth2Config.java为例
- gzip 把文件和目录压缩成gz格式
gzip OAuth2Config.java #压缩
gzip -d OAuth2Config.java.gz #解压
- bzip2 以bzip2格式压缩和解压
bzip2 OAuth2Config.java
bzip2 OAuth2Config.java.bz2 -d
- 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上最常用的文本编辑器而且功能非常强大。
vim的模式
底行命令
● :wq保存退出
● :q! 不保存退出
● :q 退出,如果内容有改变不能退出
● :set number 显示行号
● :set nonumber 隐藏行号
● :w filename 另存为文件
● :e!撤销所有操作
● :行号:调到指定的行
- 移动命令
● w b 下一个,上一个单词
● 0, $ 行首,行尾
● gg 第一行
● G 最后一行
● xG到x行
- 替换命令
● :1 $s/private/public/g 将第一行到追后一行的private替换为public
● :1 $s/public/protected/c 将第一行到追后一行的public替换为protected(有提示)
- 编辑命令
● 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
- 上传到虚拟机(下载到挂载目录)
- 创建目录(移动到java),解压
mv ~/apache-tomcat-8.5.56.tar.gz /usr/local/java
tar -zxvf apache-tomcat-8.5.56.tar.gz
- 运行(在根目录下)
/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仅作为示意,实际输出中会显示具体的端口号和进程/程序名称。
- 测试
在宿主机浏览器访问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
- 下载MySQL
下载地址 https://downloads.mysql.com/archives/community/
- 安装
拷贝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
- 常用命令
● 启动service mysql start
● 关闭service mysql stop
● 重启service mysql restart