Linux

简介

Unix操作系统 多用户 多任务 支持多线程 多cpu的开源,免费,安全,高效,稳定的操作系统

处理高并发强悍

很多企业级的项目都部署到Linux/unix服务器运行

能运行主要的UNIX工具软件 应用程序和网络协议 Linux继承了Unix以网络为核心的思想

image-20200629134653816

Kali linux:安全渗透测试使用

服务器都是使用命令行的

Linux和Unix的关系

image-20210323225745710

Linux和Windows整理

image-20210323225848590

Linux应用领域

个人桌面应用

服务器领域

linux在服务器领域是最强的

嵌入式领域

安装

之前好奇自己装过各种linux双系统 包括manjaro,deepin等,最终各种由于出现的网络过慢,换了镜像也没有效果问题删除了)以后再把一些教程同步过来 这里暂时只使用虚拟机

虚拟机使用vmware挺方便的 有兴趣的还可以装mac

在vmware 虚拟机上安装centOS 安装操作系统和软件是一样的

linux磁盘分区的时候需要注意分区名

使用xshell ,xftp 在官网可以使用个人免费版

网络链接

  1. 桥连接。 Linux可以和其它的系统通信。但是可能造成ip冲突
  2. NAT:网络地址转换方式: linux可以访问外网,不会造成ip冲突
  3. 主机模式: 你的linux是一个独立的主机,不能访问外网

基本命令

一般来说,用户登录的方式有三种 最高权限是root 可以操作一切

  • 命令行
  • ssh
  • 图形界面登录

解压: tar -zxvf

删除: rm -rf

关机: shutdown

  • -h 10 10分钟后关机

重启: reboot

halt: 关闭系统

同步到硬盘: sync

绝对路径 相对路径:

ls: 列出目录 可能是最常被使用的

  • -a :all 查看全部文件 包括隐藏文件
  • -l : 列出所有的 文件

cd: 切换目录名 相对路径 绝对路径

mkdir: 创建文件夹

mkdirs -p: 创建层级目录

cd ~:回到当前的用户目录

pwd: 显示当前所在目录的文件

rmdir: 删除目录 不能删除不为空的目录 如果文件下有文件 先删里面

rmdir -p: 删除多级目录

cp: 复制文件 cp 原来的地方 新地方

rm : 移除文件或者目录

  • -f 忽略不存在的文件 强制删除
  • -r 递归删除目录
  • -i 互动 删除询问是否删除

rm -rf : 极其危险 删库跑路

mv : 移动文件 重命名文件

  • -f 强制移动
  • -u 只替换已经更新过的文件

文件基本属性

  • d:目录

  • -: 文件

  • l: 表示为连接文档

  • rwx 可读 可写 可执行

    文件类型 属主属性 属主权限 其他用户权限
    0 123 456 789
    d rwx r-x r-x
    目录文件 读写执行 读写执行 读写执行

修改文件属性

修改文件属组

1
2
chgrp [-R] 属组名 文件名
#-R 递归更改文件属组,就是在更改某个目录文件的属组时,该目录下所有的文件属组都会更改

更改文件属主,也可以更改文件属组

1
2
chown [-R] 属主名 文件名
chown [-R] 属主名: 属组名 文件名

更改文件9个属性

1
chmod [-R] xyz 文件或目录

Linux文件属性有两种设置方法,一种是数字,一种是符号

Linux文件的基本权限就有9个,分别是owner/group/others三种身份各有自己的read/write/execute权限

上面提到的数据: 文件的权限字符为: [-rwxrwxrwx],三个三个一组 可以使用数字代表权限

1
r:4 w:2 x:1

每种身份的个子三个权限需要累加 例如

  • owner = rwx = 7
  • group = rwx = 7
  • others = — = 0
1
chmod 770 <filename>

可读可写不可执行 rw- 6

可读可写可执行 chomd 777 文件赋予所有用户 可读可写可执行

文件内容查看

Linux系统中使用以下命令来查看文件的内容

  • cat 由第一行开始显示文件内容
  • tac 由最后一行开始显示文件内容
  • nl 显示的时候 顺道输出行号
  • more 一页一页显示文件内容
  • head 只看头几行
  • tail 只看末尾几行

可以使用 man [命令] 来查看每个命令的使用文档,如 : man cp

网络配置目录: cd/etc/sysconfig/network-scripts

查看网络配置 ifconfig (windows cmd 是ipconfig 查看虚拟机和windows ip地址的时候会用到)

linux 目录结构

一切皆文件

image-20200629153141330

