2023-4-10之前关于linux的学习
linux 常用指令
reboot whoami useradd passwd groupadd clear usermod tree rpm安装(-ivh -qai) yum安装 init [0~6]变更linux运行级别(常用3多用户、5图形化界面) man help less查看大文件 head tail显示文件前/后几行 ln链接 history历史操作 date显示时间 cal显示日历 find查找文件 locate查找符合条件的文件 |grep管道 gzip/gunzip zip/unzip tar压缩/解压 chown修改文件所有者和 chgrp修改文件所属组 chmod修改文件权限(权限代码777等) crontab/at定时任务(周期/一次) su变更使用linux用户 free常见查看内存 lsof超级工具
lsblk查看设备挂载情况hda3 fdisk创建维护分区表 mkfs格式化分区 mount挂载分区(前三个是挂载过程) 上面一行实现的是临时挂载 如果实现永久的需更改/etc/fstab,再mount
df磁盘使用情况 du目录磁盘使用情况 wc计算字数(也可读标准输入设备)
网络配置
编辑vi /etc/netplan/50-cloud-init.yaml
为什么需要网络配置,自动获取的inet可能每次都不同,再进行操作的时候可能会麻烦
hostname查看主机名(/etc/hostname可以修改) 设计hosts映射,在windows中C:\Windows\System32\drivers\etc\hosts中加入设置的inet 主机名(关于主机名解析机制分析,比如ping域名,先从浏览器缓存中查找对应ip,没有就从本地DNS中查找,还没有就从自己设置的hosts中查找,没有的话最后从公网DNS中查找,在没有就返回域名不存在)(会产生域名劫持的存在,因为公网DNS是最后查找,在此之前如果访问的域名不是公网的,那么就会访问自己规定的ip地址,也就是常见的"无视风险继续访问")
进程管理(程序静态,run后成进程)
ps查看进程(加-ef可以查看父进程,-aux)
kill/killall终止进程 -9表强制 (应用:停止远程登录sshd进程,再适当的时间恢复sshd,恢复方法是/bin/systemctl start sshd.service)
pstree查看进程树
top动态监控进程(其中load-average平均值大于0.7可能需要清理)(交互P(CPU占用)/M(内存使用)/N/q)(输入u然后加用户名,可以实时监控该用户进程,输入k,加9结束进程)(top -d 数字改变刷新时间)
netstat监控网络状态(-n -p -t -l -u)包括端口进程
服务管理
service管理服务(status/start/stop) setup查看所有服务(包括可以更改自启动)
systemctl get-default查看当前运行级别(3多用户,5图形化界面)
(重要)systemctl设置服务的自启动状态(enable/disable/is-enabled/stop/status/start)
chkconfig让系统再运行某级别时关闭某服务
firework让防火墙打开某端口(应用较多)-cmd --permanent --add/--remove-port=端口号/协议
使生效firework --cmd --reload 查询--cmd --query-port=端口号/协议
shell脚本学习
以 #!/bin/bash 开头,有可执行权限
注意:1.等号两侧不要空格,2.变量最好大写
执行方式: 1.给脚本+x权限,输入路径 2.sh+脚本
用法:
撤销变量unset(静态变量readonly不能)
输出变量echo $变量名
A='xxx'将xxx的结果赋值给A,A=$(date)等价于A='date'
export将变量输出为环境变量/全局变量(被所有文件共享),如export XXX=/etc/tomcat 之后还需source 配置文件 使之生效
多行注释 :<<! 内容 !
位置参数: ./xxx.sh [第一个参数] [第二个] ...
$数字 表示第几个参数; $* 表示所有参数(整体对待); $@ 表示所有参数(区分对待); $# 参数个数
预定义变量:$$当前进程的进程号 $!后台最后一个进程号 $?为0表示上一个命令正确执行
运算符:$((运算符))|$[运算符]|expr m + n(有空格) 如果要将值赋值需在运算式两侧加''(单引号)(只有expr需要) (运算符不一样的:*改为\*)
条件判断:if []里面加判断条件(注:中括号两边需要有空格) then 语句 elif [] then 语句 fi结束
判断符号: 字符串:比较= ; 整数比较: 小于lt 小于等于le 等于eq 大于gt 大于等于ge 不等于ne; 权限比较:有xxx的权限r/w/x; 按照文件存在比较:f(文件)/e(文件/文件夹)/d(文件夹)
流程控制(类似于switch):case $变量 in "值1") 语句;; "值2) 语句;; *) 语句;; esac
for循环: 第一种方法for 变量 in 值1 值2... do 语句 done
第二种方法for (( 初始值;循环控制条件;变量变化++/-- ) do 语句 done
while循环: while [ 条件判断 ](空格!) do 语句 done
获取控制台输入read:-P指定提示符 -t指定等待时间 例: read -P "提示" 变量名
函数:basename返回/最后的部分,常用于获取文件名 最后加参数相当于将文件名中与参数相同的部分删除
dirname与basename相反,是获取路径
自定义函数:[ function ] 函数名[()]{ 语句;[return xx;] } 调用就是函数名 [值](中括号中的是选择性写)
用例:备份数据库:参考脚本/usr/sbin/zzzzzzzzzzzzcash.sh
#!/bin/bash # 备份目录 BACKUP=/data/back/up # 当前时间 DATETIME=${date +%Y%m%d_%H%M%S} echo $DATETIME # 如果目录不存在就创建 [ ! -d "${BACKUP}/{DATETIME}" ] && mkdir -p "${BACKUP}/{DATETIME}" # 数据库地址 HOST=localhost # 数据库用户 DB_USER=root # 数据库密码 DB_PWD= # 数据库名 DATABASE=my # 导出备份数据 mysqldump -u${DB_USER} -p --host=${HOST} -q -R --databases${DATABASE} | grep > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz # 整理成tar.gz cd ${BACKUP} tar -zvcf $DATETIME.tar.gz ${DATETIME} rm -rf ${BACKUP}/${DATETIME} # 防止文件过多,删除十天前的备份(其中-exec 命令 {} \;是标准格式,表示将前面的结果交给exec后面的命令处理) find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \; echo "备份${DATETIME}成功"
远程登录
ssh远程登录(ubuntu默认是没有安装sshd服务,需apt install net-tools) (涉及集群的开发)
在每台服务器上需执行sudo apt-get install openssh-server来安装ssh服务端和客户端
日志管理
日志文件放在/var/log文件夹下,lastlog查看用户最后一次登录,boot.log启动日志,cron定时任务相关,mailog邮件信息,message绝大多数重要信息(包括系统出问题),secure验证和授权(如ssh,su,sudo),ulmp记录当前登录用户信息
rsyslogd日志管理服务(管理所有日志文件)(在操作linux时先ps查看rsyslogd程序是否启动,也可以systemctl查看自启动),其配置文件在/etc/rsyslog.conf
journalctl内存日志,每次关机清空
自定义日志:在rsyslog.conf中编写如*.* /var/log/hsp.log #在hsp.log中记录所有级别的事件
日志轮替(有许多参数):rsyslog.conf配置文件中某项日志有dateext参数,说明该日志有轮替
轮替可以写在/etc/logrotate.conf,也可以单独把某个日志轮替规则写进/etc/logrotate.d/,如果自定义日志轮替建议写在logrotate.d中
虚拟机相关内容:
定制linux
定制虚拟硬盘/挂载/定制指令(不熟练)
linux内核
linux备份和恢复
dump支持分卷备份和差异备份[-0~9(0最全)][-f备份名] restore恢复备份文件四个模式C/i/r/t
linux可视化管理
webmin管理unix/linux:(是一个服务,需要先在linux中启动)
管理进程,系统日志,mysql服务器,ssh服务,执行命令,IP允许访问,集群管理
bt(宝塔):
资源负载情况以及网络/磁盘IO,安全情况,计划任务(shell脚本等),mysql管理,防火墙管理,bt default显示密码
部分操作中需要注意的:
再筛选ip地址中的某个字段时需要注意:在筛选完数据需要先|sort再|uniq(统计) -c
cut/awk都是切割字段,只不过cut只能切割单字符
如果mysql密码忘记后,在/etc/my.cnf加入skip-grant-tables,然后进mysql中mysql库中的user表中的authentication_string(密码)字段
tcpdump用来监听某个端口
Nginx服务器常用模块:rewrite重写,access来源控制,ssl安全加密,ngx_http_gzip_module网络传输压缩,ngx_http_proxy_module代理,ngx_http_upstream_module定义后端服务器列表,ngx_cache_purge缓存清除
chattr(锁定文件,日常用于重要文件如/etc/xxx的锁定)(防止有人恶意用chattr解锁,可以将chattr指令mv走,再修改名称)
SUID,SGID,Sticky可以设置特殊权限
防止恶意入侵者使用rootkit脚本,安装chkrootkit来检测
centOS启动流程需再了解
web服务器负载架构:Nginx,Haproxy,Keepalived,LVS
优化linux系统:
高并发问题产生后,优化分为两种:
1.架构优化:负载均衡(集群)
2.linux内部优化:网络,磁盘io,文件链接,安全优化,监听端口问题,关掉不必要的服务等;具体规则:不用root用sudo提升权限,cound定时更新服务时间,配置yum源指向镜像网址,配置防火墙控制端口,打开最大文件数(vim /etc/profile ulimit -SHn 65535),配置合理的监控策略,对nginx、apache优化,对内核参数优化(/etc/sysctl.conf),锁定重要文件chattr,禁用不必要的服务setup
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本