概述
介绍
- linux是一个开源的、免费的操作系统 有较强的稳定性、安全性、高并发处理能力 但没有优异的可视化界面
- windows用于个人计算机上 而linux用于企业服务器上
- 考虑到开发成本 大多数的企业级应用、集群项目都会部署到linux系统上而不是windows系统
- 主要的发行版本有CentOS(比其它的更稳定)、Ubuntu(乌班图)、RedHat(红帽)等
目录结构
-
linux的文件系统采用的是层级式的树状目录结构 根目录为"/"
-
在linux系统中 一切皆文件
-
说明
- /root:为系统管理员目录
- /bin及/usr/bin:存放系统预装的可执行文件 此文件可以在任意目录下执行
- 实际上显示为/bin -> /usr/bin 表示保存到/bin目录下的子目录及文件实际上是都保存到了/usr/bin目录中
- /usr/local/bin:存放用户自己的可执行文件 此文件也可以在任意目录下执行
- /etc:存放配置文件
- /home:每一个用户的根目录 存放每一个用户的私人数据 且其下的目录名默认与用户名相同
- /opt:存放额外安装的软件
Xshell与Xftp
-
Xshell用于远程操作linux
-
Xshell使用:新建会话 名称任意 协议选SSH 主机写某linux的ip(在linux中Open Terminal后输入命令
ifconfig
在ens33中的inet即为此linux的ip) 端口号写22 确定后输入用户名与密码(系统管理员root/普通用户zhangsan)以登录linux
-
-
Xftp用于在windows与linux之间传输文件
- Xftp使用:新建会话 名称任意 协议选SFTP 主机写某linux的ip 端口号写22 填写用户名与密码(系统管理员root/普通用户zhangsan)
命令
vi/vim
-
vi是linux与unix中的文本编辑器 效率高
-
vim是vi的升级版 vi的命令几乎全都可以在vim中使用
vi/vim的三种模式
-
一般模式
-
当使用命令
#vi test.txt vim test.txt
打开文件时即进入一般模式
- 一般模式下只能查看 不能编辑更不能保存编辑
-
-
编辑模式
- 在一般模式下按"i"(光标停留在当前位置)/“a”(光标停留在下一个字符处)即进入编辑模式 再按"esc"返回到一般模式
- 编辑模式下能查看、能编辑 但不能保存编辑
-
命令行模式
-
在一般模式下按":"即进入命令行模式 再按"esc/back"返回到一般模式
-
在命令行中输入
#保存并退出vi/vim wq
#不保存并退出vi/vim q!
#仅退出vi/vim #只有当文件没有任何改动时才可使用此命令 q
-
vi/vim的常用快捷键
- “yy”:复制光标所处的当前行 -> “5yy”:复制光标所处的当前行往下5行
- “p”:粘贴到光标所处的下一行
- “dd”:删除光标所处的当前行 -> “5dd”:删除光标所处的当前行往下5行
- “u”:撤销
- “gg”:光标移动到首行
- “G”:光标移动到尾行
- “10+G”:光标移动到第10行
- “set nu”(命令行模式下):显示行号
- “set nonu”(命令行模式下):不显示行号
- “/关键字”(命令行模式下):从头部开始查找关键字 按"n"向下查找下一个 按"N"向上查找上一个
- “?关键字”(命令行模式下):从尾部开始查找关键字 按"n"向上查找下一个 按"N"向下查找上一个
用户管理
-
root是安装linux时默认创建的系统管理员账号
-
任何一个使用linux的用户都必须要向系统管理员root申请账号与密码
添加用户
#同时会在/home目录下创建此用户的根目录且目录名默认与用户名一致
useradd [options] 用户名
#创建用户wangwu并指定此用户的根目录名为ww
useradd -d /home/ww wangwu
#给用户lisi设置密码
#密码要满足一定的复杂度 否则会报错(BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic)
passwd lisi
删除用户
userdel [options] 用户名
#删除用户lisi但不删除此用户的根目录
userdel lisi
#删除用户wangwu并级联删除此用户的根目录
userdel -r wangwu
查看用户信息
id 用户名
切换用户
#高权限用户切换到低权限用户不需要输入密码
#低权限用户切换到高权限用户需要输入密码
su 用户名
#切换回原来的用户且不管权限如何都不需要密码
exit
用户的组管理
- 在linux中任意用户都至少属于一个组(root用户属于root组) 因此若新建用户时不指定组 则会新建一个组名与用户名一致的组 并将该用户添加到该组中
添加组
groupadd 组名
删除组
groupdel 组名
添加用户时指定组
useradd -g 组名 用户名
添加用户到指定组
gpasswd -a 用户名 组名
将用户从指定组中移除
gpasswd -d 用户名 组名
系统操作
清屏
clear
关机
shutdown now
#1h后关机
shutdown -h 1
重启
reboot
shutdown -r now
同步内存数据到磁盘
sync
帮助相关命令
man
#查看linux系统中帮助手册上此命令的相关信息
#"enter":翻一行 " ":翻一页 "q":退出查看
man 命令
help
#查看此命令的内置帮助信息
help 命令
目录文件相关命令
pwd
#查看当前目录的路径
pwd
ls
#查看指定目录/当前目录下的所有子目录与文件
ls [options] [目录名]
#以长列表形式详细显示/home目录下的所有子目录与文件
ls -l /home
#显示当前目录下的所有子目录与文件(包含虚拟的(即以"."开头的))
ls -a
#以人性化的形式显示当前目录下的所有子目录与文件
ls -h
ll
#以长列表形式详细显示指定目录/当前目录下的所有子目录与文件
ll [目录名]
cd
#切换到指定目录//root目录
cd [目录名]
#切换到/root目录
cd
cd ~
cd /root
#切换到当前目录
cd .
#切换到当前目录的上一级目录
cd ..
#这是绝对路径
cd /home/zhangsan
#这是相对路径
cd zhangsan
cd ./zhangsan
cd ../home/zhangsan
mkdir
#创建目录
mkdir [options] 目录名
#创建单级目录
mkdir /opt/testDir
#创建多级目录
mkdir -p /opt/testDir/t1/t2
rmdir
#删除一个空目录
#若要删除多级目录/非空目录 得用"rm -rf 目录名"
rmdir 目录名
touch
#创建一个/多个空文件
#对于文件列表 多个文件名之间用" "隔开
touch 文件列表
cp
#复制目录/文件到某一目录/文件中
cp [options] source dest
#递归的复制t1这一整个目录到t2中
#文件冲突时可能会确认是否覆盖此文件cp: overwrite ‘XXX’? y/n
cp -r t1 t2
#递归的复制t1这一整个目录到t2中且无需确认强制覆盖所有冲突文件
\cp -r t1 t2
rm
#删除目录/文件
rm [options] 目录/文件列表
#删除t1.txt文件与t2.txt文件且无需确认强制删除
rm -f t1.txt t2.txt
#递归的删除t1这一整个目录
rm -r t1
mv
#移动/重命名目录/文件
#若dest不存在则为重命名 否则为移动
mv [options] source dest
#移动文件t1.txt到当前目录的上一级目录中且无需确认强制覆盖冲突文件
mv -f t1.txt ..
cat
#查看文件内容
cat [options] 文件名
#查看文件内容并显示行号
cat -n t1.txt
#分页查看文件内容
#"enter":翻一行 " ":翻一页 "q":退出查看
#"|":管道符号 表示将前面的命令的处理结果交给后面的命令进行进一步的处理
cat t1.txt | more
more
#分页查看文件内容(一次性加载所有的文件内容到内存中)
#"enter":翻一行 " ":翻一页 "q":退出查看
more 文件名
less
#分页查看文件内容(分页加载文件内容到内存中)
#"enter":翻一行 " ":翻一页 "q":退出查看
less 文件名
#less比more更强大
#"pageup":上一页 "pagedown":下一页
#"/关键字":从头部开始查找关键字 按"n"向下查找下一个 按"N"向上查找上一个
#"?关键字":从尾部开始查找关键字 按"n"向上查找下一个 按"N"向下查找上一个
head
#查看文件内容
head [options] 文件名
#查看文件前10行的内容
head t1.txt
#查看文件前5行的内容
head -n 5 t1.txt
tail
#查看文件内容
tail [options] 文件名
#查看文件后10行的内容
tail t1.txt
#查看文件后5行的内容
tail -n 5 t1.txt
echo
#输出系统变量/字符串到命令行终端
echo [内容]
#输出字符串""到命令行终端
echo
#输出字符串"Hello"到命令行终端
echo Hello
#输出系统变量path到命令行终端
#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
echo $PATH
>
#将执行某一命令时显示到命令行终端的内容覆盖写入到目标文件中
#若目标文件不存在则会先新建目标文件再进行查看命令最后再覆盖写入
查看命令 > 目标文件名
#将执行某一命令时显示到命令行终端的内容覆盖写入到目标文件a.txt中
ll > a.txt
cat t1.txt > a.txt
echo Hello > a.txt
cal > a.txt
>>
#将执行某一命令时显示到命令行终端的内容追加写入到目标文件中
#若目标文件不存在则会先新建目标文件再进行查看命令最后再追加写入
查看命令 >> 目标文件名
#将执行某一命令时显示到命令行终端的内容追加写入到目标文件a.txt中
ll >> a.txt
cat t1.txt >> a.txt
echo Hello >> a.txt
cal >> a.txt
rz
#上传windows上的文件到linux的当前目录下
rz
sz
#将linux的文件下载到windows中
sz 文件名
时间日期相关命令
date
#查看/设置系统当前时间日期
date [options]
#查看系统当前时间日期
#Wed Jul 27 16:28:45 CST 2022
date
#查看系统当前年份
#2022
date +%Y
#查看系统当前月份
#07
date +%m
#查看系统当前日份
#27
date +%d
#按照一定的格式查看系统当前时间日期
#单引号双引号都可以(当字符之间没有" "分开时没有引号也可以)
#2022-07-27 16:37:08
date "+%Y-%m-%d %H:%M:%S"
#设置系统当前时间日期
#单引号双引号都可以(当字符之间没有" "分开时没有引号也可以)
#Thu Jul 28 16:42:08 CST 2022
date -s '2022-07-28 16:42:08'
cal
#查看日历
cal [options]
#查看当前月份的日历
cal
#查看2022年份的日历
cal 2022
搜索查找相关命令
find
#查看文件
find [范围] [options]
#递归的查看当前目录下的所有子目录与文件
find
#递归的查看/home目录下的所有子目录与文件
find /home
#查看当前目录及其子目录下的所有文件名为a.txt的文件
find -name a.txt
#查看当前目录下的所有文件名为a.txt的文件
find a.txt
#查看当前目录及其子目录下的所有文件名后缀为.txt的文件
#-name支持通配符
find -name *.txt
#查看当前目录下的所有文件名后缀为.txt的文件
find *.txt
#查看当前目录及其子目录下的所有所有者为lisi的子目录与文件
find -user lisi
#查看当前目录及其子目录下的所有大小为5M的文件
find -size 5M
#查看当前目录及其子目录下的所有大小大于5M的文件
find -size +5M
#查看当前目录及其子目录下的所有大小小于5M的文件
find -size -5M
locate
#在locate数据库中按name查找所有含有关键字的目录与文件(包含虚拟的)
#locate支持通配符
#但其实不需要使用通配符 因为是查找所有含有关键字的目录与文件 即相当于find / -name *关键字*(但不包含虚拟的)
#因为无需遍历整个系统 因此查询速度极快
#但为了保证查询结果的准确性 得在每次查询前都更新一次locate数据库才行(速度慢)
updatedb
locate 关键字
grep
#将执行某一命令时显示到命令行终端的内容进行关键字过滤后输出
查看命令 | grep [options] 关键字
#查找当前目录下的所有名称含有t关键字的子目录与文件(包含虚拟的)
ls -al | grep t
#查找当前目录下的a.txt文件中含有beijing关键字的行
cat a.txt | grep beijing
#查找当前目录下的a.txt文件中含有beijing关键字的行并显示此行号
cat a.txt | grep -n beijing
#查找当前目录下的a.txt文件中含有beijing关键字(忽略大小写)的行
cat a.txt | grep -i beijing
压缩/解压缩相关命令
gzip
#压缩单个文件
#将文件压缩成以.gz结尾的压缩包且会删除原文件
gzip 文件名
gunzip
#解压缩单个文件
#将压缩包解压且会删除原压缩包
gunzip 压缩包名
zip
#打包且压缩多个文件
#压缩包名的后缀通常为.zip(与.gz区分开)
zip [options] 压缩包名 目录/文件列表
#将文件a.txt与文件b.txt与目录testdir打包且压缩成test.zip
zip test.zip a.txt b.txt testdir
#递归的将/home目录下的所有子目录与文件打包且压缩成home.zip
zip -r home.zip /home
unzip
#解压缩多个文件
unzip 压缩包名 [options]
#将压缩包test.zip解压到当前目录下
unzip test.zip
#将压缩包test.zip解压到/opt目录下
unzip test.zip -d /opt
tar
#打包且压缩/解压缩多个文件
#压缩包名的后缀通常为.tar.gz(与.gz/.zip区分开)
tar [options] 压缩包名 [目录/文件列表/options]
#将文件a.txt与文件b.txt与目录testdir打包且压缩成test.tar.gz
#"-z":打包且压缩 "-c":压缩 "-v":显示详细信息 "-f":指定压缩包名
tar -zcvf test.tar.gz a.txt b.txt testdir
#将压缩包test.tar.gz解压到当前目录下
#"-x":解压缩
tar -zxvf test.tar.gz
#将压缩包test.tar.gz解压到/opt目录下
tar -zxvf test.tar.gz -C /opt
目录/文件的组管理
- 在linux中任意目录/文件都属于且只属于一个组
- 默认情况下目录/文件所属的组为其所有者所属的主组
- 目录/文件的组分为所有者(默认情况下即为目录/文件的创建者)、同组用户、其它组用户
查看目录/文件的所有者与所属组
#第3列为目录/文件的所有者 第4列为目录/文件的所属组
ls -l
修改目录/文件的所有者
chown [options] 所有者 目录/文件名
#递归的修改testdir目录的所有子目录与文件的所有者为zhangsan
chown -R zhangsan testdir
修改目录/文件的所属组
chgrp [options] 组名 目录/文件名
#递归的修改testdir目录的所有子目录与文件的所属组为dev
chgrp -R dev testdir
修改目录/文件的所有者与所属组
chown [options] 所有者:所属组 目录/文件名
#递归的修改testdir目录的所有子目录与文件的所有者为zhangsan、所属组为dev
chown -R zhangsan:dev testdir
目录/文件的权限管理
-
在linux中通过组来控制目录/文件的权限
-
目录/文件的权限分为r(read)/4、w(write)/2、x(execute)/1
-
对于目录
- r为可以读取、查看目录中的内容 如ls、ll、find
- w为可以修改目录中的内容 如mkdir、rmdir、touch、rm、mv
- x为可以访问目录 如cd
-
对于文件
-
r为可以读取、查看文件中的内容 如cat、more、less、head、tail
-
w为可以修改文件中的内容 如vi、vim
-
x为可以执行可执行文件(.sh文件)
-
-
查看目录/文件的权限
#第1列为目录/文件的所有者、同组用户、其它组用户权限
ls -l
修改目录/文件的权限
#r/4、w/2、x/1表示读、写、执行
#u、g、o、a表示所有者、同组用户、其它组用户、所有用户(多个组之间用","隔开 不能带" ")
#+、-、=表示增加、减少、设置
chmod 权限管理 目录/文件名
chmod u=rwx,g+w,o-x,a-r a.txt
#常用
chmod 777 a.txt
网络管理
查看linux的ip与网关
-
vm -> 编辑 -> 虚拟网络编辑器 -> 选择类型为NAT的VMnet
-> DHCP设置 -> 从起始IP地址到结束IP地址的ip都能用
-> NAT设置 -> 网关IP
设置linux的ip与网关
cd /etc/sysconfig/network-scripts
cp ifcfg-ens33 ifcfg-ens33_old
vim ifcfg-ens33
#修改成静态获取ip
BOOTPROTO="static"
#添加
#静态ip地址为起始IP地址到结束IP地址的任意一个ip
IPADDR=192.168.190.128
#网关为网关IP
GATEWAY=192.168.190.2
#DNS与网关保持一致
DNS=192.168.190.2
#重启linux网络服务/重启linux
service network restart
reboot
#重启后查看ip是否发生变化
ifconfig
#重启后ping一下查看是否ping的通
#linux ping 外网
ping www.baidu.com
#windows ping linux
ping 192.168.190.128
#linux ping windows
ping 192.168.137.1
#查看windows的对外ip:ipconfig后的本地连接的IPv4地址
进程管理
线程与进程
-
线程为一个程序的线路
-
进程为一个程序的执行
-
每一个进程都有id
-
每一个进程都占用着一个端口号
-
每一个进程都对应着一个父进程
-
进程有前台与后台两种运行方式(一般的 服务器都是在linux系统中常驻后台运行)
-
查看进程
ps [options]
#显示所有进程的详细信息
ps -ef
ps -aux
- ps -ef命令显示参数说明
- ps -aux命令显示参数说明
终止进程
kill [options] PID
#killall支持通配符
#但其实不需要使用通配符 因为是终止所有含有关键字的进程
killall 关键字
#强制终止PID为3097的进程(bash进程/终端进程)
#终止终端进程时不带参数-9不起作用
kill -9 3097
服务管理
-
服务是运行linux系统的一些必要程序
-
服务实际上也是进程 称为守护进程
-
守护进程通常为后台运行 如sshd、firewalld
systemctl [options] 服务名
#旧版的linux/有些发行版本的linux使用service命令
service [options] 服务名
#查看防火墙状态
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld
#开启防火墙
systemctl start firewalld
#设置防火墙开机自启
systemctl enable firewalld
#重启防火墙
systemctl restart firewalld
#重新加载防火墙
systemctl reload firewalld
软件包管理
RPM
-
RPM(RedHat Package Manager)是一种对于linux软件包的打包与安装工具
-
RPM操作的linux软件包都是以.rpm结尾的
查看rpm包
#查看当前linux中已安装的所有rpm包
rpm -qa
删除rpm包
rpm -e rpm包名
安装rpm包
#安装rpm包且显示提示且显示进度条
rpm -ivh rpm包名
YUM
- YUM是一种基于RPM的软件包管理工具
- YUM能从指定的服务器上自动下载rpm包并自动安装并自动处理其依赖关系
查看rpm包
#查看YUM服务器上所有版本的火狐浏览器的rpm包
yum list | grep firefox
#查看当前linux中已安装的所有版本的火狐浏览器的rpm包
yum list installed | grep firefox
删除rpm包
yum [options] remove rpm包名
#删除过程中需要确认的地方全部选择y
yum -y remove rpm包名
安装rpm包
yum [options] install rpm包名
#安装过程中需要确认的地方全部选择y
yum -y install rpm包名
搭建开发环境
安装jdk
#先将安装包通过xftp传输到/opt目录下
#解压到/opt目录下
tar -zxvf jdk-8u341-linux-x64.tar.gz -C /opt
#配置linux系统环境变量
vim /etc/profile
JAVA_HOME=/opt/jdk1.8.0_341
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/lib:.
export JAVA_HOME PATH CLASSPATH
#使配置文件生效
source /etc/profile
#查看java版本以测试jdk是否安装成功
java -version
#编译并运行.java文件以测试jdk是否安装成功
touch HelloWorld.java
vim HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
javac HelloWorld.java
java HelloWorld
安装tomcat
#先将安装包通过xftp传输到/opt目录下
#解压到/opt目录下
tar -zxvf apache-tomcat-9.0.65.tar.gz -C /opt
#进入到tomcat的/bin目录下
cd /opt/apache-tomcat-9.0.65/bin
#启动tomcat
./startup.sh
#在linux上访问tomcat
#打开firefox 地址栏上输入127.0.0.1:8080
#在windows上访问linux的tomcat
#先关闭linux的防火墙
systemctl stop firewalld
#然后浏览器地址栏上输入192.168.190.128:8080(linux的ip)
安装mysql
#先查看是否已安装了mariadb数据库 若已安装则要卸载掉才行 否则会与mysql冲突
yum list installed | grep mariadb
yum -y remove mariadb-libs.x86_64
#将安装包通过xftp传输到/opt目录下
#解压到/opt目录下
tar -zxvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz -C /opt
#重命名解压后的目录
mv mysql-5.7.39-linux-glibc2.12-x86_64 mysql-5.7.39
#创建data目录
#data目录是mysql用来存放数据库的文件的 但mysql默认不创建data目录 需要手动创建
cd mysql-5.7.39
mkdir data
#创建一个用来执行mysqld命令(初始化mysql)的linux用户
groupadd mysql
useradd -g mysql mysql
#初始化mysql
cd /opt/mysql-5.7.39/bin
#--initialize:初始化mysql(mysql会自动创建一个用于登录mysql的root用户并生成密码)(记得复制密码)
#--user:执行mysqld命令的linux用户
#--datadir:mysql的数据库的文件的存放位置
#--basedir:mysql的存放位置
./mysqld --initialize --user=mysql --datadir=/opt/mysql-5.7.39/data --basedir=/opt/mysql-5.7.39
#启动mysql的数据加密功能并生成数字证书(.pem文件)
cd /opt/mysql-5.7.39/bin
./mysql_ssl_rsa_setup --datadir=/opt/mysql-5.7.39/data
#修改mysql目录的所有者与所属组与权限
chown -R mysql:mysql /opt/mysql-5.7.39
chmod 777 /opt/mysql-5.7.39
#启动mysql
cd /opt/mysql-5.7.39/bin
#&:表示后台启动
#命令执行后得再按一次enter才能显示出命令行
./mysqld_safe &
#查看mysql是否成功启动
ps -ef | grep mysql
#登录mysql
cd /opt/mysql-5.7.39/bin
./mysql -uroot -p
#修改mysql的root用户密码
alter user 'root'@'localhost' identified by '123456';
#授权远程访问mysql
#在没有授权之前只能本地计算机(即linux)访问 授权后才能让其它计算机(如windows)访问
#all privileges:指当前用户的所有权限
#*.*:指的是所有数据库的所有表的操作权限
#'root'@'%':root为要授权的用户名 %为所有ip
grant all privileges on *.* to 'root'@'%' identified by '123456';
#更新权限
flush privileges;
#关闭linux的防火墙
systemctl stop firewalld
#在windows上远程连接linux的数据库
#查看mysql数据库的编码
show variables like '%char%';
show variables like '%collation%';
#修改mysql数据库的编码(除character_set_filesystem与character_set_system之外)
set character_set_XXX=utf8/gbk;
set collation_XXX=utf8_general_ci/gbk_chinese_ci;
#关闭mysql
cd /opt/mysql-5.7.39/bin
./mysqladmin -uroot -p shutdown
#查看mysql是否成功关闭
ps -ef | grep mysql