以下是对目录的解释

  • /bin: bin是Binary的缩写,这个目录存放着最经常使用的命令
  • /boot: 这里存放的是启动linux时使用的一些核心文件,包括一些连接文件以及镜像文件
  • /dev: dev是Device的缩写,存放的是Linux的外部设备.在Linux中访问设备的方式和访问文件的方式是相同的
  • /etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录
  • /home: 用户的主目录, 在linux中,每个用户都有一个自己的目录.一般该目录名是以用户的账号命名的
  • /lib: 这个目录里存放着系统最基本的动态链接共享库.其作用类似于Windows里的DLL文件
  • /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
  • /media: linux系统会自动识别一些设备.如U盘光驱,识别后,Linux可以把识别的设备挂载到这个目录下
  • /mnt: 系统提供该目录是为了用户临时挂载别的文件系统的,我们可以将光挂载在/mnt上,然后进入该目录就可以查看光驱里的内容
  • /opt: 这是给主机额外安装软件所摆放的目录.比如你安装一个Oracle数据库就可以放在这个目录下 默认是空的
  • /proc: 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息
  • /root: 该目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息
  • /sbin:s就是Super User的意思.这里存放的是系统管理员使用的系统管理程序
  • /srv: 该目录存放一些服务启动之后需要提取的数据
  • /sys: 这是linux2.6内核的一个很大的变化.该目录下安装了2.6内核中芯出现的一个文件系统sysfs
  • /tmp: 这个目录是用来存放一些临时文件的
  • /usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录
  • /usr/bin: 系统用户使用的应用程序

拓展:Linux链接的概念 (了解即可)

Linux的链接分为两种:硬链接 软链接

硬链接A–B 假设B是A的硬链接 那么他们两个指向了同一个文件 允许一个文件拥有多个路径 用户可以通过这种机制建立硬链接到一些重要文件上 防止误删

软链接 类似于window下的快捷方式

创建链接 使用 ln命令!

touch 命令创建文件

image-20200629165431157

echo 输入字符串

VIM使用

在不同linux系统下可能会有内置其它的编辑器 manjaro下有nano kate等 使用各不一样 看自己喜好

简介:

Vim是Linux上常用编辑器,在Windows上可以使用记事本来编辑文件内容,Vim也类似于记事本,但是Vim有更加强大的功能。

在Vim中,有命令模式输入模式末行模式三种模式。按 Esc 进入命令模式, 输入 Shift + ; 进入末行模式,按i进入输入模式。

image-20200629170652152

img

img

img

命令模式操作

(一)进入

  1. vim filename

(二)退出

  1. :wq 末行模式,保存退出
  2. :q 末行模式,直接退出
  3. :q! 末行模式,不保存,强制退出

(三)输入模式(在命令模式下操作)

  1. i 从光标所在位置前面开始插入
  2. I 在当前行首插入
  3. a 从光标所在位置后面开始输入
  4. A 在当前行尾插入
  5. o 在光标所在行下方新增一行并进入输入模式
  6. O 在当前上面一行插入

(四)移动光标(在命令模式下操作)

  1. gg 到文件第一行
  2. G 到文件最后一行 (Shift + g)
  3. ^ 非空格行首
  4. 0 行首(数字0)
  5. $ 行尾

(五)复制和粘贴(在命令模式下操作)

  1. yy 复制整行内容 如3yy就是复制3行内容
  2. yw 复制当前光标到单词尾内容
  3. p 粘贴

(六)删除

  1. dd 删除光标所在行
  2. dw 删除一个单词
  3. x 删除光标所在字符
  4. u 撤销上一次操作
  5. s 替换
  6. ctrl + r 撤销 u

(七)块操作

  1. v 块选择
  2. ctrl + v 列块选择

(八)查找

  1. / 命令模式下输入:/ 向前搜索
  2. ? 命令模式下输入:? 向后搜索
  3. n 向下查找
  4. N 向上查找

输入模式操作

  • 字符按键以及shift组合: 输入字符

  • Enter: 换行

  • BACK SPACE: 删除光标前一个字符

  • DEL: 删除光标后一个字符

  • 方向键: 移动光标

  • HOME/END: 移动光标到行首/行尾

  • INSERT: 切换输入模式 (输入/替换)

  • ESC: 切换到命令模式

Vim 按键说明

除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用。

第一部分:一般模式可用的光标移动、复制粘贴、搜索替换等

移动光标的方法
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n< space> 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。
0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个档案的第一行,相当于 1G 啊!(常用)
n< Enter> n 为数字。光标向下移动 n 行(常用)
搜索替换
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可!(常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
删除、复制与粘贴
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd 删除游标所在的那一整行(常用)
ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行!举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢?那么原本的第 20 行会被推到变成 30 行。(常用)
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)

