Linux
# Linux基础
# 快捷键
Ctrl+C——停止命令Ctrl+u——快速删除光标前的内容Ctrl+k——快速删除光标后的内容Ctrl+shift+c/Ctrl+Insert——复制Ctrl+shift+v/Shift+Insert——粘贴- 选中+鼠标中键——自动填充到命令行
Ctrl+Alt+T——打开终端(乌班图)Tab键自动补全- 连续两次
Tab,给出操作提示 - 上下箭头调用层用命令
- 使用
clear命令或者Ctrl+l实现清屏
# 常用命令
# 命令格式

# 文件目录操作命令
pwd——查看当前目录位置tree——查看树形目录结构head [-n] fileName——查看文件前n行内容,默认n=10wc -l fileName——统计文件行数(-l 行数 ,-w 单词数,-c字节数)free -h——查询内存df -h——查看磁盘空间echo—— 输出环境变量;输出字符串echo $PATHecho hello world!
ls——查看当前目录下所有文件命令说明
ls [-al] [dir]-a:显示所有文件及目录(.开头的隐藏文件也会列出)-l:处文件名称外,同时将文件形态(d表示目录,-表示文件)、权限、拥有者、文件大小等详细信息列出
实例
ls -a——查看所有文件,包含隐藏文件,不显示详细信息ls -l——查看非隐藏文件的详细信息ll——ls -l的简写ls -al——查看所有文件的详细信息
cd 目录名——进入某个文件夹下cd \——进入根目录cd ..——表示目前目录位置的上级目录cd .——表示目前所在目录cd ~——表示用户的home目录cd diana——进入当前目录下的diana文件目录中cd /diana——进入根目录下的diana文件目录中,开头的第一个/表示根目录
cat [-n] fileName——显示文件内容(全部)- 说明
-n由1开始对所有输出的行数的编号
- 实例
cat /etc/profile——查看/etc目录下的profile文件内容
- 说明
cat fileName1 fileName2 fileName3 > fileName4——将前三个文件的内容合并到第四个文件中,并打开- 实例
cat 1.txt 2.txt >3.txt——将前1.txt,2.txt文件的内容合并到3.txt文件中,并打开
- 实例
more fileName——以分页的形式显示文件内容一次性将文件全部加载,效率比较低
- 说明
- 回车键, 向下滚动一行
- 空格键,
ctrl+F向下滚动一屏 - b,
ctrl+B返回上一屏 - q,ctrl+c,退出more
=输出当前行号:f输出文件名和当前行的行号
- 实例
more /etc/profile——以分页方式展示/etc目录下的profile文件内容
- 说明
less fileName——以分页的形式显示文件内容显示一部分记载一部分,速度更快,适合大文件
- 说明
- 方向上键——向上一行
- 回车键,方向下键 ——向下滚动一行
- 空格键,
pg dn——向下滚动一屏 pg up——向上滚动一屏- q,ctrl+c,退出more
/字符串——向下搜寻字符串的功能, n:向下查找 ;N:向上查找?字符串——向下搜寻字符串的功能, n:向下查找 ;N:向上查找
- 实例
less /etc/profile——以分页方式展示/etc目录下的profile文件内容
- 说明
tail [-f] fileName——查看文件末尾的内容(默认后10行)(自己手动的不可以显示)(一般用来查看日志)- 说明
-f动态读取文件末尾内容并显示,通常用于日志文件的内容输出
- 实例
tail /etc/profile——显示/etc目录下profile文件末尾10行的内容tail -20/etc/profile——显示 /etc目录下的profile文件末尾20行的内容tail -f/diana/my.log——动态读取 /diana目录下的my.log文件末尾内容并显示
- 说明
mkdir [-p] dirName——创建目录说明
-p确保目录名称存在,不存在的就创建一个。通过此选项,可是实现多层目录同时创建
实例
mkdir java——在当前目录下,创建名为java的子目录mkdir -p diana/java——在工作目录diana中创建一个java子目录,如果diana目录不存在,则创建。即可以一次性创建多层文件目录
rmdir [-p] dirName——删除空目录- 说明
-p当子目录被删除后,使父目录为空的话,一并删除
- 实例
rmdir diana——删除名为diana的空目录rmdir -p diana/test——删除diana目录下的test目录,若删除后,diana为空目录,则删除dianarmdir diana*——删除名称以diana开头的空目录
- 说明
rm[-rf] name——删除文件或目录说明
-r将目录及目录中所有文件(目录)逐一删除,即递归删除-f无需确认,强制删除
实例
rf 1.txt——删除1.txt文件,会询问是否删除rm -f 1.txt——强制删除1.txt,不会询问rm -rf /*——强制删除根目录下所有文件rm -r diana/——删除名为diana的目录和目录中的所有文件,删除前需确认
touch fileName——如果文件不存在,新建文件touch 1.txt——创建1.txt
输出重定向
>——覆盖- 新输入的内容会覆盖原来全部的内容
>>——追加- 追加写,继续在后面写
ls -a > ls.txt——将当前目录信息输出到ls.txt中cat file1 > file 2——将文件1的内容覆盖到文件2 可以用于快速复制粘贴改名
ln——符号链接,类似于快捷方式ln -s [原文件或目录] [软链接名]——给原文件创建一个软连接(快捷方式)ln -s /root /home/diana/myroot——在diana目录下创建一个root目录的软连接ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 ~/ifcfg-ens33——将网卡配置文件软连接到家(root用户的目录是root)目录下
history——查看历史指令history 10——显示历史的近10行指令!15——执行第历史命令的第15条命令
# 拷贝移动命令
cp [-r] source dest——用于复制文件或目录- 说明
-r如果复制的是目录需要使用此选项,此时将复刻该目录下所有的子目录和文件\cp强制覆盖 不给出提示
- 实例
cp 1.txt diana/——将1.txt文件复制到diana目录中cp 1.txt ./2.txt——将1.txt复制到当前目录下,并改名为2.txtcp -r diana/ ./diane——将diana目录及目录下所有文件复制到当前目录下的diane目录下- 这就相当于将整个文件夹diana作为一个整体copy了过去
- copy完后目录结构为
diane/diana/file
cp -r diana/* ./diane——将diana目录下所有文件复制到当前目录下的diane目录下- 这就相当于将整个文件夹下的所有文件作为一个整体copy了过去
- copy完后目录结构为
diane/file
- 说明
mv source dest——为文件或目录改名、或将文件或目录移动到其他位置- 实例
mv 1.txt 2.txt——将1.txt重命名为2.txtmv 1.txt diana/——将文件1.txt移动到diana文件目录下mv 1.txt diana/2.txt——将1.txt移动到diana目录下,并改名为2.txtmv diana/ diane/——如果diane目录不存在,将diana目录改名为dianemv diana/ diane/——如果diane目录存在,将diana目录移动到diane目录下mv diana/* diane/——如果diane目录存在,将diane目录下的所有文件移动到diane目录下mv diana/* diane/——如果diane目录不存在,报错
- 实例
# 打包压缩命令
gzip/gunzip——压缩/解压缩 文件gzip ls.txt——压缩文件ls.txt——>ls.txt.gzgunzip ls.txt.gz
zip/unzip——压缩/解压缩 文件zip -r 1.zip diana——将diana目录及目录下所有文件 压缩成1.zipunzip -d ./lb 1.zip——将1.zip 解压到当前的lb目录下
tar [-zcxvf] fileName [files]——对文件进行 打包、解包、压缩、解压包文件后缀为 .tar表示只是完成了打包,并没有压缩
包文件后缀为.tar.gz表示打包的同时还进行了压缩
说明
-z: z代表的是gzip,通过gzip命令处理文件,gzip可以对文件压缩**(gz)**或者解压-c: c代表的是create,即创建新的包**(tar)**文件,与x互斥-x: x代表的是extract,实现从包文件中还原文件,与c互斥-v: v代表的是verbose,显示命令的执行过程-f: f代表的是file, 用于指定打包文件的名称
常用组合
-zcvftar -zcvf test.tar.gz diane——对diane文件目录进行压缩,打包,命名为 test.tar.gz
-cvftar -cvf test.tar diane——对diane文件目录进行打包,命名为 test.tar
-zxvftar -zxvf test.tar.gz——将test.tar.gz进行解压缩,解包操作,并放在当前目录下tar -zxvf test.tar.gz -C /user/local——将文件解压缩,解包后,放在 /user/local 目录中
-xvftar -xvf test.tar——将test.tar进行解包操作,并放在当前目录下
# 文本编辑命令
vi/vimvim 是一个文本编辑工具,在编辑文件时,可以对文本内容进行着色,比vi功能要好
需要自己安装vim——
yum install vim使用vim命令编辑文件时,如果指定的文件存在则直接打开文件,如果不存在,则新建文件
vim在编辑文本时,分为3种模式,可以相互切换
命令模式,插入模式,底行模式
vim打开文件的方式
vim 文件路径——打开指定的文件vim +数字 文件路径——打开指定的文件,并且将光标移动到指定行vim +/关键词 文件路径——打开指定的文件,并且高亮显示关键词vim 文件1 文件2 文件3——同时打开多个文件
命令模式(删除行,复制行,移动光标,粘贴等等)
命令模式下可以查看文件内容、移动光标(上下左右箭头,gg(快速移动到开头),G(快速移动到末尾))
通过vim命令打开文件后,默认进入命令模式
另外两种模式需要首先进入命令模式,才能进入彼此
底行模式——》命令模式——》插入模式
插入模式——》命令模式——》底行模式
插入模式(编辑)
- 插入模式下,可以对文件内容进行编辑
- 在命令模式下按[i,a,o]任意一个键,可以进入插入模式。进入插入模式后,下方会出现[insert]字样
- 在插入模式下按下ESC,回到命令模式
底行模式(搜索,替换,保存,退出,撤销,高亮等等)
- 底行模式下可以通过命令对文件内容进行查找、显示行号、退出等操作
- 在命令模式下按下[:,/]任意一个,可以进入底行模式
- 通过 /方式进入底行模式后,可以对文件内容进行查找
/ name(name为你要查询的词) - 通过 :方式进入底行模式后,可以输入 wq(保存并退出),q!(不保存退出),set nu(显示行号)
# 进程命令
ps——进程查看命令ps -ef——查看当前运行的所有进程的详细信息ps -ef|grep tomcat——查看tomcat的进程信息|在linux中称为管道符,可以将前一个命令的结果输出给后一个命令作为输入
ps -ef|grep xxx——查看xxx的进程信息
kill -9 id-9表示强制删除-15表示正常关闭id为进程名称
nohup Command[Arg ...][&]——用于不挂断地运行指定命令,退出终端不会影响程序的运行- 说明
Command要执行的命令Arg一些参数,可以指定输出文件&让命令在后台运行
- 实例
nohub java -jar xxx.jar &>hello.log &&>hello.log将日志输出到hello.log&后台运行
- 说明
# 防火墙命令
firewall-cmd --state——查看防火墙状态systemctl stop firewalld——暂时关闭防火墙(重启后开启防火墙)systemctl disable firewalld——永久关闭防火墙systemctl start firewalld——开启防火墙systemctl start mysqld.service——开启mysql服务
firewall-cmd --zone=public --add-port=8080/tcp --permanent——开放8080端口8080——指定要开放的端口/tcp——指定链接协议
firewall-cmd --zone=public --remove-port=8080/tcp --permanent——关闭8080端口firewall-cmd --reload——立即生效- 开放或者关闭端口后,需要执行这个,才能立即生效
firewall-cmd --zone=public --list-ports——查看开放的端口
# 操作软件命令
yum list xxx——查找有没有当前软件可安装yum list lrzsz——查找软件lrzsz
yum install vim——安装vim软件rpm -qa——查询当前系统安装的所有软件rpm -qa|mysql——查询当前系统安装的名称带mysql的软件
rpm -e --nodeps xxx——删除软件xxxsource /etc/profile——重新加载配置文件,立即生效
# 查找命令
find dirName -option fileName——在指定目录下查找文件-name——按名称find .-name *.java——在当前目录及其子目录下,查找.java结尾的所有文件find /diana -name *.java——在/diana 目录及其子目录下,查找.java结尾的所有文件
-user——按用户名find /opt -user root——查找opt目录下 root用户的文件
-size——按大小查找find / -size +200M——查找大于200M的文件-200M——小于200M200M——等于200Mk,M,G
locate——快速定位文件路径利用事先建立好的数据库来快速定位文件,无需遍历整个文件系统,查询速度较快
update——定位前,需要先更新数据库locate ls.txt——搜索文件
which——可以查看某个指令在哪个目录下which ls
grep [选项] word fileName——从指定文件中查找指定的文本内容一般与管道符结合使用
-n——显示匹配行及行号-i——忽略字母大小写grep Hello HelloWord.java——查找HelloWorld.java文件中出现Hello字符串的位置grep hello *.java——查找当前目录中所有.java结尾的文件中包含hello字符串的位置cat ls.txt |grep hello——查看文件中 带hello的某几行grep hello ls.txt——等价于上面的写法
netstat -tunlp——查看所有启动的服务netstat -tunlp|grep mysql——查看mysql的启动服务
ps -ef——查看当前运行的所有进程的详细信息ps -ef|grep tomcat——查看tomcat的进程信息
# 时间命令
date指令
date——输出时间- 输出——
2022年 06月 05日 星期日 10:55:53 CST date +%Y——输出年份date +%m——输出月份date +%d——输出日期date +%F——格式化输出时间(年月日)——等价于date +"%Y-%m-%d"- 输出——
2022-06-05
- 输出——
date +"%F %T"——格式化输出时间(年月日,时分秒)(必须加引号,表示不可分隔的整体)- 等价于
date +"%Y-%m-%d %H:%M:%S" - 输出——
2022-06-05 11:02:53
- 等价于
date -d "-1 day"——获取之前或者之后的某个时间(备份用)+表示之后,-表示之前hour-小时day-天year-年month-月
date -s "2022-06-05 10:10:10"- 修改系统当前时间
cal指令
cal——直接输出当前月份的日历,相当于cal -1cal -3——输出3个月的日历(前一个月,本月,后一个月)cal -y 2022——输出一年(2022)的日历
# 管道命令
管道符:|
可以用于过滤,特殊,扩展处理,主要是起一个辅助作用
- 过滤
|grepls |grep g——过滤当前目录下,名字带g的|,以管道符作为分界线,前面的命令的输出作为后面命令的输入grep,主要用于过滤
- 特殊案例
cat 1.txt | less——等价于less 1.txt(多此一举)
- 扩展处理
ls | wc -l——统计某个目录下文档的总个数
# 帮助命令
manmanual,手册,(包含了Linux中全部的命令手册,英文)
man 命令——进入手册- 按q——退出手册
# 其他命令
man 命令——man head——查看命令手册ifconfig——查看ip配置ip addr——查看ip地址sudo apt install git——安装git(sudo 是乌班图系统下的)sudo apt install xxx——安装xxx——没有东西会给出提示du -sh *——查询占用空间uname -a——查看系统版本which java——查看java安装目录wget +url——下载指定url的压缩包正常指令 > 文件路径——ll > ll.txt——将ll命令展示的东西,存储到文本中,而不显示在屏幕上 ——覆盖输出,会覆盖掉原先的文件内容
正常指令 >> 文件路径——ll > ll.txt——将ll命令展示的东西,存储到文本中,而不显示在屏幕上——追加输出,从原文件内容末尾继续添加# 高级指令
# init
运行级别
init0——关机init3——命令行页面init5——图形页面init6——重启
# hostname
操作服务器的主机名(读取、设置)
/etc/hostname——文件可以指定主机名hostname——表示输出完整的主机名- 输出——
localhost.localdomain
- 输出——
hostname -f——表示输出当前主机名中的FQDN(全限定域名)- 输出——
localhost
- 输出——
# id
查看一个用户的一些基本信息(包含用户id,用户组id,附加组id...),该指令如果不指定用户则默认当前用户
id——默认显示当前执行该命令的用户的信息- 输出——
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
- 输出——
id 用户名——默认指定用户的基本信息
# whoami
显示当前登陆的用户名,一般用于shell脚本,用于获取当前操作的用户名
whoami- 输出——
root
- 输出——
# ps (重点)
进程查询指令
ps -efps -ef|grep xxx——查看xxx的进程信息-e—— 等价于-A,表示列出全部的进程-f——显示全部的列(显示全部字段)- 执行结果

UID: 该进程执行的用户id。
PID:进程id。
PPID:该进程的父级进程id,如果一个程序的父级进程找不到,改程序的进程称之为僵尸进程。
C:Cpu的占用率,其形式是百分数。
STIME:进程的启动时间。
TTY:终端设备,发起该进程的设备识别符号。如果显示"?"则表示该进程并不是由终端设备发起。
TIME:进程的执行时间
CMD:该进程的名称或者对应的路径。
# top(重点)
查看服务器的进程占的资源
进入命令:
top(动态显示)退出命令:
q快捷键:
M——表示将结果按照内存(MEM)降序排列P——表示将结果按照CPU使用率降序排列1——切换各个cpu的详细信息
执行结果

PID: 进程id。
USER:该进程对应的用户。
PR: 优先级。(越大越好)
VIRT: 虚拟内存 (进程申请的内存)
RES: 常驻内存(进程总共使用的内存,包含了依赖使用的内存)
SHR: 共享内存(依赖进程所使用的内存)
计算一个进程实际使用的内存=常驻内存(RES)— 共享内存(SHR)
S:表示进程的状态(S表示睡眠,R表示运行)
%CPU: 表示CPU的占用百分比
%MEM:表示内存的占用百分比
TIME+:进程执行的时间
COMMAND: 进程的名称或者路径
# du -sh
查看目录的真实大小
du-sh 目录路径-s—— 只显示汇总的大小-h——以高可读性的形式进行显示
示例:
du -sh java——392M java
# find
用于查找文件
find 路径范围 选项 参数值name——按照文档名称进行搜索type——按照文档的类型进行搜索-表示文件(在使用find的时候需要使用f来替换)d表示文件夹
find / -name ls.txt——从根目录(包含其子文件夹)开始找,找到名字为ls.txt的文件/——根目录--路径范围-name——按照文档名称搜索--选项ls.txt——文档名--参数值
find /diane -name *.conf- 从
/diane目录(包含其子文件夹)开始找,找到所有后缀为.conf的文件
- 从
find ./ -name *.conf- 从当前目录及其子目录下开始找,找到所有后缀为
.conf的文件
- 从当前目录及其子目录下开始找,找到所有后缀为
find /diane -type f- 从
/diane目录(包含其子文件夹)开始找,找到所有的文件
- 从
find /diane -type f|wc -l从
/diane目录(包含其子文件夹)开始找,找到所有的文件,并将其作为管道的输入,统计一下文件的数量find /diane -type d- 从
/diane目录(包含其子文件夹)开始找,找到所有的文件夹
# service
- 从
用于控制一些软件的服务 启动/停止/重启
service 服务名 start/stop/restartservice NetworkManager stop——禁用网络管理service network restart——重启网络服务
# kill
使用kill杀死进程
kill 进程PIDkillall 进程名称ps -ef|grep xxx——通过ps命令查看进行PID
# ifconfig
获取网卡信息
ifconfig
# reboot
重新启动计算机
reboot——重新启动计算机reboot -w——模拟重新启动计算机,但是不重启(只写关机与开机的日志信息)
# shutdown
关机
shutdown -h 1==shutdown- 1分钟后关机
shutdown -h now "关机提示"- 立即关机,并给出关机提示
shutdown -h 15:25 “关机提示”- 设置关机时间,并给出关机提示
shutdown -c- 取消定时关机命令
shutdown -r now- 立即重启计算机
其他关机命令
init 0haltpoweroffsync——将内存的数据同步到磁盘- 以免数据丢失,可以在关机前执行该指令
- 现在的关机指令,基本都在执行关机前,底层调用了这个命令
# uptime
输出计算机的持续在线时间(计算机从开机到现在运行的时间)
uptime- 输出——
09:40:31 up 5 min, 3 users, load average: 0.04, 0.08, 0.05
- 输出——
# uname
获取操作系统的信息
uname——获取操作系统的类型Linux
uname -a——获取全部的系统信息**(类型,全部主机名,内核版本,发布时间,开源计划)**Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
# netstat
查看网络的连接状态
netstat -tnlp
t——表示只列出tcp协议的连接n——表示将地址从字母组合转换成ip地址,将协议转换成端口号来显示l——表示过滤出“state(状态)”列中其值为LISTEN(监听)的连接p——表示显示发起连接的进程PID和进程名称
# 指令应用
删除
/diane下所有A开头的文件rm -f /diane/A*
系统重要文件需要备份,如何把
/diane/java备份到/diana目录下cp -r /diane/java /diana
如何查看系统最后创建的3个账户
tail -3 /etc/passwd
什么命令可以统计当前系统中一共有多少账户
wc -l /etc/passwd
如何创建
/diane/ll.txt文件touch /diane/ll.txt
如何通过vim编辑打开
/diane/ll.txtvim /diane/ll.txt
如何查看
/etc/passwd的头三行和尾三行head -3 /etc/passwdtail -3 /etc/passwd
如何在
diane目录下**一次性(-p)**创建目录text 1 2 3 4mkdir -p test 1 2 3 4(在diane目录下)
如何最快的返回当前账户的家目录
cd ~cd
如果查看
/etc所占的磁盘空间du -sh /etc
如何删除
/diana下所有文件rm -rf /diana/*
# Linux自有服务
# 组管理和权限管理
- 其它组——除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组

文件所有者,及所有组
- 用户lisi信息

- lisi创建文件的信息
- 可以看出,第一个是文件所有者 lisi;第二个是文件所在组diana,默认用户所在组

chown 用户名 文件名—— 修改文件的所有者-R——如果是目录,则使其下所有子文件或者目录递归生效chown -R diana file——将file文件夹及其下所有文件的所有者改为dianachown diana 1.txt——将1.txt的文件所有者改成diana修改前

修改后

chgrp 组名 文件名——修改文件所在组-R——如果是目录,则使其下所有子文件或者目录递归生效继续前文修改
chgrp liangbing 1.txt——将1.txt文件组修改至liangbing再次修改后

# 用户管理
每个用户有唯一的用户名
下面所有的用户操作的命令,除了修改密码,其他均只有root用户有权限操作
重要三个文件
/etc/passwd——存储用户的关键信息/etc/group——存储用户组的关键信息/etc/shadow——存储用户的密码信息
useradd 选项 用户名——添加用户常用选项(选项可以为空)
-g——表示指定用户的用户主组,选项的值可以是用户组的id,也可以是组名-G——表示指定用户的用户附加组,选项的值可以是用户组的id,也可以是组名-u——uid 用户的id(用户标识符),系统默认会从500以后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义


添加用户(无选项)——会自动生成 用户主组,用户附加组,uid
useradd diane——添加用户 diane- uid——1000
- 用户主组——1000
- 用户附加组——1000
useradd diana——添加用户 diana- uid——1001
- 用户主组——1001
- 用户附加组——1001
添加用户(指定选项)
useradd -g 1000 -G 1001 -u 666 liangbing——添加指定用户liangbing- uid——666——
passwd - 用户主组——1000——
passwd - 用户附加组——1001——
group - 用户名——
liangbing
- uid——666——
验证创建用户是否成功
- 验证
/etc/passwd的最后一行,查看是否有新创建的用户信息 - 验证是否存在home目录(在centos下创建好用户之后随之产生一个同名的家目录)
- 验证
/etc/passwd补充
- 用户名:密码位:用户ID:用户组ID:注释:家目录:解释器shell
- 用户名: 创建新用户名称,后期登陆需要输入
- 密码:一般都是x,表示密码的占位,并不是真正的密码
- 用户ID:用户的标识符(uid)
- 用户组ID:该用户所属的主组ID
- 注释:解释该用户是做什么的
- 家目录:用户登陆进入系统后默认的位置
- 解释器shell:等待用户进入系统之后,用户输入指令之后,该解释器会收集用户输入的指令,传递给内核处理
usermod 选项 用户名——修改用户- 常用选项
-g,-G,-u——同上-l——修改用户名(小写的L)
usermod -l lisi zhangsan——将zhangsan用户名修改为lisiusermod -g wudang zwj——将zwj的组修改至wudang
- 常用选项
passwd 用户名——设置密码Linux不允许没有密码的用户登陆到系统,因此没有密码的用户处于锁定状态,不允许登陆
su 用户名——切换用户名- 从root往普通用户切换不需要密码,但是反之需要root密码
- 切换用户前后的工作路径不变
- 普通用户没有办法访问root用户家目录,但是反之可以
userdel 选项 用户名- 选项
-r——表示删除用户的同时,删除其家目录,谨慎使用 - 不带选项的话,表示删除用户的同时,保留其家目录,一般建议保留
- 可以直接删除没有登陆的用户
- 如果用户在登陆,需要先杀死其进程(kill),然后在删除用户
- 选项
# 用户组管理
groupadd 选项 用户名组- 常用选项
-g——类似于用户添加里面的-u,表示自己设置一个自定义的用户组ID数字,如果自己不指定,系统会自动生成
groupadd liang——创建用户组 liang
- 常用选项
groupmod 选项 用户组名- 常用选项
-g-n——类似于用户修改里面的-l,表示设置新的用户组的名称
groupmod -g 500 -n bing liang——将用户组liang 修改名称为bing,修改组号为500
- 常用选项
groupdel 用户组名groupdel bing——删除用户组 bing- 组内没有人,可以直接删除
group lisi——删除用户组lisi- lisi的组号是用户zhangsan的主组,不允许直接删除用户组
- 需要先将组内用户移走或者删除,才可以删除用户组
# 权限
- rw- r-- r--.d rwx r-x r-x.l rwx rwx rwx.b rw- rw- ---.c rw- rw- ---.0--9位说明
第0位表示文件类型(
d,-l,c,b)l——表示链接,相当于windows的快捷方式d——表示目录,相当于windows的文件夹c——表示字符设备文件,例如,鼠标,键盘,b——表示块设备,比如 硬盘-——普通文件
1-3位——确定文件所有者拥有该文件的权限——User
4-6位——确定文件所在组(同用户组)拥有该文件的权限——Group
7-9位——确定其他用户拥有该文件的权限——Other
r,w,x,-——文件——r=4,w=2,x=1——rwx=4+2+1=7r——代表可读,可以读取,查看w——代表可写,可以修改,但是不代表可以删除该文件; ——删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
x——代表可执行,文件可以被执行
r,w,x,-——目录r——代表可读,可以ls查看目录内容- 当目录没有r权限时,其他用户不能通过ls查看目录内文件
- 但是若其他用户对目录内文件有写权限,虽然无法通过ls列出该目录下文件,仍然可以直接对写该文件进行修改
w——代表可写,可以修改,对目录内部文件创建+删除,重命名目录;x——代表可执行,可以进入该目录——cd目录
ll解读drwxr-xr-x. 3 root root 16 7月 19 21:04 2- 3 ——文件:硬连接数 目录:一层子目录内的文件数
- 第一个root ——表示 文件所有者
- 第二个root——表示文件所在组
- 16——文件大小(字节)
- 时间表示文件的修改时间
- 2 ——表示的文件的名称
chmod——修改文件或目录的权限(绿色表示可执行文件)第一种方式:
+,-,=变更权限u:所有者,g:所有组,o:其他人 ,a:所有人(u,g,o的总和)
chmod u=rwx,g=rw,o=x abc——给abc文件直接赋予权限chmod o+w abc——给其他人 增加写权限chmod a-x abc——给所有人 减少执行权限chmod a-x-w abc——给所有人 减少执行权限,减少写权限
==第二种:通过数字变更权限==
r=4,w=2,x=1——rwx=4+2+1=7
wx=3,rx=5,rw=6,rwx=7
chmod u=rwx,g=rw,o=x abc——给abc文件直接赋予权限chmod 761 abc——与上等价
# 权限实践
实践1——警察,土匪
警察组 polic , 土匪组 bandit
jack,jerry 警察
xh,xq 土匪
创建组
- root:
groupadd polic,groupadd bandit
- root:
创建用户
- root:
useradd -g polic jackuseradd -g polic jerryuseradd -g bandit xhuseradd -g bandit xq
- root:
jack创建一个文件,自己可以读写,本组人可以读,其他组没有权限
- jack:
touch jack.txt——在jack家目录下chmod 640 jack.txt
- jack:
jack修改文件,让其他组可以读,本组人可以读写
- jack:
chmod 664 jack.txt
- jack:
xh投靠警察,看看是否可以读写
root:
usermod -g polic xhxh 无法进入jack家目录,因此无法对文件进行修改
- 如果要对目录内的文件进行操作,需要有该目录的相应权限
root:
chmod 777 /home/jack——开放jack家目录的所有权限xh:
cd /home/jack,vim jack.txt——可以成功读写xq:
cd /home/jack,vim jack.txt——只读文件,不可写入wq!——强制保存,导致jack.txt的所有者修改为xq
实践2——西游记
建立两个组(神仙-sx,妖怪-yg)
- root:
groupadd sxgroupadd yg
- root:
建立4个用户(wk,bj,--yg)(ts,ss,--sx)
- root:
useradd -g sx tsuseradd -g sx ss - root:
useradd -g yg wkuseradd -g yg bj
- root:
用wk建立一个文件(monkey.java 该文件写入 i am monkey)
这里不考虑目录影响,该目录对所有人开放所有权限
- wk:
touch mokey.java - wk:
echo "i am mokey" >> mokey.java
- wk:
给bj一个 r,w的权限,ts,ss对该文件没有权限
- wk:
chmod 760 mokey.java
- wk:
八戒修改monkey.java ,加入一句话(i am pig)
- bj:
echo "i am pig" >> mokey.java
- bj:
把ss放入妖怪组
- root:
usermod -g yg ss
- root:
让ss修改该文件 monkey.java 加入一句话 (i am person)
- ss:
echo "i am pig" >> mokey.java
- ss:
# 任务调度
# 循环任务调度

设置任务调度文件 :/etc/crontab
- 设置个人任务调度——执行
crontab -e命令
- 设置个人任务调度——执行
- 输入任务到调度文件(有空格)
*/1 * * * * ls -l /etc/ > /tmp/to.txt- 每小时的每分钟执行一次
ls -l /etc/ > /tmp/to.txt - 占位符:

