1.Linux简介
Linux是一种自由和开放源代码的操作系统。它最初由芬兰的计算机科学家Linus Torvalds于1991年创造,并且在全球范围内得到了广泛的采用和发展。
Linux操作系统是基于Unix操作系统的设计原理和功能。它具有稳定性、安全性和高度可定制的特性,适用于各种不同的设备和平台,如个人计算机、服务器、嵌入式系统和移动设备。
Linux在开源社区中得到了广泛的支持和贡献。使用者可以免费获取Linux操作系统的源代码,并根据自己的需要进行定制和修改。这也使得Linux成为一个高度灵活和可扩展的操作系统。
Linux操作系统拥有许多不同的发行版,如Ubuntu、Debian、Fedora、CentOS等。每个发行版在核心Linux系统之上添加了自己的软件包和配置,以满足特定用户的需求。
由于其稳定性和安全性,Linux在服务器领域得到了广泛应用。许多大型互联网公司和企业都使用Linux作为他们的服务器操作系统。此外,Linux还广泛用于科学研究、教育和个人计算机领域。
总的来说,Linux是一个强大、自由和开放的操作系统,它具有广阔的应用领域和强大的社区支持,成为计算机科学领域中重要的一部分。
1.1应用场景分析
- 桌面应用
linux在桌面场景下应用不多,这个场景下一般还是使用windows - 服务端(后端)
电商,门户网站后端服务,一般采用linux作为操作系统,java,c++,python,go,运行和部署在linux服务 - 嵌入式
linux最小和最核心的版本只有几百K,智能物联设备方便嵌入式开发 - 云计算
运维和部署场景,使用linux
2.vagrant 和 VirtualBox
2.1vagrant
Vagrant是一个比较流行的虚拟机管理软件,使用Vagrant 可以让我们用命令直接从云上下载虚拟机的镜像,然后进行创建和管理等,vagrant集成了主流的虚拟机管理工具vmvare 和 virtualbox,默认使用virtualbox
vagrant 的精髓在一个 Vagrantfile 里面,和 docker 的 Dockerfile 功能上一样。我们只需要把需要安装部署的步骤写在 Vagrantfile 里面,便可以实现轻松部署。vagrant 还支持把当前系统做成一个.box 后缀命名的镜像,类似 docker 的 image,可轻松实现环境的移植。
vagrant 可以把配置好的环境打包成一个box,分享给其他人直接使用。
在容器流行之前,Vagrant 就是用来编排虚机和自动部署开发环境的,有了 Docker/Kubernetes 之后,直接用容器来编排应用确实更简单。但是还有一些工作,例如容器平台自身的安装,多节点集群的部署测试等,更方便用虚拟机解决。
2.2virtualbox
VirtualBox 是一款开源的虚拟机软件,和VMWare是同类型的软件,用于在当前的电脑上构建一台虚拟机,在这台虚拟机上可以安装系统和软件。
2.3 为什么使用vagrant
1.面临的一个大问题是,环境不同意,最常见的就是:在我机器上没问题,怎么在你这就不能跑了。可能配置不一样,或者缺少某个依赖。多人合作或者跨平台开发很可能遇到这些问题。
2.那么有没有办法统一开发环境呢?vagrant就是做这个的,配置好了开发环境,打包到一个.box 文件(或者直接使用别人打包好到.box文件),这就是一个虚拟机,下次换环境的时候,直接使用这个虚拟机开发就可以了。这就是vagrant的方便之处。所以vagrant 依赖于virtualbox 或者 vmware等虚拟机软件。
3.用vagrant管理的时候,还可以把对应的配置share给测试,这样别人帮你做测试的时候就能省掉很多环境搭建的工作,而且不用担心测试环境跟你开发环境有差别。
virtualBox(本身也可以创建虚拟机,只是相对麻烦)会开放一个创建虚拟机的接口,Vagrant会利用这个接口创建虚拟机,并且通过Vagrant来管理,配置和自动安装虚拟机。
2.4 vagrant实战
1.安装VirtualBox
2.安装vagrant
3.下载box
4.将下载的box加入到vagrant中
5.创建一个目录,初始化,配置vagrantfile文件和bootstrap.sh
6.开始安装虚拟机
2.4.1 VirtualBox 安装
VirtualBox 下载地址https://www.virtualbox.org/wiki/Downloads
- 安装目录
推荐安装到d:\java… - 配置 虚拟机安装位置
2.4.2vagrant安装
https://www.vagrantup.com/downloads下载最新版Vagrant,注意Vagrant没有图形界面,所以安装后也没有桌面快捷方式。
- 安装
推荐安装目录d:\java… - 配置
vagrant的box默认下载用户的宿主目录\vagrant_box
2.4.3 安装centos7虚拟机
2.4.3.1 下载box
可以在 http://www.vagrantbox.es/ 这里下载更多不同系统甚至是已经配置好环境直接可以用的box,虽然可以直接在Vagrant直接使用网址,由Vagrant自动下载安装,但是考虑到网络情况,还是建议自行先下载好。
下载box 名为 centos_v1.box
2.4.3.2 vagrantfile
vagrant 的精髓在一个 Vagrantfile 里面,和 docker 的 Dockerfile
功能上一样。我们只需要把需要安装部署的步骤写在 Vagrantfile 里面,便可以实现轻松部署。
1.随便创建一个文件 f:\java\virtual\s13
在目录中执行
vagrant init centos
产生配置文件vagrantfile
2.修改配置文件vagrantfile
# -*- 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
解释
3.配置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 s2
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
解释
2.4.3.3 box准备
1.查看本地box
vagrant box list
2.添加 box
vagrant box add centos_v1 ./centos_v1.box
前面是添加后的名字,后面是下载的box名字
3.添加完之后查看本地box
F:\java\virtual\s13>vagrant box list
centos-travel (virtualbox, 0)
centos_v1 (virtualbox, 0)
4.删除box
F:\java\virtual\s13>vagrant box remove centos-travel
Removing box 'centos-travel' (v0) with provider 'virtualbox'..
2.4.3.4
1.安装虚拟机
#必须在vagrantfile所在的目录安装
vagrant up
2.4.3.5安装可视化软件
安装一个可视化软件 MobaXterm1_CHS1.exe 进行连接
连接成功后
2.4.4 常用命令
启动
#启动Vagrantfile(s1,s2,s3)配置所有虚拟
vagrant up
#启动具体一个虚拟机
vagrant up s1
关闭
vagrant halt #关闭所有
vagrant halt s1
删除
vagrant destroy # 删除所有的虚拟机
vagrant destroy s1 #删除s1
2.4.5 自定义box的打包和使用
把已安装的虚拟机打包成一个自定义的box,分享管理我们的虚拟机
1.打包虚拟机,产生一个自定制的box
#关闭虚拟机
vagrant halt s1
#打包名为s1的虚拟机,后面为打包后的box名字
vagrant package --base s1 --output centos_v2.box
2.把centos_v2添加到vagrant中
#列表
F:\java\virtual\s13>vagrant box list
centos_v1 (virtualbox, 0)
#添加
F:\java\virtual\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://F:/java/virtual/s13/centos_v2.box
box:
==> box: Successfully added box 'centos_v2' (v0) for 'virtualbox'!
#列表
F:\java\virtual\s13>vagrant box list
centos_v1 (virtualbox, 0)
centos_v2 (virtualbox, 0)
3.修改Vagrantfile,设置box使用centos_v2
4.使用虚拟机
vagrant up
2.4.6 命令和配置文件
详细的命令文档参考官网
https://developer.hashicorp.com/vagrant/docs/cli/package
3. Linux常用命令
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默认的挂载目录
可以和宿主机共享文件
在挂载目录下创建一个文件夹,在虚拟机中也可以看到
挂载目录
3.3命令
3.3.1常用命令
1.打印命令
echo hello
2.ls命令
ls -la #详细查看,所有文件和目录
● -l (long)详细列表
● -a (all) 显示隐藏文件、特殊目录.和…
● -t (time)显示时间
3.man命令
man ls
● ctrl+f:下一页
● ctrl+b:上一页
● :q退出\
3.1.2 文件或目录常用命令
- 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]#
2.pwd
显示当前工作目录
[root@s1 vagrant]# cd ~
[root@s1 ~]# ls
anaconda-ks.cfg post_install.log v3.txt
[root@s1 ~]# pwd
/root
3.su
切换用户
[vagrant@s1 /]$ cd /root/
-bash: cd: /root/: Permission denied #使用vagrant不能访问/root
[vagrant@s1 /]$ su root
Password:
[root@s1 /]# cd /root/
普通股用户切换到root用户,需要密码
4.mkdir
- 创建目录
参数:-p 创建的文件父目录不存在的情况下先生成父目录
[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]$
5.tree
以树列表生成目录
需要下载
su root #切换管理员
yum install -y tree
[root@s1 vagrant]# su vagrant
[vagrant@s1 ~]$ tree java-project
java-project
├── resources
│ └── db
└── src
6.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]$
7.cp
拷贝文件、目录
参数:-r 递归拷贝 先拷贝子文件,再拷贝父文件
# cp [目标文件] [目标地址]
[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
-r 递归拷贝
[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
8.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
9.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
# 修改文件名
[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
10.cat
显示文本文件内容
# cat [文件名]
cat OAuth2Config.java
cat a.txt > b.txt #把a.txt内容覆盖到b.txt
cat a.txt >> b.txt #吧a.txt追加到b.txt
- more 、less
分页显示文件内容。不同的是 less看完文件后,需要:q退出。而more是直接退出。
more OAuth2Config.java
less OAuth2Config.java
12.head
参数:-n [行数] 显示前几行内容
head -n 10 OAuth2Config.java
13.tail
参数:-n 显示后几行
-f 即使读取,页面不退出,更新信息后会立即显示
tail -n 10 OAuth2Config.java
14.wc
统计
参数:-m 统计文本字节数
-w 统计文本字数
-l 统计文本行数
echo "hello java welcome to beijing" > a.txt
wc -w -l -m a.txt
15.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
16.grep
查找文本、通道
参数:-n 显示行数
-i 不区分大小写
grep class OAuth2Config.java -n -i -o
17.In 创建软连接
ln -s 目标地址 文件名
ln -s /home/vagrant/java-project/src/main/java/HelloWorld.java app
echo "hello spring" >> app #通过软连接添加内容
cat app #通过软连接查看文件内容