第二部分:一般模式切换到编辑模式的可用的按钮说明

进入输入或取代的编辑模式
i, I 进入输入模式(Insert mode):i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。(常用)
a, A 进入输入模式(Insert mode):a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
o, O 进入输入模式(Insert mode):这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』;O 为在目前光标所在处的上一行输入新的一行!(常用)
r, R 进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
[Esc] 退出编辑模式,回到一般模式中(常用)

第三部分:一般模式切换到指令行模式的可用的按钮说明

指令行的储存、离开等指令
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中看 /home 底下以 ls 输出的档案信息!
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与 set nu 相反,为取消行号!

软件安装方式

Linux软件有好多安装方式…具体要看下载的是什么安装包或者在不同发行版本下的安装命令 这里举例三种

Jdk安装(rpm安装)

1、rpm下载地址http://www.oracle.com/technetwork/java/javase/downloads/index.html

2、如果有安装openjdk 则卸载

1
2
3
4
5
6
7
8
9
10
11
[root@kuangshen ~]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
# 检查
[root@kuangshen ~]# rpm -qa|grep jdk
jdk1.8.0_121-1.8.0_121-fcs.x86_64
# 卸载 -e --nodeps 强制删除
[root@kuangshen ~]# rpm -e --nodeps jdk1.8.0_121-1.8.0_121-fcs.x86_64
[root@kuangshen ~]# java -version
-bash: /usr/bin/java: No such file or directory # OK

3、安装JDK

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 安装java rpm
[root@kuangshen kuangshen]# rpm -ivh jdk-8u221-linux-x64.rpm

# 安装完成后配置环境变量 文件:/etc/profile
JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
# 保存退出

# 让新增的环境变量生效!
source /etc/profile

# 测试 java -version
[root@kuangshen java]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

Tomcat安装(解压缩安装)

1、安装好了Java环境后我们可以测试下Tomcat!准备好Tomcat的安装包!

2、将文件移动到/usr/tomcat/下,并解压!

1
2
3
4
5
[root@kuangshen kuangshen]# mv apache-tomcat-9.0.22.tar.gz /usr
[root@kuangshen kuangshen]# cd /usr
[root@kuangshen usr]# ls
apache-tomcat-9.0.22.tar.gz
[root@kuangshen usr]# tar -zxvf apache-tomcat-9.0.22.tar.gz # 解压

3、运行Tomcat,进入bin目录,和我们以前在Windows下看的都是一样的

1
2
3
4
# 执行:startup.sh -->启动tomcat
# 执行:shutdown.sh -->关闭tomcat
./startup.sh
./shutdown.sh

4、确保Linux的防火墙端口是开启的,如果是阿里云,需要保证阿里云的安全组策略是开放的!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看firewall服务状态
systemctl status firewalld

# 开启、重启、关闭、firewalld.service服务
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop

# 查看防火墙规则
firewall-cmd --list-all # 查看全部信息
firewall-cmd --list-ports # 只看端口信息

# 开启端口
开端口命令:firewall-cmd --zone=public --add-port=80/tcp --permanent
重启防火墙:systemctl restart firewalld.service

命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效

安装Docker(yum安装)

基于 CentOS 7 安装

  1. 官网安装参考手册:https://docs.docker.com/install/linux/docker-ce/centos/

  2. 确定你是CentOS7及以上版本

    1
    2
    [root@192 Desktop]# cat /etc/redhat-release
    CentOS Linux release 7.2.1511 (Core)
  3. yum安装gcc相关(需要确保 虚拟机可以上外网 )

    1
    2
    yum -y install gcc
    yum -y install gcc-c++
  4. 卸载旧版本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    yum -y remove docker docker-common docker-selinux docker-engine
    # 官网版本
    yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
  5. 安装需要的软件包

    1
    yum install -y yum-utils device-mapper-persistent-data lvm2
  6. 设置stable镜像仓库

    1
    2
    3
    4
    5
    6
    7
    8
    # 错误
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    ## 报错
    [Errno 14] curl#35 - TCP connection reset by peer
    [Errno 12] curl#35 - Timeout

    # 正确推荐使用国内的
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  7. 更新yum软件包索引

    1
    yum makecache fast
  8. 安装Docker CE

    1
    yum -y install docker-ce docker-ce-cli containerd.io
  9. 启动docker

    1
    systemctl start docker
  10. 测试

    1
    2
    3
    4
    5
    docker version

    docker run hello-world

    docker images

资料参考: 狂神说java