- 特殊符号:
- 例子 
定时调度shell脚本,在shell脚本中放入多个调度任务
一分钟一次,将当前日期和日历追加到
/diane/time.txt中写脚本
vim my.sh- 输入:
date >> /diane/time.txt - 输入:
cal >> /diane/time.txt
给脚本增加执行权限
chmod u+x my.sh
定时调度脚本
crontab -e- 输入:
*/1 * * * * my.sh
crontab -r——终止任务调度——删除了写入的任务调度crontab -l——列出当前有哪些任务调度service crond restart——重启任务调度
# 一次性任务调度
- at 命令是一次性定时计划任务,at 的守护进程 atd 会以后台模式运行,检测作业队列来运行
- 默认情况下,atd 守护进程每60s检查一次作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
- at 命令 是一次性定时计划任务,执行完一个任务后 不在执行此任务
- 在使用 at命令的时候,一定要保证 atd 进程的启动
at [选项] [时间]选项

时间

Ctrl + D结束at命令的输入
at 定时任务 案例
输入过程
- 输入错误,按住
ctrl+backspace来删除 - 按
ctrl +u来进行撤销 - 输入报错:
Can't open /var/run/atd.pid to signal atd. No atd running?- 解决方法:
systemctl restart atd
- 解决方法:
- 输入错误,按住
2天后的下午5点执行
/bin/ls/homeat 5pm + 2days- 输入:
/bin/ls /home
atq 命令来查看系统中没有执行的工作任务
atq
明天17点钟,输出时间到指定文件内,如
/root/date100.logat 17:00 +1days- 输入:
date >> /root/date100.log
2分钟后,输出时间到指定文件内,如
/root/date200.logat now + 2minutes
删除已经设置的任务, atrm编号
atrm 5——删除5号任务atrm 4 5 6——删除 4 5 6 号任务
# Linux分区
# 目录
linux一切皆文件



