个人主页:Hello Code.
本文专栏:《Java WEB从入门到实战》
Java WEB完整内容请点击前往Java WEB从入门到实战 查看
如有问题,欢迎指正,一起学习~~
操作系统:管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。
主流操作系统
Linux发展历程
Linux特点
Linux与其它操作系统的区别
Windows更适用于家庭个人使用
Linux更适用于企业服务器使用
Linux发行商和常见发行版
先安装虚拟机,再安装Centos
Vmware简介
Vmware下载:https://www.vmware.com/cn.html
CentOS镜像下载:https://www.centos.org/download/
高速下载地址
简介:SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录Unix或Linux服务器主机的软件。
cd /
ls -l
克隆:将原系统完完全全的拷贝一份,原系统丢失后克隆的系统还能正常使用
快照:记录系统当前状态,并不会把系统完整拷贝
克隆和拍摄快照时都需要关闭虚拟机
与用户相关的命令,必须在管理员权限下才能执行
命令:
su root
useradd (选项) 用户名
passwd (选项) 用户名
在root权限下切换其它用户可直接切换,无需输入密码
usermod 选项 用户名
userdel (选项) 用户名
将用户分成小组,方便对用户的管理
groupadd (选项) 用户组名
groupmod (选项) 用户组名
groups 用户名
groupdel 用户组名
gpasswd (可选项) 组名
gpasswd是Linux下的管理工具,用于将一个用户添加到组或者从组中删除
date [参数选项]
-d "字符串"
:显示字符串所指的日期与时间。字符串前后必须加上双引号-s "字符串"
:根据字符串来设置日期与时间。字符串前后必须加上双引号-u
:显示GMT(北京时间为CST)--help
:在线帮助--version
:显示版本信息logname
su 用户名
id 用户名
sudo [参数选项]
实时显示process的动态:top
pid:每个进程的id
user:进程是属于哪个用户
PR:进程的优先级
NI:进程优先级(负数为高优先级,正数为低优先级)
VIRT:当前进程占用虚拟内存的总量
S:当前进程的状态
top -c
top -p PID
q
查看当前正在运行的进程信息:ps
ps -A
ps -ef
ps -u 用户名
中断执行中的程序:kill PID
kill 1111
表示杀死PID为1111的进程kill -9 PID
:强制杀死指定PID的进程killall -u 用户名
:杀死这个用户中的所有进程kill -9 $(ps -ef|grep 用户名)
:杀死指定用户的所有进程kill -l
:查看对应编号关机命令:shutdown
(延迟关机)
shutdown -h now
:立即关机shutdown +1 "1分钟以后关机"
:延迟一分钟以后关机,并给出警告信息shutdown -r +1 "准备重启了"
:延迟一分钟以后重启,并给出警告信息shutdown -c
:取消关机命令重启命令:reboot
(立即重启)
显示当前登录系统的用户:who
who -H
:显示明细(标题)信息校正服务器时间、时区:timedatectl
项目 | 说明 |
---|---|
时区 | 因时区不同显示的时间不同,牵扯到夏令时和调整等问题,date命令可查看 |
系统时钟:System Clock | Linux OS的时间,date命令可查看 |
硬件时钟:RTC:Real Time Clock | 主板上由电池供电的BIOS时间,hwclock -r可查看 |
NTP:Network Time Protocol | 本机时间和实际的时间之间的经常会有差别,一般使用NTP服务器进行时间校准 |
timedatectl status
:显示系统的当前时间和日期timedatectl list-timezones
:查看所有可用的时区timedatectl set-timezone "Asia/Shanghai"
:设置本地时区timedatectl set-ntp false
:禁用时间同步timedatectl set-time "2022-02-22 20:20:00"
:设置时间timedatectl set-ntp true
:启用时间同步清除屏幕:clear
常见命令 | 作用 |
---|---|
ls | 列出目录 |
cd | 切换目录 |
pwd | 显示目前的目录 |
mkdir | 创建新目录 |
rmdir | 删除空目录 |
cp | 复制文件或目录 |
rm | 删除文件或目录 |
mv | 移动文件或目录 修改文件或者目录的名字 |
ls命令相当于在Windows系统中打开文件夹,看到的目录以及文件的明细。
ls [参数选项] 目录名称
-a
:显示所有文件或目录(包含隐藏)-d
:仅列出目录本身,而不是列出目录内的文件数据(常用)-l
:长数据串列出,包含文件的属性与权限等等数据(常用)
ls
:显示不隐藏的文件与文件夹
ls -l
:显示不隐藏的文件与文件夹的详细信息
ls -al
:显示所有文件与文件夹的详细信息
pwd -P
:查看当前所在目录cd [相对路径或绝对路径]
:切换目录
cd ..
:返回上一级目录mkdir
mkdir 文件夹的名字
:创建单级目录mkdir -p aaa/bbb
rmdir
rmdir 文件夹名字
:删除空目录rmdir -p aaa/bbb
:删除多级目录(先删bbb,如果删完aaa也为空,则aaa也一起删除)rm
rm 文件路径
:删除文件rm -r 目录路径
:删除目录和目录里面所有的内容(单级目录或多级目录都行)touch 文件名.后缀名
:创建一个文件cp
cp 数据源 目的地
:文件复制(仅文件)cp -r aaa/* ccc
:将aaa目录中的所有文件及目录拷贝到ccc中(*
代指所有)mv
mv 数据源 目的地
:改名(数据源和目的地相同)、移动文件或文件夹mv 文件名 文件名
:将源文件名改为目标文件名mv 目录名 目录名
:目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名文件权限(共10位)
chgrp命令(change group)
chgrp [选项参数] [所属群组] [文件或目录...]
:更改所属组chgrp root aaa
:将aaa文件夹所属组更改为rootchgrp -v root aaa
:将aaa的属组改为root(-v会多一句提示语)chown命令
chown 属主名 文件名
:更改属主chown [参数选项] 属主名:属组名 文件名
:更改属主和属组chmod命令
chmod [参数选项] 数字权限 文件或目录
chmod u=rwx,g=rx,o=r a.txt
修改方式:
设置时会把三个数字加在一起设置
例如:rwx则为7
需求:一个公司的开发团队有三个用户:Java、erlang、golang
有一个文件目录tmp/work供他们开发,如何实现让这三个用户都对其具有写权限
思路
touch [参数选项] 文件名
如果文件不存在就创建文件,如果存在就修改时间属性
touch a{1..10}.txt
:创建a1.txt一直到a10.txt共10个文件(批量创建空文件)stat a.txt
:查看文件的详细信息简单来说:
vi是老式的文字处理器,不过功能已经很齐全了,但是还是有可以改进的地方
vim则可以说是程序员开发者的一项很好用的工具
命令模式下只能读不能写
在命令模式下输入i
可以进入编辑模式,在编辑完成之后按下Esc
又可以退出到命令模式
在命令模式下输入:
可以进入末行模式,在保存完之后还可以按下两次Esc
继续回退到命令模式
vim 文件名
命令 | 英文 | 功能 | 常用 |
---|---|---|---|
i | insert | 在当前字符前插入文本 | 常用 |
I | insert | 在行首插入文本 | 较常用 |
a | append | 在当前字符后添加文本 | |
A | append | 在行末添加文本 | 较常用 |
o | 在当前行后面插入一空行 | 常用 | |
O | 在当前行前面插入一空行 | 常用 |
:q
:当vim进入文件没有对文件内容做任何操作可以按“q”退出:q!
:当vim进入文件对文件内容有操作但不想保存退出:wq
:正常保存退出:wq!
:强行保存退出,只针对于root用户或文件所有人vim 文件名 +行数
:查看文件并定位到具体行数vim a.txt +5
:查看a.txt文件并定位到第5行在修改一个文件时(a.txt),为保证文件安全,vim不会对源文件进行修改,会产生一个新的文件(a.txt.swp),并对该文件进行编辑
只有在保存的时候,才会将新文件写回到源文件中
命令 | 功能 |
---|---|
cat 文件名 | 查看小文件内容 |
less -N 文件名 | 分屏显示大文件内容 |
head -n 文件名 | 查看文件的前一部分 |
tail -n 文件名 | 查看文件的最后部分 |
grep 关键字 文件名 | 根据关键字搜索文本文件内容 |
cat -n a.txt
:可以加入参数选项-n
显示行号
less 文件名
:查看大文件
-N
可显示行号tail 文件名
:默认查看文件最后10行内容
tail -3 b.txt
:查看文件最后3行内容tail -f b.txt
:动态显示文件最后10行内容(ctrl + C停止)tail -n +2 b.txt
:显示文件b.txt的内容,从第2行至文件末尾tail -c 45 b.txt
:显示文件最后45个字符head 文件名
:查看文件前10行内容
grep命令
grep [参数选项] 关键字 文件
:根据关键字,搜索文本文件内容ps -ef | grep sshd
:将进程中含有sshd的进程展示出来ps -ef | grep -c sshd
:将进程中含有sshd的进程的个数展示出来echo 字符串
:展示文本echo 字符串 > 文件名
:将字符串写到文件中(覆盖文件内容)echo 字符串 >> 文件名
:将字符串写到文件中(不覆盖原内容)cat 不存在的目录 &>> 存在的文件
:将命令的失败结果追加到指定的文件的后面awk [参数选项] '语法' 文件
cat a.txt | awk '/zhang|li/'
:查看a.txt文件中包含zhang或者li的行选项 | 含义 |
---|---|
-F ',' |
使用指定字符分割 |
$ + 数字 |
获取第几段内容 |
$0 |
获取当前行内容 |
OFS="字符" |
向外输出时的段分割字符串 |
toupper() |
字符转成大写 |
tolower() |
字符转成小写 |
length() |
返回字符长度 |
cat a.txt | awk -F ' ' '{print $1,$2,$3}'
:将a.txt中的内容按空格分割并打印第1-3列
cat a.txt | awk -F ' ' '{print toupper($1),$2,$3}'
:将a.txt中的内容分隔后并将$1中的内容转为大写字符后输出
cat a.txt | awk -F '' '{OFS="---"}{print $1,$2,$3}'
:将a.txt中的内容分隔后并用—重新分隔后输出
命令 | 含义 |
---|---|
awk BEGIN{初始化操作} {每行都执行} END{结束时操作} 文件名 |
固定语法 BEGIN{这里面放的是执行前的语句} {这里面放的是处理每一行要执行的语句} END{这里面放的是处理完所有的行后要执行的语句} 文件名 |
cat a.txt | awk -F' ' 'BEGIN{}{totle=totle+$2}END{print totle}'
:将a.txt分割后把$2的值相加并输出
cat a.txt | awk -F' ' 'BEGIN{}{totle=totle+$2}END{print totle}'
:输出totle以及总人数(行数)
ln -s 目标文件路径 快捷方式路径
ln -s aaa/bbb/ccc/ddd/eee/a.txt a.txt
find [参数选项] <指定目录> <指定条件> <指定内容>
:在指定目录下查找文件find . -name "*.txt"
:查找当前目录下所有以txt为后缀的文件find . -ctime -1
:当前文件夹下1天内操作过的文件
将 . 替换为 / 则表示在全盘范围进行查找
gzip [参数选项] [文件]
:压缩文件gzip a.txt
:将a.txt文件压缩gzip *
:将当前目录下所有文件都进行压缩(已经压缩过的不能再次被压缩)gzip -dv 文件名
:解压文件并显示详细信息gunzip [参数] [文件]
:解压文件gunzip 压缩文件
:解压压缩文件gunzip *
:解压当前目录下的所有压缩文件tar [必要参数] [选择参数] [文件]
:打包、压缩和解压(文件/文件夹)tar -cvf 打包文件名 文件名
:打包文件并指定打包之后的文件名(仅打包不压缩)tar -zcvf b.gz b.txt
:通过gzip指令将b.txt压缩为b.gz并显示过程(打包压缩)tar -zcvf aaa.gz aaa
:将aaa文件夹压缩为aaa.gztar -ztvf aaa.gz
:查看压缩文件中的内容tar -zxvf aaa.gz
:解压aaa.gz文件zip [必要参数] [选择参数] [文件]
:压缩zip -q -r 压缩文件名 文件/文件夹
:压缩对应的文件/文件夹unzip [必要参数] [选择参数] [文件]
:解压unzip -l aaa.zip
:查看aaa.zip压缩文件所包含的文件unzip -d aaa aaa.zip
:将aaa.zip压缩文件解压到aaa文件夹中(aaa文件夹可以不存在,会自动创建)bzip2 [参数选项] 文件
:压缩文件bzip2 a.txt
:压缩并删除a.txtbunzip2 [参数选项] 文件
:解压
bunzip2 -v a.bz2
:解压并显示详细信息ifconfig [参数选项]
:显示或配置网络设备的命令ifconfig ens37 down
:关闭ens37这张网卡ifconfig ens37 up
:开启网卡ens37ifconfig ens37 192.168.23.199
:将ens37网卡的ip更改为192.168.23.199ifconfig ens37 192.168.23.199 netmask 255.255.255.0
:配置ip地址和子网掩码ping [参数选项]
:检测是否与主机联通ping -c 2 www.baidu.com
:指定接收包的次数netstat [参数选项]
:显示网络状态lsblk命令
lsblk [参数选项]
:列出硬盘的使用情况lsblk -f
:显示系统信息df命令
df [参数选项]
:显示目前在Linux系统上,磁盘的使用情况df
:显示整个硬盘的使用情况df 文件夹
:显示文件夹使用情况df --total
:显示所有的信息df -h
:将结果变成kb、mb、gb等形式展示,利于阅读mount命令
mount [参数选项] 目录
:用于挂载Linux系统外的设备注意:“挂载点”的目录需要以下几个要求:
目录事先存在,可以用mkdir命令新建目录
挂载点目录不可被其它进程使用到
挂载点下原有文件将被隐藏
mount -t auto /dev/cdrom PPP
:将光驱和PPP文件夹挂载umount PPP
:卸载PPP文件夹所挂载的光驱在Linux中,如果我们需要查找、安装、下载或者卸载另外的软件,就需要通过yum来进行操作。英文全称为:Yellow dog Updater,Modified
yum常用命令
yum check -update
yum update
yum install
yum update
yum list
yum remove
yum search
yum clean packages
:清除缓存目录下的软件包yum clean headers
:清除缓存目录下的headersyum clean oldheaders
:清除缓存目录下旧的headersyum clean,yum clean all(= yum clean packages;yum clean oldheades)
:清除缓存目录下的软件包及旧的headers-y:在安装过程中,如果有选择提示,全部选择y
注意:使用yum必须联网且在root权限下
yum -y install tree
:安装treetree
:执行tree,展示当前目录结构yum remove tree
:移除treeyum list tom*
:查找以tom为开头的软件名称yum源
yum -y install wget
:安装一个下载工具cd /etc/yum.repos.d/
:进入yum的相关文件夹中mv CentOS-Base.repo CentOS-Base.repo.back
:对原yum文件改名(备份)wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
:下载阿里yum源文件yum clean all
:清理缓存,并重新加载yumyum makecache
:为新yum源建立缓存文件yum search tomcat
:查找软件,验证阿里云的yum源是否可以正常使用在计算机科学中,shell就是一个命令解释器
shell是位于操作系统和应用程序之间,是他们二者最主要的接口。
shell负责把应用程序的输入命令信息解释给操作系统,将操作系统指令处理后的结果解释给应用程序
一句话,shell就是在操作系统和应用程序之间的一个命令翻译工具。
Windows和Linux中的shell
shell的使用方式
手工敲击键盘,直接输入命令,按Enter后。
执行命令,显示命令执行的结果
重点:逐行输入命令,逐行进行确认执行
我们把手工执行的命令,写到一个文件中,然后运行这个文件,达到执行命令的效果。
这个文件就叫做脚本文件
编写第一个shell脚本
#! /bin/bash
#这是临时shell脚本
echo 'nihao'
echo 'hello'
注释
#!/bin/bash
# 这是单行注释
echo 'hello world'
#!/bin/bash
:<<! 这是多行注释
多行注释
多行注释
!
echo 'hello world'
:<<字符
注释内容
字符
变量
定义变量
变量名=变量值
(变量值必须是一个整体,中间没有特殊字符)变量名='变量值'
(单引号中的内容,原样赋值)变量名="变量值"
(如果双引号中有其它变量,会把变量的结果进行拼接,然后赋值)习惯:数字不加引号,其它默认加双引号
变量名=$(命令)
(常用)使用变量
$变量名
(非标准写法,图省事)"$变量名"
(非标准写法,图省事)${变量名}
(在双引号里面要使用变量的值)"${变量名}"
(标准使用方式)只读变量:readonly 变量名
删除变量:unset 变量名
定义数组 | 数组名=(值1 值2 … 值n) | arr=(1 2 3 4 5) |
---|---|---|
给数组的元素赋值 | 数组名[索引]=值 | arr[0]=1 |
获取元素 | ${数组名[下标]} | ${arr[0]} |
获取长度 | ${#数组名[*]} ${#数组名[@]} |
${#arr[*]} ${#arr[@]} |
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b |
- | 减法 | expr $a - $b |
* | 乘法 | expr $a \* $b |
/ | 除法 | expr $b / $a |
% | 取余 | expr $b % $a |
= | 赋值 | a=$b (把b变量的值赋给a变量) |
++ / – | 自增 / 自减 | ((a++)) |
注意点
举例:`expr 2 + 2`
字符串运算符
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回true | [ $a = $b ] |
!= | 检测两个字符串是否不相等,不相等返回true | [ $a != $b ] |
-z | 检测字符串长度是否为0,为0返回true | [ -z $a ] |
-n | 检测字符串长度是否不为0,不为0返回true | [ -n $a ] |
$ | 检测字符串是否为空,不为空返回true | [ $a ] |
[]
与里面的代码命令有个空格隔开,不能贴在一起
$?
可以获取上一条语句的执行结果在shell中,0为真,1为假
${#字符串}
获取字符串长度
关系运算符
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回true【equals】 | [ $a -eq $b ] |
-ne | 检测两个数是否不相等,不相等返回true【not equals】 | [ $a -ne $b ] |
-gt | 检测左边的数是否大于右边的,如果是,则返回true【greater than】 | [ $a -gt $b ] |
-lt | 检测左边的数是否小于右边的,如果是,返回true【less than】 | [ $a -lt $b ] |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回true【greater equals】 | [ $a -ge $b ] |
-le | 检测左边的数是否小于等于右边的,如果是,则返回true【less equals】 | [ $a -le $b] |
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
布尔运算符
运算符 | 说明 | 举例 |
---|---|---|
! | 取反运算 | [ ! false ] 返回true |
-o | 或运算,有一个表达式为true 则返回true 【or】 | [ $a -lt 20 -o $b -gt 100 ] |
-a | 与运算,两个表达式都为true 才返回true【and】 | [ $a -lt 20 -a $b -gt 100 ] |
逻辑运算符
运算符 | 说明 | 举例 |
---|---|---|
&& | 逻辑的 AND | [[ true && true ]] 返回true |
|| | 逻辑的 OR | [[ false || false ]] 返回false |
if语法
if[ 条件 ]
then
语句体
fi
if [ 条件 ]
then
语句体
else
语句体
fi
if [ 条件1 ]
then
语句体
elif [ 条件2 ]
语句体
else
语句体
fi
小练习
#!/bin/bash
# if语句
#if的第一种格式:
#查找一个进程,如果进程存在,就打印true
if [ $(ps -ef | grep -c "ssh") -gt 1 ]
then
echo "true"
fi
case语法
case 值 in
模式1 )
语句体1
;;
模式2 )
语句体2
;;
esac
v="hhxx"
case "${v}" in
"hhxx")
echo "好好学习"
;;
"ttxs")
echo "天天向上"
;;
esac
for循环
for 变量 in 范围
do
循环体
done
for loop in A B C
do
echo $loop
done
while循环
while 条件
do
循环体
done
a=1
while [ "${a}" -le 10 ]
do
echo "${a}"
((a++))
done
无参无返回值
函数名(){
函数体
}
test(){
echo "函数测试!"
}
echo "==========="
test
echo "============"
有参无返回值
method(){
echo "第一个参数$1"
echo "第二个参数$2"
}
method a b
有参有返回值
method(){
echo "接收到参数$1和$2"
return $(($1 + $2))
}
method 10 20
echo $?
小练习
read 变量名
:表示把键盘录入的数据赋值给这个变量
#!/bin/bash
#在方法中键盘录入两个整数,并返回这两个整数和
method(){
echo "请录入第一个数:"
read num1
echo "请录入第二个数:"
read num2
echo "两个数分别为:${num1},${num2}"
return $(($num1 + $num2))
}
method
echo "两数之和为:$?"
推荐阅读:【Java WEB】Nginx&Tomcat&HTTP协议