# 磁盘分区机制
- 挂载机制——将硬盘的某个分区跟文件链接起来

硬盘情况
- SCSI硬盘,标识为
sdx~——x=a,b,c……——~=1,2,3…… sda1---sda2---sda3---sda4

- SCSI硬盘,标识为
查看所有设备的挂载情况
lsblk--lsblk -f

对新增硬盘分区
新增一块硬盘,需要重启
分区命令——
fdisk /dev/sdb—(sdb是新增硬盘名称)m——显示命令p——显示磁盘分区n——新增分区d——删除分区w——写入并退出- 开始分区后,输入n,新增分区,然后选择p,分区类型为主分区,两次回车选择默认,最后输入w保存分区并退出,若不保存,则输入q
格式化磁盘(获得了一个UUID)——
mkfs -t ext4 /dev/sdb1—(ext4是文件格式,sdb1是新增硬盘分区名称)挂载——
mount /dev/sdb1 /newdisk/-(sdb1是新增硬盘分区名称,newdisk是用来挂载的新建文件夹)- 重启后 挂载关系会失效
永久挂载
vim /etc/fstab/dev/sdb1 /newdisk ext4 defaults 0 0
取消挂载——
umount /dev/sdb1或者umount /newdisk
# 磁盘实用指令
df -h——查询系统磁盘使用情况du [选项] /目录——查询指定目录的磁盘占用情况-s——指定目录大小汇总(只显示目录的总用量,显示一个)-h——带计量单位-a——含文件(默认不含文件)--max-depth=1——子目录深度(默认是最深处)-c——列出明细的同时,增加汇总值(没啥用)
统计/opt文件夹下文件的个数
ll /opt | grep "^-" | wc -l"^-"——表示以-开头的,正则表达式,即普通文件
统计/opt文件夹下目录的个数
ll /opt | grep "^d" | wc -l"^d"——表示以d开头的,正则表达式,即目录
统计/opt文件夹下文件的个数,包括子文件里的
ll -R /opt | grep "^-" | wc -l-R——表示递归,深入子文件内
统计/opt文件夹下目录的个数,包括子文件里的
ll -R /opt | grep "^d" | wc -l
以树形显示目录结构
tree /opttree -L 1 /opt——只显示1层
# 网络配置
# 网络基础
- 三种模式

查看ip地址
- Window下
ipconfig- 找到
VMnet8 
- Linux下
ifconfig- 找到
ens33 
- Window下
网络链接测试
ping ip=ping 192.168.159.1ping 网站=ping www.baidu.com
NAT模式(共享主机ip)

# 网卡设置
网络问题(当连不上网时,可以这样操作一下)
service NetworkManager stop——禁用网络管理service network restart——重启网络服务
和git命令,解决合并冲突时差不多
网卡的配置文件太深,可以通过创建软连接的方式
ln -s 原路径 现路径ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 ~/ifcfg-ens33——将网卡配置文件软连接到家目录下

# 远程链接
安装SSH连接工具
- SSH,建立在应用层基础上的安全协议
- 通过SSH连接工具,可以实现从本地连接到远程的Linux服务器
- 这里安装SSH连接工具,是为了最大限度的模拟企业工作
- 链接操作
- 点击左上角文件夹,点开,在点击左上角文件夹,选择SSH链接
- 输入名称(任意),主机输入要链接的ip地址
- 输入用户名和密码
- 再次进入,有个快速连接,里面保存了之前的链接信息,直接点击即可
# 主机名和hosts映射
hostname操作服务器的主机名(读取、设置)
/etc/hostname——文件可以指定主机名hostname——表示输出完整的主机名- 输出——
localhost.localdomain - 修改后——
diana
- 输出——
hostname -f——表示输出当前主机名中的FQDN(全限定域名)- 输出——
localhost
- 输出——
设置hosts映射
通过ping 主机名找到Linux系统
- Windows
C:\Windows\System32\drivers\etc\hosts——在该文件下写入映射关系192.168.159.100 diana——(ip 主机名)
- Linux
etc/hosts——在该文件下写入映射关系192.168.137.1 diana-pc——(ip windows 主机名)
- Windows
主机名解析机制分析(Hosts、DNS)
- Hosts 是一个文本文件,用来记录 IP和 Hostname的映射关系
- DNS 是域名系统,是互联网上作为域名和IP地址相互映射的一个分布式数据库
- DNS 实例

# Linux软件安装
# 软件安装方式
- 二进制发布包安装
- 软件已经针对具体平台编译打包发布,只要解压,修改配置即可
- rpm安装
- 软件已经按照redhat的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题
- yum安装
- 一种在线安装软件方式,本质上还是rpm安装,自动下载安装包并安装,安装过程中自动解决库依赖问题
- 源码编译安装
- 软件以源码工程的形式发布,需要自己编译打包
# jdk
JAVA_HOME=/usr/local/jdk1.8.0_361
PATH=$JAVA_HOME/bin:$PATH

# Tomcat
- 安装

- 启动验证

- 防火墙命令
- 在window下,访问tomcat需要开放 8080端口

# Mysql
- 安装前检测

- 安装网站介绍 (opens new window)
- 安装报错
- 失败的软件包是:mysql-community-libs-compat-5.7.37-1.el7.x86_64 GPG 密钥配置为:file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
- 解决方案
- 去这个文件下面 /etc/yum.repos.d/mysql-community.repo 修改对应安装版本的gpgcheck=0即可,默认值为1
- 安装报错
- 安装后启动,并查看

设置mysql密码

从远程链接mysql服务器
开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
允许远程链接(在mysql下运行)
use mysql;update user set host='%' where user='root';FLUSH PRIVILEGES;
# lrzsz
yum list lrzsz——查看可安装软件yum install lrzsz.x86_64——安装软件- 使用
rz弹出对话框,选择文件,上传文件
# Redis
- 安装

- 使用
- src 目录下
redis-server——启动服务redis-cli -h localhost -p 6379 -a 123456—— -h选择连接地方,-p选择连接端口,-a选择密码auth 123456——也可以启动服务之后,显示输入密码
- src 上层目录下,有个
redis.conf配置文件src/redis-server ./redis.conf——修改配置文件后,启动服务- 修改配置
requirepass 123456——输入密码登陆daemonize yes——后台运行# bind 127.0.0.1——注释掉这句话,表示允许远程访问
- src 目录下
# Nginx
下载安装

目录结构

Nginx命令(sbin/nginx)
./nginx -v——查看版本号./nginx -t——检测配置文件(/conf/nginx.conf)是否有问题./nginx——启动nginx服务(master,worker)默认两个进程,,(默认端口号 80)./nginx -s stop——关闭nginx服务./nginx -s reload——重新加载配置文件
Nginx配置文件结构

- 全局块
- events块
- http块
Nginx具体应用
- 部署静态资源
- 标红的地方是 语法, 黑色的地方是可以修改的地方
- 可以配置多个server,监听多个端口

- 反向代理概念
- 正向代理概念 ———— 翻墙,vpn
- 反向代理——用户无需感知,用户访问反向代理服务器,即可得到web服务器上的内容,但是用户不知道它访问的是反向代理服务器.


反向代理配置
配置
server { listen 81; server_name localhost; location / { proxy_pass http://169.254.176.155; #反向代理,将请求转发到指定服务 } }效果
访问
http://192.168.159.100:81/,nginx服务器的端口可以访问到
http://169.254.176.155/,window 下 tomcat服务器端口
负载均衡概念

负载均衡配置
- 理论上来说,里面配置的应该是多台服务器,但是咱们没有多余的服务器,就用不同的端口号来代替
- weight为权重,权重越多,访问机会越大
upstream targetserver{ #upstream指令可以定义一组服务器 server 169.254.176.155:80 weight=100; server 169.254.176.155:8080 weight=50; #只能配置到端口,后面不能跟路径了 } server{ listen 82; server_name localhost; location / { proxy_pass http://targetserver; } }- 负载均衡测量

- 部署静态资源
# Linux项目部署
# 手工部署项目(步骤)
将web项目打jar包,并传到llinux中
在linux中运行jar包
java -jar xxx.jar
检测防火墙,确保8080端口对外开放
firewall-cmd --zone=public --list-ports
在浏览器中访问
192.168.159.131:8080/host改为后台运行springboot程序,并将日志输出到日志文件
nohup Command[Arg ...][&]——用于不挂断地运行指定命令,退出终端不会影响程序的运行- 说明
Command要执行的命令Arg一些参数,可以指定输出文件&让命令在后台运行
- 实例
nohup java -jar xxx.jar &>hello.log &&>hello.log将日志输出到hello.log&后台运行
- 说明
停止服务
ps -ef|grep java——查找java进程——39390kill -9 -39390——杀死java对应进程
# shell脚本自动部署项目

安装git
yum list git——查看git可安装版本——git.x86_64yum install git.x86_64——安装gitgit config --global user.name "diana"——设置用户名git config --global user.email "diana_liangbing@126.com"——设置邮箱
git clone https://gitee.com/diana-liangbing/hellogit.git——克隆项目
安装maven

编写shell脚本
#!/bin/sh echo ============================== echo 自动化部署脚本启动 echo ============================== echo 停止原来运行的工程 #定义变量 方便查询进程 APP_NAME=hellogit #查找包含hellogit的进程,并将其停掉 tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ];then echo 'STOP Process...' kill -15 $tpid fi sleep 2 #再次查找进程,如果还存在,强制杀死,否则输出 停止成功 tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ];then echo 'Kill Process!' kill -9 $tpid else echo 'Stop Success!' fi echo 准备从Git仓库拉取最新代码 #进入存放项目的目录 cd /diane/java-project/project/hellogit echo 开始从Git仓库拉取最新代码 git pull echo 代码拉取完成 echo 开始打包 output=`mvn clean package -Dmaven.test.skip=true` #clean,package,并跳过测试 cd target echo 启动项目 #后台启动项目,并将日志输出到当前目录下的hellolinux.log中 nohup java -jar hello-linux-0.0.1-SNAPSHOT.jar &>hellolinux.log & echo 项目启动完成为用户授予执行shell脚本权限


- 执行shell脚本
./bootStart.sh——直接打开就是执行
- 设置静态ip
static没有引号

