集约化网站数据库建设规范工作感悟及心得
集约化网站数据库建设规范,工作感悟及心得,郴州网站建设企业,广州做网站 汉狮网络一. Linux组成 1. 内核 内核#xff1a;系统空间的代码和数据的集合称为内核#xff08;Kernel#xff09;#xff1b;kernel是操作系统内部最核心的软件#xff0c;和硬件打交道的 1.对cpu进行管理#xff0c;进程调度到cpu里进行管理 2.对内存进行空间的分配#xff0…一. Linux组成 1. 内核 内核系统空间的代码和数据的集合称为内核Kernelkernel是操作系统内部最核心的软件和硬件打交道的 1.对cpu进行管理进程调度到cpu里进行管理 2.对内存进行空间的分配哪些内存空间已经使用了哪些还没有使用分配给了哪些进程等 3.对进程进行管理创建调度销毁 4.对磁盘里的文件系统进行管理文件的读取和写入查找等进行管理 5.对网络以及其他的硬件进行管理例如网卡声卡显卡等 查看内核和centos的版本 [rootlocalhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[rootlocalhost ~]# uname -r
3.10.0-1160.el7.x86_64lsmod 查看内核里加载了哪些模板 modprobe 添加和删除内核的模块 添加
[rootlocalhost cron.d]# /sbin/modprobe ip_nat_ftp
删除
[rootlocalhost cron.d]# /sbin/modprobe -r ip_nat_ft2. 系统调用 系统调用 是内核给外面的应用程序的接口–》库方法–》系统调用也是程序是内核给外面的应用程序提供的实现某个功能的程序 例如 fork(),kill(),write(),read()等函数--》系统调用 system call3. 应用程序
应用程序 实现具体的某个功能的程序例如mkdir,vim,rm等
4. shell解释器
shell解释器 也是一个程序给命令行操作使用的–》不是所有的程序都会使用
5. 库函数 库函数 也是实现某个功能的程序相当于一个轮子可以被其他的程序调用这些库都是公开的大家都可以去调用 是A程序共享出来的B程序或者C程序可以去调用二. Linux语法
1. 语法和变量
1.1 语法 格式命令 选项 参数目录文件夹 常用选项 -a 显示所有的文件包括隐藏文件 -A 显示所有的文件不包括隐藏文件的.和… 其他隐藏文件都显示 -l 显示文件的详细信息 --》以长格式显示 -l use a long listing format
with -l, print sizes in human readable format (e.g., 1K 234M 2G)-h, --human-readable -r, --reverse 和字母顺序相反的排列顺序 reverse order while sorting-d 查看文件夹本身的信息 directory 选项的使用 可供选择的项目可接可不接但是接了有特殊的作用 选项可以组合 ls -l -a ls -la
ls -a -l -d ls -lad选项的顺序 可以不讲究谁在前面或者后面都可以 选项之间有依赖关系 ls -l -d /boot
ls -lh /boot长选项 长格式 --all短选项 短格式 -a如果不接参数默认以当前文件夹作为参数
1.2 变量 定义变量 自定义变量 自己定义 小写 [rootsc-server src]# sgfeirx
[rootsc-server src]# echo $sg
feirx预定义变量 操作系统预先定义好的可以直接使用大写 env 查看Linux中的当前环境变量全局变量 set 查看Linux中的所有变量包括环境变量和自定义变量 $的用法 获取变量与环境变量的值 path2则echo p a t h 或者 e c h o path 或者echo path或者echo{path}显示的就是path的值 变量替换-显示脚本参数 命令替换 varname$(命令) 把命令中某个子命令替换为其执行结果的过程 bls$(ls -l /)
IFS\n IFS是内部字段分隔符
echo $bls$?-是上一指令的返回值(返回结果范围0~255) 0 说明上一条命令执行成功 非0 说明上一条命令执行失败 $$ -Shell本身的PID,即当前进程的PID ? 代表一个任意字符 * 代表任意个任意字符
1.3 别名 alias 定义别名 命令的另外一个名字 alias llls -l --colorauto 前面的ll是别名后面的引号是细节
alias lsls --colorauto
alias mvmv -i
alias rmrm -ialias ppping www.baidu.comunalias 取消别名 定义的别名不要和系统里的命令名字冲突如果冲突后果就是导致原来的命令不能使用
2. 路径
2.1 绝对路径 不考虑你当前的位置从“/”到达目标文件需要经过的文件系统目录树的所有分支 /home/hello/docs/share跟你当前所在的路径没有关系从/开始一层一层往下走绝对不会搞错的路径单向从上而下
2.2 相对路径 参照你当前的位置到达目标文件需要经过的文件系统目录树的所有分支 不以“/”开头 以当前文件夹作为参照物可进可退
3. 复制删除剪切
3.1 删除rm rm 删除文件和文件夹 remove -r 递归删除 recursive -f 强制删除不给与提醒 force rm -rf feng rm -rf /feng3.2 复制cp cp 复制文件和文件夹 copy 1 复制文件 [rootlocalhost china_voice]# cp sc.txt hunantv
[rootlocalhost china_voice]# cp /etc/hosts .2 复制文件夹 -r 递归复制 [rootlocalhost china_voice]# cp jiangsutv/ hunantv -r3.3 剪切mv mv 移动剪切或者重命名 1.移动后面接的文件夹存在就是移动 [rootlocalhost china_voice]# mv hunantv hunan2.重命名后面接的文件夹不存在就是重命名
4. 文件目录 文件目录 /root root用户的家目录 /home 普通用户的家目录 /bin 存放可执行二进制程序 binary /sbin --super user binary --》有特权的用户(root)使用的命令 --御用 useradd /usr 存放linux系统资源各种程序默认会安装到这个文件夹里 unix system resource /etc 存放各种配置文件 /etc/passwd /etc/shadow /etc/group /etc/profile /etc/login.defs /tmp 是存放临时文件的任何的用户创建进程都可以在此处新建文件和文件夹 temporary /var/log/secure 记录下被授权者执行的所有命令 /var 存放可变化的文件的 variable 可变的 log 日志文件 是不停的记录程序发生的事情 secure 是与linux安全相关的日志 登陆进入linux新建用户设置密码 messages 平时可以记录的日志默认都记录到messages --》rsyslogd进程会记录能记录的各种消息都会记录一份到messages文件里 boot.log 开机启动的过程中的日志 文件类型 d 表示是文件夹 directory — 表示普通文件
5.日志文件 记录到哪里去了 /var/log/messages 谁会帮我们记录日志 linux系统里的专门记录日志的服务 rsyslog service rsyslogd 帮助我们记录日志 kernel netfilter kernel会把日志告诉rsyslogd 让它记录日志 [rootlocalhost conf]# vim /etc/rsyslog.conf *.info;mail.none;authpriv.none;cron.none cron.info 记录cron类型的日志的info以上级别的信息包括info 日志的设备类型 1.kernel kern.info 内核产生的info以上级别的日志 kern.* 表示所有的kern类型的日志级别 2.authpriv --》ssh远程登录需要输入用户名和密码 3.cron --》计划任务 4.mail 5.local1~local7 都是自定义的类型 6.news 日志级别 8 none 不记录日志 7 debug 调试信息系统进行调试时产生的日志不属于错误日志不需要过多关注 6 info 一般的通知信息用来反馈系统的当前状态给当前用户 5 notice 提醒信息需要检查一下程序了不理会可能会出现错误 4 warning 警告信息,当出现警告时你的程序可能已经出现了问题,但不影响程序正常运行,尽快进行处理以免导致服务宕掉 3 error 错误信息出现这一项时已经挑明服务出现了问题,服务都无法确认是否能正常运行 2 critical 比较严重的错误信息服务已经宕了可能已经无法修复 1 alert 警报信息需要立即采取行动不仅是服务宕了还会影响系统的正常后动 0 emergency 紧急信息系统可能已经不能使用了如果不能解决就重新装机吧 级别值越小则优先级越高nonedebug infonoticewarningerrorcriticalalertemerg
6. 提示符
6.1 用户提示符
$ 符号是普通用户的提示符
# 符号是超级用户的提示符6.2 PS1第一提示符
[rootliaobo ~]# echo $PS1
[\u\h \W]\$\u 代表是用户 user分割符号
\h 代表主机名 hostname
\W 代表当前的工作目录当前的路径 working
\$ 如果你是root用户就是# 如果你是非root用户就是$6.3 PS2第二提示符
[rootliaobo ~]# echo $PS2 表示命令没有输完三. Linux基础
1. 常见命令
1.1 基础命令 ctrll 清除屏幕 ctrlalt 从虚拟机里返回到真实机器 ls 查看文件夹里的内容 list mkdir 新建文件夹 make directory目录文件夹 rm -rf 删除文件夹 pwd 查看当前所在的路径 ip add 查看linux系统的ip地址 tree 以树状格式列出目录的内容 touch 新建空文件 exit 退出登录系统 du -sh 文件名 查看文件的大小 [rootmaster passwd]# du -sh sc_00
4.0K sc_00cat 查看文本文件里的内容 [rootsanchuang vim]# cat zhangyp.txtnl number lines of files 输出内容并进行编号和cat -n具有相同的功能 bash 执行文件或者脚本 [rootlocalhost backup]# bash backup_log.sh1.2 安装软件 mount挂载 安装获得挂载功能 [rootweb-server2 ~]# yum install nfs-utils -y 挂载文件相当于挂载一个镜像 [rootzabbix-agent nginx-1.23.2]# mount /dev/cdrom /mnt
[rootweb-server2 ~]# mount 192.168.0.139:/web /usr/local/nginx/html/ 将nfs服务器上的/web目录挂载到客户机的/usr/local/nginx/html/目录上umount卸载掉挂载 [rootzabbix-agent ~]# umount /mnt
[rootweb-server2 ~]# umount /usr/local/nginx/html/ showmount查看共享文件 [rootweb-server2 ~]# showmount -e 192.168.227.135 #在客户机上查看192.168.227.138机器共享了哪些目录rpm 安装 rpm 是linux里的软件安装的命令不能自动解决依赖关系需要手工完成 rpm包 是redhat/centos系统里的软件安装包以.rpm结尾 理解为windows里的.exe结尾的安装包 rpm -ivh mysql80-community-release-el7-6.noarch.rpm yum安装 yum 也是linux里的软件安装的命令底层其实就是调用rpm包去安装但是yum可以帮助我们自动解决依赖关系 依赖关系的作用一个软件有很多模块有些功能某些软件已经有了而且还非常好用我们就可以直接调用不需要再自己写一个了 yum install nginx 底层是需要知道nginx的已经做好的rpm包存在的哪个位置不然也不能去安装
yum remove nginx 卸载编译安装下载源代码包安装固定的流程去安装-可以定制功能 1.下载源码 2.编译前的配置 --》选款式颜色面料量尺寸等操作的确定–》形成一个方案 3.编译 --》开始制作衣服 4.编译安装 --》交付给用户 查看软件安装 yum provides 联网到yum源查询命令是通过哪个软件安装的 rpm -qf 本地查询文件是通过哪个软件安装的 rpm redhat package managment 红帽公司出品的软件包管理软件 -q 查询 query a all
1.3 用户命令 su - 切换用户 substitute替换 useradd 新建用户 useradd liuxiaoxiao 新建liuxiaoxiao用户
sudo passwd liuzizheng 修改liuzizheng密码hostnamectl set-hostname 更改主机名 [rootlocalhost ~]# hostnamectl set-hostname liaobo1.4 man命令 man 查看命令的使用手册 manuals 手册指南 man 1 passwd 查看passwd命令的使用 man 5 passwd 查看/etc/passwd文件里的配置的使用说明 没有加默认man 1 按q退出 quit
1.5 tr命令 tr 实现字符的转换和删除功能 translate or delete characters 转换 [rootlamp-test lianxi]# echo 112233445566112233 |tr 123 abc
aabbcc445566aabbcc删除 -d [rootlamp-test lianxi]# echo 11122334455 |tr -d 345
11122-s 压缩连续的字符串为一个字符串 [rootsanchuang feng1]# echo 1111111111222222222222223333333333333123123|tr -s 123
1231231231.6 date命令 date 获得当前的时间 %Y 年%m 月(01…12)%d 日 %H 时(00…23)%M 分(00…59)%S秒(00…60) [rootlocalhost bak]# date %Y%m%d%H%M%S 202303261601111.7 cd命令 cd参数 / 根目录 . 当前目录 …上一级目录 家目录root用户的家目录/root其他用户的家目录/home/用户名 -上一次所在的工作目录遥控器上的返回键 进入文件夹 cd 文件夹名
1.8 wc命令 wc word count 词数统计)统计文件的行数单词字节 -l 只显示行数-w 只显示字数-c 只显示字节数 [rootlamp-test lianxi]# wc filename 显示行数、字数和字节数
[rootlocalhost lianxi]# wc -l new_passwd 显示行数
19 new_passwd
[rootlamp-test lianxi]# wc -w filename 只显示字数
[rootlamp-test lianxi]# wc -c filename 只显示字节数1.9 head和tail head 默认显示文件的头10行 [rootsanchuang lianxi]# head -3 passwd 显示前三行tail 默认显示文件的尾10行 [rootsanchuang lianxi]# tail -6 passwd 显示后六行
[rootsanchuang lianxi]# tail -n 2 从第二行到最后一行1.10 echo命令 echo 输出文本内容 -n 不换行 [rootlamp-test lianxi]# echo -n sanchuang
sanchuang[rootlamp-test lianxi]# -e 让转义字符后面接的字符有特殊作用-启用反斜杠转义功能 \n 回车、换行
\t tab键[rootlamp-test lianxi]# echo -e name\tsex\tage\nsanchuang
name sex age
sanchuang1.11 seq命令 seq 产生序列 sequence -w 等宽输出 width -s 指定分隔符 separater [rootlamp-test lianxi]# seq 5
1
2
3
4
5
[rootlamp-test lianxi]# seq -w -s 5 10
05 06 07 08 09 10
#-s使用空格作为分隔符
[rootlamp-test lianxi]# seq 5 8
5
6
7
8
[rootlamp-test lianxi]# seq 1 2 10
1
3
5
7
91.12 history命令 history 查看历史命令记录上下方向键也可以查看 history -c 清除历史命令 !number 执行历史命令 !811 执行第811条命令!string 执行最近以string字符串开头的历史命令
2.连接符号
2.1 命令连接符号 ;
命令1 ; 命令2 ; 命令3
先执行前面的命令然后执行后面的命令不管前面的命令执行成功还是失败都会执行后面的命令
3.2 续行符号 \
继续到下一行
2.3 管道符号 |
管道 实现的是进程和进程之间通信的一种方式作用将前面一个命令的输出送给后面一个命令作为输入 --》 中间人只传不负责接收参数
2.3.1 xargs xargs 将前面命令的输出送给后面的命令作为参数使用可以接收参数 arguments参数 #由于ls接收不了管道符号的传参故用xargs代替接收
[rootlamp-test lianxi]# echo feng.txt |xargs ls -l
-rw-r--r-- 1 root root 26 11月 8 16:40 feng.txt
#相当于 mkdir 1 2 3 4 5
[rootsanchuang feng1]# seq 5|xargs mkdir 2.4 或符号 || 命令1 || 命令2 如果命令1执行失败就执行命令2如果命令1执行成功就不执行命令2
2.5 与符号 命令1 命令2 如果命令1执行成功就执行命令2如果命令1执行不成功就不执行命令2
四. shell编程
1. shell基础
1.1 脚本执行方式 当前bash里运行父进程 父进程 . a.sh 或者source a.sh子bash进程子进程 子进程 bash a.sh 或者./a.sh1.2 引号用法 单引号无作用 所见即所得不会应用变量里面的内容—任何的字符都只是字符没有特殊作用 双引号引用变量 引用变量的内容某些特殊字符元字符有特殊作用 元字符 有特殊作用的字符 $ ! * ? ~反引号命令替换执行命令得到的结果 优先执行linux命令然后将命令的结果赋值给变量 --》改变了命令执行的优先级相当于 $(命令)-支持嵌套,反引号不支持 间接引用 [rootmaster passwd]# ab
[rootmaster passwd]# b10
[rootmaster passwd]# echo ${!a}
10eval 间接引用 [rootmaster passwd]# cat sc.txt
sanchaung
[rootmaster passwd]# acat sc.txt
[rootmaster passwd]# eval $a
sanchaung1.3 括号的使用 单圆括号() 命令替换 $ test$(date)$ echo $test
2023年 08月 15日 星期二 15:34:34 CST命令分组 (var1;echo $var) 初始化数组 a(1 2 3) 数组双圆括号(()) 对整数进行数字运算bc进行小数运算和逻辑运算 [rootsanchuang init.d]# echo $((7 9 ))
16
[rootsanchuang init.d]#echo $((38))
1[rootmaster ~]# echo 5.34|bc
9.3
[rootsanchuang shell]# echo 170.00 90 |bc
1 输出为1表示为真
[rootsanchuang shell]# echo 17.00 90 |bc
0 输出为0表示为假中括号[] 字符串和数值比 数字运算 -d 判断文件夹 [ -d /backup ] 判断/backup目录是否存在 directory-f 判断目录 [ -f /backup/a.txt ] 判断/backup/a.txt文件是否存在 -n 判断字符串的长度不为空 [ -n $sg ] 判断字符串的长度不为空 --》字符串有内容-z 判断字符串的长度是否为0 [ -z $sg ] 判断字符串的长度是否为0 zero双中括号[[]]字符串的比较 老式的 [ ${sg} shenmengjie]
新式的 [[ ${sg} shenmengjie ]] --推荐使用支持字符串里有空格花括号{} 变量范围限定 $ a123456$ echo $abc$ echo ${a}bc
123456bc命令分组 $ { ls ; ls ;echo $BASH_SUBSHELL; }对大括号中的文件名做扩展 对大括号中的以逗号分割的文件列表进行拓展。 touch {a,b}.txt 结果为a.txt b.txt对大括号中以点点…分割的顺序文件列表起拓展作用 touch {1…4}.txt 结果为1.txt 2.txt 3.txt 4.txt1.4 位置变量
就是往脚本里面传递参数
[rootsc-server 3-31]# bash for.sh 5 7 81.4.1 常见位置变量
$0 代表脚本文件名$$当前进程的pid号 $! 后台运行的最后一个进程的pid$? 上一条命令程序的返回值$# 代表位置变量的个数 ∗ 或者 *或者 ∗或者 代表所有的位置变量的内容$1 第1个位置变量$2 第2个位置变量$3 第3个位置变量
1.4.2 shift用法
删除最左边的位置变量所有的位置变量左移一个
1.5 read
输入内容给指定变量 read是接受用户的输入然后将输入的内容赋值给变量 -p 提示信息 prompt [rootsc-server 3-31]# read -p 请输入你的名字: name
请输入你的名字:liaobo #手动输入
[rootlocalhost ~]# echo $name
liaobo插入断点 —什么都不接
1.6 RANDOM RANDOM可以产生随机数RANDOM%10表示10以内的随机数RANDOM%100表示100以内的随机数 [rootmaster ~]# echo $RANDOM
7533
[rootmaster ~]# echo $((RANDOM%100))
36
[rootmaster ~]# echo $((RANDOM%10))
81.7 切片功能
bash自带的处理字符串
echo ${#a} $a中字符串的个数
echo ${a:3} $a中从第三个开始取直到结束下标从0开始
echo ${a:3:6} $a中从第三个开始取6个字符
echo ${a: -3} 取最后3个字符
echo ${a#*,}从左边开始删除直到遇到,为止其他的字符串保留
echo ${a##*,}从左边开始删除直到遇到最后一个,为止
echo ${a%,*}从右面开始删除直到遇到.为止其他的字符串保留
echo ${a%%,*}从右面开始删除直到遇到最后一个.为止
echo ${a/abc/111} 将变量a中的第一个abc替换成111
echo ${a//abc/xyz}将变量a中的所有的abc替换成xyz[rootmaster passwd]# atiankai,gaoshuo
[rootmaster passwd]# echo ${#a}
15
[rootmaster passwd]# echo ${a:3}
nkai,gaoshuo
[rootmaster passwd]# echo ${a:3:6}
nkai,g
[rootmaster passwd]# echo ${a: -3}
huo
[rootmaster passwd]# atiankai,,,gaoshuo
[rootmaster passwd]# echo ${a##*,}
gaoshuo
[rootmaster passwd]# echo ${a#*,}
,,gaoshuo
[rootmaster passwd]# echo ${a%,*}
tiankai,,
[rootmaster passwd]# echo ${a%%,*}
tiankai2. if条件语句 if条件 单分支 #命令1执行成功就执行命令2如果命令1执行不成功不执行命令2
if 条件命令1 ;then命令2
fi双分支 #命令1执行成功就执行命令2如果命令1执行不成功执行命令3
if 条件命令1 ;then命令2
else命令3
fi多分支 #条件1满足就执行命令2如果条件1不满足看条件2是否满足以此类推如果都不满足执行else里的命令4
if 条件1命令1 ;then命令2
elif 条件2;then命令3
else命令4
fireturn 函数里的给一个返回值范围是0~255
3. 循环语句
3.1 for循环 格式 for 变量 in 集合
do命令
done#i是一个变量{1..10} 表示1 2 3 4 5 6 7 8 9 10 的集合
for i in {1..10}
doecho sanchuang $i
donefor循环结合seq和位置变量 控制循环次数 read -p 请输入你需要循环的次数: num
#执行seq 产生数字的序列
for i in $(seq $num)
doif (( $i 6 ));thenecho nongda 666elseecho sanchuang $ifi3.2 while循环 格式 while 条件
do命令
donei1
while (( i10 ))
doecho sanchuang $i
done和read结合使用进行传参 #uname表示第一个参数chinese表示第二个参数math表示第二个参数english表示第四个参数
while read uname chinese math english
do#对chinese成绩进行判断大于等于90的就输出if [[ $uname name ]];thenfiif (( $chinese 90 ));thenecho $uname $chinesefi
done grade.txt跳出循环 break直接跳出循环不再执行后面的语句 continue跳出当前循环进入下一次语句 exit 结束程序
4. 函数
函数 定义 调用 返回值和输出结果 返回值是命令执行完成后给bash的输出结果是名执行的过程中输出到屏幕上的给人看的
5 计划任务 计划任务 规定某个时间去做某件事情 crond进程 到点帮助我们去执行脚本 crontab -e 新增计划任务 格式分 时 日 月 星期 时间设置的一些特殊表示方法 1*表示任意时间 2表示间隔的多个不连续的时间点 3/n表示指定间隔的时间频率 4~表示连续的时间范围 例如 10 7 * * *–每日的七点 20 12 */3 * * --每隔三天的12点 330 22 * * 135–每周1、3、5的22点30分 40 8~18 * * *–每天8到18点 crontab -l 查看当前用户有哪些计划任务 [rootsanchuang 10-31]# crontab -l
30 2 * * * bash /shell/10-31/backup_log.sh删除计划任务 删除/var/spool/cron文件里的行或者加#注释crontab -r删除 或者 rm -rf 文件 计划任务的存放路径cd /var/spool/cron/
五. 文本处理
1.正则表达式 正则表达式 按照某种正确规则将字母数字特殊符号组合成一个公式用来表达某个意思 ^ 表示以什么开头$ 表示以什么结尾. 表示任意单个字符.* 表示所有的字符\w 表示字母、数字、下划线\W 表示特殊符号\s 匹配空白字符(空格和tab)\b 单词的边界线\1 表示标签1
2. 文本过滤grep
2.1 grep 用途在文件中查找并显示包含指定字符串的行 格式grep [选项]… 模式 目标文件 -i查找时忽略大小写 --ignore-case [rootmaster passwd]# cat mobile_phone.txt |grep -i xiaomi
xiaomi XIAOMI-e 支持正则表达式 相当于egrep -n显示符合模式要求的行号 --line-number [rootmaster passwd]# egrep -n -i xiaomi|oppo mobile_phone.txt
1:xiaomi XIAOMI redmi
5:oppo OPPO -o只显示匹配的内容 --only-matching [rootmaster passwd]# egrep -n -o xiaomi|oppo mobile_phone.txt
1:xiaomi
5:oppo-v取反查找与条件相反的行 #输出没有数字的行一行一行去比较
[rootmaster passwd]# cat mobile_phone.txt |grep -v [0-9]
xiaomi XIAOMI redmi
SAMSUNG
MEIZU
HUAWEI huawei HONOR-v是一行一行查找而取反是单个字符查找如【0-9】 -r递归查找不知道文件具体位置时搜索所有文件 [rootmaster ~]# grep -r xiaomi
passwd/mobile_phone.txt:xiaomi XIAOMI redmi2.2 egrep 对扩展正则的支持 等价于grep -e 基本正则-单个字符 ^ 表示以什么开头或者取反只要是^这个字符是在中括号[]的字符集中被使用的话就是表示字符类的否定 [rootlamp-test lianxi]# df -Th|grep ^t 以t开头
#以数字开头
[rootmaster passwd]# echo 98 sh al | grep -o ^[0-9]
#取反显示不是数字的
[rootmaster passwd]# echo 98 sh al | grep -o [^0-9]$ 表示以什么结尾 [rootlamp-test lianxi]# df -Th|grep m$ 以m结尾
#以/结尾的行
[rootmaster passwd]# cat web.txt|grep /$
sdsdh/
sdfadf//. 表示任意单个字符-相当于红中 ^$ 空行 [rootmaster passwd]# cat web.txt|grep ^$ .* 表示所有的字符 拓展正则 | 表示或[0-9]表示0-9的一个数字[89]表示8和9 ?表示0个或1个前面的字符表示1个或者多个前面的字符*表示0个或者多个前面的字符{n}表示n个前面的字符{nm}表示n个到m个前面的字符 [rootsanchuang 10-17]# echo abc abbc ac|egrep ab?c
abc ac
[rootsanchuang 10-17]# echo abc abbc abbbbc ac|egrep abc
abc abbc abbbbc
[rootsanchuang 10-17]# echo abc abbc abbbbc ac|egrep ab*c
abc abbc abbbbc ac
[rootsanchuang 10-17]# echo abc abbc abbbbc ac|egrep ab{4}c
abbbbc
[rootsanchuang 10-17]# echo abc abbbbbbc abbbbc ac|egrep ab{4,8}c
abbbbbbc abbbbc 单词的边界的界定 \ 表示词首部 ---》\b
\ 表示词尾部 ---\b
[rootsanchuang 10-17]# echo chenjinhuai chenjinjin chenjingui|egrep \chen
chenjinhuai chenjinjin chenjingui
[rootsanchuang 10-17]# echo chenjinhuai chenjinjin chenjingui|egrep jin\
chenjinjin案例ip、网址、邮箱正则表达式、时间
3. 文本截取
3.1 awk截取
3.2.1 语法 完整语法awk’BEGIN{commands}pattern{commands}END{commands}’ file1 处理前执行的命令 每行执行的命令 处理后执行的 [rootsanchuang 10-13]# awk BEGIN{print 阿里股东集资} $2 2{sum $2;print $0}END{print 阿里股东集资总金额: sum} alijiujiu.txt
阿里股东集资
zhangtt 10
tianyang 100
阿里股东集资总金额:110基础语法:awk -F 分隔符 ‘/模式/{动作1;动作2}’ 输出文件 [rootlocalhost ~]# awk -F: /bin/{print $NF} /etc/passwd
/bin/bash3.2.2 内置的变量 NR 行号记录的编号 number of record NF 列数字段数一行有多少列 number of field [rootlocalhost ~]# df|awk {print NR,$(NF-1)}
1 已用%
2 0%
3 0%
4 1%
5 0%
6 8%
7 15%
8 0%FS 当前的输入分隔符默认是空白字符空格和tab field separator OFS 当前的输出分隔符默认是空格字符空格 output field separator
3.2.3 基本使用 $0是整行第1列就是$1 第2列就是$2以此类推 ‘{print $2}’ 截取第二行并输出 条件的匹配 模糊匹配 ~ !~精确匹配 , -F 指定分隔符(默认使用空白作为分隔符) #以:或者/为分隔符
[rootlocalhost ~]# awk -F[:/] {print $1,$10} /etc/passwd
root bash引用shell变量 -V [rootsanchuang ~]# nametianyang
[rootsanchuang ~]# echo | awk -v abc$name {print abc}
tianyang使用双引号 $符号需要接\转义 [rootmaster ~]# namesshd
[rootmaster ~]# awk -F: \$1 ~ /$name/{print \$1,\$3} /etc/passwd
sshd 743.2.4 if和for if分支 if condition statement1if condition statement1else statement2if condition statement1else if statement2else statement3 awk -F: {if (length($2) 2) print $1,没有设置密码;else if (length($2) 0 ) print $1,密码为空 } /etc/shadow $log_filefor循环 [rootmaster passwd]# echo 1 2 3 4 5 6|awk {for(i1;iNF;i)sum$i;print sum}
213.2.5 数组
[rootmaster passwd]# awk NR 1 {sum[$1] $2} END{for(i in sum)print i,sum[i]} bill.txt
rose 100000
li 1329
feng 650
zhang 4503.2 cut截取 作用文件截取命令截取字符串和列 格式cut -选项 提取范围 文本文件 n 第n项 n- 第n项到行尾 -m 行首到第m项 n,m 第n项和第m项,表示单个的截取 n-m 第n项到第m项-表示连续的截取 截取字符串 -c 从指定范围中提取字符 [rootmaster ~]# echo shemengjie|cut -c 1
s
[rootmaster ~]# echo shemengjie|cut -c 1-5
sheme截取列 -d 指定分割符 如-d ‘:’ 指定分隔符为-f 从指定范围中提取字段 #首先使用-s将空格压缩再使用-d指定分隔符
[rootmaster ~]# df |tr -s |cut -d -f 1,2
文件系统 1K-块
devtmpfs 1918672
tmpfs 1930540
tmpfs 1930540
tmpfs 1930540
/dev/mapper/centos-root 17811456
/dev/sda1 1038336
tmpfs 3861083.3 sort排序 排序命令默认根据ascii码的大小升序排列按字母单个单个排序如果是数字也是默认单个单个排序 -k指定哪一列为排序键 #指定第二行进行排列
[rootmaster ~]# cat sort.txt|sort -k 2
68 bobo 68
79 feng 79
9 liao 9
83 wang 83
123 yong 123-n按整数进行排序–默认是升序 number [rootmaster ~]# cat sort.txt|sort -n
9 liao 9
68 bobo 68
79 feng 79
83 wang 83
123 yong 123-r递减排序 reverse 颠倒相反的 [rootmaster ~]# cat sort.txt|sort -nr
123 yong 123
83 wang 83
79 feng 79
68 bobo 68
9 liao 9-t指定字段分割符默认是空白空白空格tab sort -t “” 以冒号作为分隔符3.4 uniq去重 作用去除连续重复的行 -c 统计重复的次数 [rootmaster ~]# cat test.txt |sort|uniq -c5 gaoshuo5 liaobo5 tianyang1 weiyi5 wudi5 zhangwenzhou-d 只是显示重复的行 [rootmaster ~]# cat test.txt |sort|uniq -d
gaoshuo
liaobo
tianyang
wudi
zhangwenzhou-u 只是显示不重复的行 [rootmaster ~]# cat test.txt |sort|uniq -u
weiyi4.文本替换sed 文本替换和处理的命令可以显示不连续的行 脚本中修改文本和文本替换的最佳工具 模式空间和保留空间 x 交换保持空间和模式空间的内容 h 将模式空间替换成保留空间 H 追加模式空间来保留空间 g 将保留空间替换成模式空间 G 追加保留空间到模式空间 n 读取下一行到模式空间中 N 追加下一行到模式空间中
4.1 基本选项 -i 直接对源文件进行修改 #对源文件进行修改
[rootsanchuang shell]#sed -i s/xu/zhang/g user_pwd.txt
#不对源文件修改直接输出
[rootsanchuang shell]# cat user_pwd.txt |sed s/xu/zhang/g\1 标签1\2 标签2 #将一行分成两个部分标签1表示第一个部分标签2表示第二个部分
[rootmaster passwd]# cat password
root:x:0:0:root:/root:/bin/bash
[rootmaster passwd]# sed -ri s/(^[0-Z])(.*)/\1/ password #相当于只留下第一个部分
[rootmaster passwd]# cat password
root-r 支持扩展正则 [rootmaster passwd]# sed -n /bash/p /etc/passwd
root:x:0:0:root:/root:/bin/bash
liaobo:x:1000:1000::/home/liaobo:/bin/bash
# !p表示不显示
[rootmaster passwd]# sed -rn /^#|^$/!p /etc/grub2.cfg-n 只显示符合条件的行1p 显示第1行$p 最后一行p print [rootmaster passwd]# cat grade.txt |sed -n 1p;3p
name chinese math english
tom 90 80 99
[rootmaster passwd]# cat grade.txt |sed -n 1,3p
name chinese math english
cali 80 91 82
tom 90 80 99
#步长为3就是显示第1行第4行第7行……
[rootmaster passwd]# cat grade.txt |sed -n 1~3p
name chinese math english
lucy 99 70 754.2 参数的引用 引用参数使用双引号 [rootmaster passwd]# num1
[rootmaster passwd]# cat grade.txt |sed -n $num,2p
name chinese math english
cali 80 91 82sed 查找的时候 1.根据行号匹配 2.根据模式匹配–》字符串查找
4.3 sed的命令 a 追加操作 在某行后面插入 #在第二行后面插入
[rootmaster passwd]# sed -i 2a lioabo grade.txt
#在所有含有name行的后面插入
[rootmaster passwd]# sed -i /name/a lioabo grade.txti 插入操作 在某行前面插入 #在最后一行前面插入
[rootmaster passwd]# sed -i $i lioabo grade.txt
#在所有含有jack行的前面插入
[rootmaster passwd]# sed -i /jack/i lioabo grade.txtc 整行替换 [rootmaster passwd]# sed 2c liaobo grade.txt
name chinese math english
liaobos 替换操作 格式sed -n s/查找内容/替换内容/替换标记 文件 替换标记 数字表示替换第几个g全局替换 #替换改行中第二个cali
[rootmaster passwd]# sed -i s/cali/fengdeyong/2 feng.txt
#替换改行中所有的cali
[rootmaster passwd]# sed -i s/cali/fengdeyong/g feng.txtd 删除操作 sed 3,5d /etc/fstab #删除3到5行表示前面找到的内容 [rootmaster passwd]# sed -i s/.at// cat.txt
i have a fat cat5.拆分和连接
5.1 split分割 将大文件分割成较小的文件 网络传输的时候网速比较慢但是文件比较大例如100G的文件传输需要1天 -d, 指定分割文件的后缀为数字 [rootmaster passwd]# split -5 password -d sc_
[rootmaster passwd]# ls
password sc_00 sc_01 sc_02 sc_03 sc_04 sc_05-a 指定分割文件数字后缀的长度如果是1后缀为0,1,2…如果是2则为00,01,02…默认是2 #长度为3
[rootmaster passwd]# split -5 password -d -a 3 sc_
[rootmaster passwd]# ls
password sc_000 sc_001 sc_002 sc_003 sc_004 sc_005-b 指定大小切割 [rootmaster passwd]# split -b 100k password -d sc_-C 指定每行最大的字节数保持每行的完整性 [rootmaster passwd]# split -C 100k password -d sc_ 合并 cat sc_* sc_passwd 5.2 paste粘贴 指令会把每个文件以列对列的方式一列列地加以合并 [rootmaster passwd]# cat grade.txt grade2.txt
name chinese math english
cali 80 91 82
tom 90 80 99
lucy 99 70 75
jack 60 89 99
rose 9 89 99
name chinese math english
cali 80 91 82
tom 90 80 99
lucy 99 70 75
jack 60 89 99
rose 9 89 99
[rootmaster passwd]# paste grade.txt grade2.txt
name chinese math english name chinese math english
cali 80 91 82 cali 80 91 82
tom 90 80 99 tom 90 80 99
lucy 99 70 75 lucy 99 70 75
jack 60 89 99 jack 60 89 99
rose 9 89 99 rose 9 89 995.3 join合并 用于将两个文件中指定相同的内容栏目连接起来只合并一个相同的栏目默认合并第一个相同的栏目 [rootmaster passwd]# join grade.txt grade2.txt
name chinese math english chinese math english
cali 80 91 82 80 91 82
tom 90 80 99 90 80 99
lucy 99 70 75 99 70 75
jack 60 89 99 60 89 99
rose 9 89 99 9 89 99-j 是指定2个文件里相同的字段 后面接第几个字段 [rootmaster passwd]# join -j 2 grade.txt grade2.txt
chinese name math english name math english
80 cali 91 82 cali 91 82
90 tom 80 99 tom 80 99
99 lucy 70 75 lucy 70 75
60 jack 89 99 jack 89 99
9 rose 89 99 rose 89 996. 打补丁命令
6.1 patch 修补文件 patch [选项] 原始文件 补丁文件 -pN N表示忽略N层路径 -R 还原到老版本
6.2 diff 比较不同
比较两个文件之间的差异输出不同-就是判断文件是否发生变化 -u 将不同的地方放在一起紧凑易读 生成补丁
[rootlamp-test lianxi]# diff -u monitor_passwd.sh monitor_passwd_v2.sh tov2.patch打补丁 patch 是打补丁的命令
[rootlamp-test lianxi]# patch monitor_passwd.sh tov2.patch 通过补丁包tov2.patch给monitor_passwd.sh脚本打补丁[rootlamp-test lianxi]# patch -R monitor_passwd.sh tov2.patch 撤销打补丁-r 接文件夹的递归比较文件夹下的的所有文件 md5sum 用法和diff一样
六. vim编辑器
1.vim基础 进入vim [rootlamp-test lianxi]# vim zhangyp.txt 交换文件 交换文件一定会和原文件在同一个目录下删除就可以
2. 5种模式
2.1.命令模式 删除和剪切 x 删除光标处的单个字符 dd 删除当前光标所在行 #dd 删除从光标处开始的#行内容—4dd 删除4行 d^ 删除当前光标之前到行首的所有字符 d$ 删除当前光标处到行尾的所有字符 dw 删除一个单词word)以空格、冒号等符号 复制 yy 复制整行内容 #yy 复制从光标处开始的#行内容—4yy 复制4行 粘贴 p 粘贴到光标位置后 P 粘贴到光标位置前 撤销 u 撤销 undo 查找 /word 从上而下在文件中查找字符串“word” 如/bobo 查找bobo ?word 从下而上在文件中查找字符串“word” n 定位下一个匹配的被查找字符串 N 定位上一个匹配的被查找字符串 跳转 1G 第1行 G 跳到文件的末尾最后一行 30G 跳到第30行
2.2.从命令模式进入插入模式 i 光标在当前位置进入插入模式 a 光标后退一格并进入插入模式 o 在光标所在行下新起一行并进入插入模式 2.3.末行模式 退出 退出不保存 :q 如果未对文件做改动则退出 quit :q! 强制退出不保存 退出并保存 :wq 保存当前文件并退出 :wq! 强制保存当前文件并退出 另存为 :w 只是保存不退出 write :w/lianxi/sc.txt 另存为/lianxi/sc.txt 保存当前文件 :x 保存当前文件并退出 :x! 强制保存当前文件并退出 ZZ 保存当前文件并退出 —》在命令模式使用 相关设置 行号设置 :set nu 显示行号 number :set nonu 不显示行号 粘贴设置 :set paste 按照原来的格式进行粘贴 tab键设置 :set ts4 设置一个tab键占4个空格默认一个tab占8个 内容替换 /xiaomi/dami/ 替换光标所在行的第1个xiaomi为dami /xiaomi/dami/g 替换光标所在行里的所有的xiaomi为dami global 全局全部 :5,7s/xiaomi/dami/g 将5到7行所有的xiaomi替换为dami :%s/xiaomi/dami/g 将所有的行里的xiaomi替换为dami :1, s / x i a o m i / d a m i / g 将所有的行里的 x i a o m i 替换为 d a m i : 1 , s/xiaomi/dami/g 将所有的行里的xiaomi替换为dami :1, s/xiaomi/dami/g将所有的行里的xiaomi替换为dami:1,s/apple//g 删除所有行里的apple —》思路使用空的内容去替换达到删除的效果 :1,$s/huawei/harmony/gc 替换的时候要求确认 comfirm 确认 导入其他文件的内容 :r /etc/filesystems 在当前文件中读入其他文件内容 :e ~/install.log 打开新的文件进行编辑 跳转 :1 第1行 :40 第40行 最后一行
2.4.替换模式 按R键进入 replace 替换 直接移动光标到某个位置直接输入内容就会替换 撤销 退格键 2.5.可视模式 功能主要用来选择复制区块文本 在命令模式下使用v或V键可以进入可视模块 可视或者可视块模式可以复制或者删除一部分单词选中一部分单词然后进行操作。 小v 进入 可视模式 visual —》选择一部分 --》可以选择一行或者多行的一部分 大V 进入 可视行模式 VISUAL line --》选择行 ctrlv 进入 可视块模式 VISUAL block 按y复制 x删除 按p粘贴 另起一行按o再按esc再p 3.多窗口编辑文本 tmux vim 多窗口编辑文本 Ctrlb 分割出来一个窗口 上下两个窗口 Ctrlb% 分割出来一个窗口 左右窗口 Ctrlbx 关闭当前光标处的小窗口 Ctrlb! 关闭所有小窗口 显示已有tmux列表 Ctrlb s Ctrlb(方向键)上 上一个窗口 Ctrlb(方向键)下 下一个窗口 Ctrlb(方向键)左 左一个窗口 Ctrlb(方向键)右 右一个窗口
4.展开内容
4.1 tac
tac 从最后一行倒着显示出文件的全部内容
4.2 more more 分页显示,适合看有很多行的文件慢慢看 回车 下一行 空格 下一页 q 退出 quit b 上一页 back 显示完所有的行自动退出
4.3 less less 分页显示,适合看有很多行的文件慢慢看 回车 下一行 空格 下一页 q 退出 quit b 上一页 back pageup --》pgup 上一页 pagedown --》pgdn 下一页 不退出
七. find查找命令
1. PATH变量 Linux PATH环境变量是决定Shell将到哪些目录中寻找命令或程序的一个参数它的内容是由一堆目录组成的各目录之间用冒号 “:” 隔开。 查看PATH环境变量 echo $PATH [rootnginx conf]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin设置PATH环境变量 临时修改-只对当前的shell 起作用 PATH$PATH:/usr/local/nginx/sbin针对当前特定的用户起作用的环境变量-最安全最常用 PATH$PATH:/usr/local/nginx/sbin
echo PATH$PATH /root/.bashrc.bashrc 这个文件主要保存个人的一些个性化设置如命令别名、路径等 是bash的个人配置文件在用户目录下是个隐藏文件. 对所有的用户的都起作用的环境变量 PATH$PATH:/usr/local/nginx/sbin
echo PATH$PATH /etc/profile2. which which 根据名字查找我们执行的命令存放的路径 [rootsc-server liuxiaoxiao]# which ip /usr/sbin/ip /usr 存放unix系统里的资源文件程序 unix system resource bin 存放二进制文件的目录 binary linux里的命令很多都是使用c语言编写的 sbin 存放有权限的用户的二进制文件的目录 super user binary —》root
3. whereis whereis 可以根据名字查询命令存放的路径同时还会告诉我们man手册的路径 which 和whereis 只能到PATH指定的路径下查找命令
4. locate locate 根据名字模糊查找文件路径 [rootlocalhost ~]# updatedb 更新数据库 locate查找新建的文件时必须更新数据库因为locate不是从根目录查找而是从数据库文件里面查找5. find find 根据条件命令查找文件或文件夹 语法 find [查找范围] [查找命令] [具体的动作]find / -name hello -exec cp {} /backup \;-name 根据名字来查找 -iname 根据不区分大小写的名字查找 [rootsc zengqilei]# find / -iname *xiaolei* 不区分大小写-size 根据大小来查找 [rootsc zengqilei]# find /boot -size 1M10M 大于10M的文件 -10M 少于10M -mtime 根据文件的修改时间查找—24小时按天之前 7 7天前的文件 [rootsc lianxi]# find . -mtime 7-7 7天内的文件 -mmin 根据文件的修改时间—分钟查找 [rootsc lianxi]# find . -mmin 20 20分钟之前-type 根据文件类型查找 f 普通的文件 file d 文件夹 directory [rootsc zengqilei]# find . -type dl 链接文件 link c 字符设备文件 character b 块设备文件 block s socket文件 p pipe管道文件 [rootsc dev]# find / -type p-user 按文件属主查找 [rootlocalhost lianxi]# find /lianxi -user root
/lianxi /lianxi/xiajingwei /lianxi/zhaoyujia /lianxi/liuzz.txt /lianxi/feiruixi.tx-perm 按文件权限查找 -newer 按比某个文件更新的查找 -maxdepth 查找文件的时候目录的深度 1 代表当前文件 2 代表下一级文件 3 下一级的下一级的目录以此类推 [rootlocalhost china]# find . -maxdepth 3 -name nongda.txt
./hunan/changsha/nongda.txt ./hunan/nongda.txt条件的组合问题(默认情况下-a的优先级高先执行逻辑与再执行逻辑或 -o 逻辑或只要所给的条件中有一个满足寻找条件就算满足 or -not :逻辑非在命令中可用“!”表示。该运算符表示查找不满足所给条件的文件 -a逻辑与系统默认是与可不加表示只有当所给的条件都满足时寻找条件才算满足。 and [rootlocalhost lianxi]# find /lianxi -name hello -exec rm -rf {} ; -exec 执行 execute rm -rf 删除的命令 {} 代表前面find命令查找到的内容 容器 ; find 执行命令的结束符号
八. tar压缩命令
1.压缩包下载
curl [rootlocalhost china]# curl -O https://nginx.org/download/
[rootlocalhost china]#wget https://nginx.org/download/curl 是linux里的字符界面的浏览器 -O 下载 wget [rootlocalhost china]# wget https://nginx.org/download/2.zip与unzip zip压缩 [roothunan-wangzhe-5 lianxi]# zip chenyamin.zip chenyamin.txt压缩文件 源文件unzip解压 [roothunan-wangzhe-5 backup]# unzip passwd.zip 解压passwd.zip文件
会产生一个passwd的文件3.gzip和gunzip gzip 是直接在源文件上打压缩包的 [roothunan-wangzhe-5 backup]# gzip passwdgunzip 解压 [roothunan-wangzhe-5 backup]# gunzip passwd.gzxz和unxz xz 压缩文件压缩时间长效果好 [roothunan-wangzhe-5 backup]# xz passwdunxz 解压缩 [roothunan-wangzhe-5 backup]# unxz passwd.xz4.bzip2和bunzip2 bzip2 压缩 [roothunan-wangzhe-5 backup]# bzip2 passwdbunzip2 解压 [roothunan-wangzhe-5 backup]# bunzip2 passwd.bz2zcat 查看压缩文件内容 [roothunan-wangzhe-5 backup]# zcat passwd.gz 查看.gz压缩文件里的内容的5. tar 归档文件 理解为是一个打包文件这个文件里可以包含多个文件 --没有压缩的 tar 制作归档文件解压归档文件可以对文件和文件夹进行压缩 常用命令选项 -c 创建 .tar格式的包文件 creat 创建 -x 解开 .tar格式的包文件 Extract 提取 -v 输出详细信息,显示打包过程 -f 表示使用归档文件 file -t 列表查看包内的文件 list -p 保持原文件的原来属性 -P 保持原文件的绝对路径 -z 背后tar命令调用gzip对归档文件进行压缩 -j 背后tar命令调用bzip2对归档文件进行压缩 -J 背后tar命令调用xz对归档文件进行压缩 创建 -cf 语法tar [选项] 归档文件名 源文件或目录 cfczfcjfcJf -z —背后tar命令调用gzip对归档文件进行压缩 -czf .tar.gz [rootlocalhost tar]# tar -czf passwd.tar.gz passwd
boot hosts passwd passwd.tar.gz-j —背后tar命令调用bzip2对归档文件进行压缩 -J —背后tar命令调用xz对归档文件进行压缩 -cJf .tar.xz [rootlocalhost tar]# tar cJf passwd.tar.xz passwd
boot hosts passwd passwd.tar.gz查看 -tf [rootlocalhost tar]# tar tf hosts.tar.xz解压 -xf 先进入文件夹再解压 [rootlocalhost lihaihui]# tar xf passwd.tar.xz -C /wangbaiwen/解压包的时候默认是解压到当前目录如果需要指定路径需要使用-C选项指定路径就可以了 –exclude 排除 题目将/boot目录下的除grub目录以外的所有文件都备份到/bak目录下叫no-grub.tar.gz答案[rootfengdeyong lianxi]# tar --exclude/boot/grub -czf /bak/no-grub2.tar.gz /boot其他实列
[rootfengdeyong lianxi]# tar --exclude/boot/{grub2,loader} -czf /bak/no-grub2.tar.gz /boot九. 重定向
重定向 将本来应该在屏幕上的输出重定向到文件里
1.正确的输出重定向 正确的输出重定向 正确的输出重定向 将成功执行的命令在屏幕上的输出重定向到文件里如果文件不存在就新建如果文件存在就覆盖原来的内容 [rootlocalhost bak]# echo 123456 1.txt追加正确输出重定向 将成功执行的命令在屏幕上的输出重定向到文件里如果文件不存在就新建如果文件存在就不覆盖原来的内容只是在文件的末尾追加内容 [rootlocalhost bak]# echo 123456 1.txt 2.错误的输出重定向 错误的输出重定向 2 将错误执行的命令在屏幕上的输出重定向到文件里如果文件不存在就新建如果文件存在就覆盖原来的内容 2 追加错误输出重定向 将错误执行的命令在屏幕上的输出重定向到文件里如果文件不存在就新建如果文件存在就不覆盖原来的内容只是在文件的末尾追加内容
3.输出重定向 不管正确的还是错误的都重定向到同一个文件 不管正确的还是错误的都重定向 将执行的命令在屏幕上的输出重定向到文件里如果文件不存在就新建如果文件存在就覆盖原来的内容 追加正确的还是错误的都重定向 将命令的执行结果输出到指定的文件中而不是直接显示在屏幕上不会覆盖原来文件里的内容只是在文末末尾追加如果文件不存在会新建 id rootroot 1zeng.txt 21 --》正确和错误的都往同一个文件里输入会替换;1表示跟着上一步输入类似于指针 id rootroot 1zeng.txt 21 --》正确和错误的都往同一个文件里输入不会替换只会追加
5.重定向标准输入 重定向标准输入 将命令中接收输入的途径由默认的键盘更改为指定的文件 [rootlamp-test lianxi]# wc -l huangjuan.txt
16 huangjuan.txt
[rootlamp-test lianxi]# wc -l huangjuan.txt
16追加输入重定向
6.输入和输出重定向组合 输入和输出重定向组合 [rootlamp-test lianxi]# cat feng.txt EOF
#EOF可以持续输入直到输入EOF停止将这些输入给feng.txt,再cat出来
[rootlamp-test lianxi]# cat feng.txt end
#end可以持续输入直到输入end停止将这些输入追加给feng.txt,再cat出来/dev/null 是一个特殊的文件任何的内容重定向到这个文件都不保存会消失
7. tee tee 在屏幕上输出同时也重定向到一个文件里 -a 实现追加输出重定向的功能 [rootlamp-test lianxi]# echo xiaoleizige123 |tee leige.txt
xiaoleizige123
[rootlamp-test lianxi]# echo xiaoleizige123 |tee -a leige.txt
xiaoleizige123
[rootlamp-test lianxi]# cat leige.txt
xiaoleizige123
xiaoleizige123十. 用户管理
1.用户相关的命令 useradd 新建用户 userdel 删除用户 [rootlocalhost lianxi]# userdel -r liu1
-r 删除用户的时候随便删除用户的家目录和邮箱passwd 设置密码 mkpasswd 产生密码 -l the length of the password 长度
-d the minimum number of digits 数字
-c the minimum number of lowercase alphabetic characters 小写
-C flag defines the minimum number of uppercase alphabetic characters 大写[rootlocalhost lianxi]# mkpasswd -l 15 -d 2 -C 3
)ej52pkIqHXoxxzchpasswd 批量更新密码 [rootlocalhost lianxi]# echo peng3:123456 |chpasswd 将peng3的密码设置为123456id 判断是否有这个用户 [rootlocalhost ~]# id quanyan
uid8903(quanyan) gid8904(quanyan) 组8904(quanyan)su 切换用户登录 exit 退出 2. 用户文件 /etc/passwd 存放用户信息的文件 /etc/shadow 存放用户密码的文件 !! 和* 表示没有设置密码默认没有设置密码的用户不允许远程登录 /etc/group /proc目录存放是linux内核里的内容 process /dev 存放设备文件的 device 键盘鼠标显示器磁盘等设备 一个设备会有相关文件和它对应 c开头的文件是字符设备文件 与输入和输出字符相关的文件 character 字符
3.输入和清空文件 –stdin 标准输入 standard input 选项的作用 从管道符号传递过来的密码当做从键盘输入 [rootlocalhost lianxi]# echo 123456 |passwd peng1 --stdin清空文件内容 [rootlocalhost lianxi]# user_passwd.txt 清空文件内容不删除文件4.组管理
groupaddgroupdel
5.登录日志 w 查看当前linux系统用户登录的信息 user 登录的用户名 TTY 表示是终端的类型 terminate type ty1 ~ tty6 --真正的终端 pts/0 ~ n --伪终端模拟出来的终端如xshell from 从哪里登录的linux系统 WHAT 正在终端运行的命令 lastlog 哪些人登录过哪些人从来没有登录过 last 查看最近有哪些用户登录了linux系统 十一. 权限 1. 权限介绍 访问权限 可读(read)允许查看文件内容、显示目录列表 - 字符表示r 数字表示4 可写(write)允许修改文件内容允许在目录中新建、移动、删除文件或子目录 - 字符表示w 数字表示2 可执行(execute)允许运行程序、切换目录 - 字符表示x 数字表示1 归属所有权 文件拥有者(owner)拥有该文件或目录的用户帐号 user --》u 属组(group)拥有该文件或目录的组帐号 --》g 其它人(others)除了属主和属组的其他人 --》o all 所有的人 --》a 三个时间 最近访问时间 access time --》atime cat 只要我们读取里面的内容 例如cat最近更改时间 modify time --》mtime 更改文件里的内容 vim最近改动时间 change time --》ctime 改动文件的属性拥有者组权限大小时间名字2.chmod修改权限 chmod change mode-修改模式 使用字符串 rwx u 用户 g 组 o其他
[rootsc-server feng]# chmod uw,gr-x,or-- echo.sh
[rootsc-server feng]# chmod -x echo.sh 全部删除执行的权力
[rootsc-server feng]# chmod x echo.sh 全部增加执行的权力使用数字 4 2 1分别代表w r x [rootsc-server feng]# chmod 755 echo.sh3. 更改组 chown -change owner and group更改文件所有者和组 必须root使用 用户和组必须存在 格式 chown 属主 文件 chown 属组 文件 chown 属主属组 文件 [rootsc-server feng]# chown zhangzhen /outman 修改用户[rootsc-server feng]# chown zhaoyujia:mingjiao /outman/ 修改用户和组chgrp 修改组 格式 chgrp 属组 文件 umask 默认权限掩码-用默认的umask命令控制默认权限临时有效 常用命令选项 -R递归修改指定目录下所有文件、子目录的权限
4.隐藏属性 chattr 设置文件的隐藏属性 -r 递归修改 -a 只能往文件或文件夹里追加内容不能删除和修改内容 --》只增不减 append 附加追加 -i 锁定保护文件-不能动文件或者文件夹里的内容 不能能增加和删除不能修改 immutable (i) 不变的 lsattr 查看文件隐藏属性 -r 递归修改 -d 查看目录 [rootlamp-test lianxi]# chattr a changde
#给changde文件夹增加a隐藏属性该文件夹只能增不能减
[rootlamp-test lianxi]# lsattr -d changde
-----a---------- changde[rootlamp-test lianxi]# chattr i songzhiqiang/
#给songzhiqiang文件夹增加i隐藏属性该文件夹被保护
[rootlamp-test lianxi]# lsattr -d songzhiqiang/
----i----------- songzhiqiang/
[rootlamp-test songzhiqiang]# mkdir feng
mkdir: 无法创建目录feng: 权限不够5.SET位权限 主要用途 为可执行有x权限的文件设置权限字符为s 其他用户执行该文件时将拥有主或属组用户的权限 SET位权限类型 suid 表示对属主用户增加SET位权限-普通用户在执行命令的时候会以命令的拥有者root的身份去执行 如果不管控会导致系统权限泛滥出现安全问题 [rootlamp-test bin]# chmod us mkdir
[rootlamp-test bin]# ll mkdir
-rwsr-xr-x. 1 root root 79864 10月 31 2018 mkdirsgid 表示对属组内的用户增加set位权限 sticky 粘滞位权限-为公共目录如权限为777设置权限字符为t 作用用户不能删除该目录中的其他用户的文件
6. ACL
一个文件/目录的访问控制列表可以针对任意的用户/组使用权限字符分配rwx权限
格式setfacl 选项 规则 文件-m 新增或修改acl中的规则 modify-b 删除所有acl规则-x 删除指定的acl规则查看ACL-getfacl 指令
[rootlamp-test 11-26]# setfacl -m u:song:rwx test/ 单独给用户设置权限
[rootlamp-test 11-26]# setfacl -m g:xiyouji:rwx test 单独给组设置权限
[rootlamp-test 11-26]# setfacl -b test/ 删除所有的额外的权限7.继承与授权 继承 一个用户属于某个组会继承这个组的权限。 1.主要组
2.次要组用户的主要组有效组属于某个组会继承这个组的权限如果是附属组属于某个组也会继承 拒绝权限高于一切 —》针对用户一个组允许一个组拒绝 —》允许 sudo 授权 -给root用户分忧 Linux里root用户权限最大 关机、重启系统、配置IP地址、格式化磁盘、mount等 普通用户权限非常小 Ubuntu中使用安全性命令时使用sudo授权 CentOS中修改/etc/sudoers 文件来授权 定义命令的别名 Cmnd_Alias USERMANAGER /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/groupadd, /usr/bin/passwd 授权使用别名 huang ALLUSERMANAGER %fumaye ALLUSERMANAGER
十二. 系统性能监控
1. 系统的性能指标 1.cpu top 2.memory 内存 free -m 3.磁盘 容量、IO速度 4.网络流量带宽 --》100Mb/s、1000Mb/s 5.服务进程 ps aux、端口netstat -anplut 全能命令dstat -am glances 2. 进程与线程 1.进行shell解析在磁盘中根据PATH变量找到IP命令存放的位置 2.shell会将创建进程的信息传递给内核可以理解为进行系统调用fork()、exec()等 3.内核会去检查内存是否有足够的空间剩余如果有就申请某段内存空间给IP进程如果没有就等或者告诉shell创建进程失败 OOM 4.申请内存给ip进程后内核先会创建pcb的数据结构然后复制磁盘里的代码到内存里分配的空间并启动ip进程 5.在内存中运算后将得到的结果返回给shell解释器shell在返回结果给用户 2.1 进程
进程正在内存里运行进行的程序简称进程 组成pcbcodedata PCB 进程控制块 process control block 进程标识符号pid-进程号文件描述符fd文件句柄 -文件编号 一个进程打开了很多文件对每个文件进行编号这个编号就是文件描述符 id文件指针里面存放的是一个文件的地址 进程标识信息uidgid进程状态state定时器time位置user等 code 程序代码 data 进程产生的数据 os.geteuid() effective user id 有效的用户id
os.getpid() 进程号
os.getuid() 获取进程的user id 是哪个用户启动的进程进程类型 僵尸进程子进程退出父进程没有使用wait()系统调用去回收子进程的pcb导致子进程的信息任然在内核空间里消耗了内存空间死而不化像僵尸一样存在。 杀死僵尸进程-杀死它的父进程 孤儿进程杀死父进程子进程认systemd为父进程叫做孤儿进程 程序和进程1个程序可以对应多个进程但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。 2.2 进程三个状态 并发 在一段时间内同时发生的事情 --》例如1分钟内 --》一段时间内同时发生 并行 在某个时间点同时发生的事情 --》15:03:01 —》同时发生 2.3 进程的通信方式 进程和进程之间通信的方式 socket 槽 1.文件socket socket/data/mysql/mysql.sock-实现mysql和mysqld的通信 2.网络socket 格式ipport 192.168.0.163:3309-网络中通过ip地址找到对方是实现不同的电脑之间的不同的进程之间的通信的 信号处理异步事件的方式 hup信号告诉内核去杀死session相关的子进程 nohup信号告诉bash子进程屏蔽hup信号只能屏蔽hup信号 trap 可以捕捉除了9号信号之外的其他信号。 9号信号无法屏蔽
trap echo i am busy 1 2 9 15信号量进程间通信处理同步互斥机制-相当于锁 pipe 管道 共享内存 消息队列 会话session 一组程序在背后运行完成很多事情 一个session可能会有一个session首进程而一个session首进程可能会有一个控制终端。 一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。 SIGHUP会在以下3种情况下被发送给相应的进程 1、终端关闭时该信号被发送到session首进程以及作为job提交的进程即用 符号提交的进程 2、session首进程退出时该信号被发送到该session中的前台进程组和后台进程组中的每一个进程 3、若进程的退出导致一个进程组变成了孤儿进程组且新出现的孤儿进程组中有进程处于停止状态则SIGHUP和SIGCONT信号会按顺序先后发送到新孤儿进程组中的每一个进程。 系统对SIGHUP信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号当收到该信号时进程就会退出。 作用就是让这个进程在后台运行不在前台运行 设陷阱或夹子、捕捉器捕捉 trap
2.4 线程 组成tcbcodedata 线程thread是操作系统能够进行运算调度的最小单位 它被包含在进程之中是进程中的实际运作单位 一条线程指的是进程中一个单一顺序的控制流一个进程中可以并发多个线程每条线程并行执行不同的任务。
2.5 kill killall pkill kill 根据进程名来杀死 信号编号信号名含义1HUP表示让进程重启挂掉电话线或终端连接的挂起信号这个信号也会造成某些进程在没有终止的情况下重新初始化调度sighup信号2INT表示结束进程但并不是强制性的常用的 “CtrlC” 组合键发出就是一个 kill -2 的信号调度sigint信号interrupt3QUIT退出。9KILL强制杀死进程调度sigkill信号对应的处理程序15TERM正常结束进程是默认信号调度sigterm信号terminate killall 根据名字来杀死进程 [rootfengdeyong ~]# killall -9 vimpkill 根据终端号来杀死进程 pkill -9 -t pts/03. cpu
#查看cpu的信息
[rootsanchuang proc]# cat /proc/cpuinfo
[rootsanchuang proc]# lscpu3.1 CPU组成 构成cpu的主要部件运算器、控制器、寄存器 CPU使用率用户态CPU使用率和系统态CPU使用率 用户态CPU使用率是指执行应用程序代码的时间占总CPU时间的百分比系统态CPU使用率是指应用执行操作系统调用的时间占总CPU时间的百分比。系统态CPU使用率高意味着共享资源有竞争或者I/O设备之间有大量的交互。提高应用性能和扩展性的一个目标是尽可能降低系统态CPU使用率。
3.2 上下文切换 上下文切换一个进程进入CPU另外一个进程出去 如果可运行的线程数大于CPU的数量那么OS最终会强行换出正在执行的线程从而使其他线程能够使用CPU引起上下文切换它会保存当前运行线程的执行上下文并重建新调入线程的执行上下文。 上下文切换又分为2种让步式上下文切换和抢占式上下文切换。前者是指执行线程主动释放CPU与锁竞争严重程度成正比可通过减少锁竞争来避免后者是指线程因分配的时间片用尽而被迫放弃CPU或者被其他优先级更高的线程所抢占一般由于线程数大于CPU可用核心数引起可通过调整线程数适当减少线程数来避免。
3.3 调度算法
调度算法根据系统的资源分配策略所规定的资源分配算法 cfs 完全公平调度算法
3.4 top命令 操作选项 按q退出 quit按数字 1 查看cpu每个核的使用率M根据驻留内存大小进行排序 memoryP根据CPU使用百分比大小进行排序 processershift 根据其他的列来排序h 查看帮助可以使用哪些命令 -n 1 刷新1次就退出
[rootlb-1 nginx]# top -n 1
设置刷新时间3秒
[rootsc-mysql-master ~]# top -d 3 Load Average 平均负载 top - 17:31:56 up 1 day, 4:49, 2 users, load average: 0.00, 0.02, 0.05平均负载(load average)是指系统的运行队列的平均利用率也可以认为是可运行进程的平均数。top命令中load average显示的是最近1分钟、5分钟和15分钟的系统平均负载-系统平均负载是指过去的1分钟5分钟15分钟处于可运行或不可中断状态的进程的平均数量。 经验值 安全的平均负载数一般是cpu的个数4个cpu核心平均负载为4说明系统很多不忙 如果每个CPU内核的当前活动进程数不大于3的话那么系统的性能还算可以支持。如果每个CPU内核的任务数大于5那么这台机器的性能有严重问题。 load average数据是每隔5秒钟检查一次活跃的进程数然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量结果高于5的时候就表明系统在超负荷运转了。 进程状态 Tasks: 111 total, 1 running, 110 sleeping, 0 stopped, 0 zombierunning --》在cpu里运行 sleeping --》就绪和阻塞 stoped --》暂停/挂起 zombie --》僵死状态 --》僵尸进程 cpu状态 %Cpu(s): 27.0 us, 73.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st27.0 us 用户空间占用CPU的百分比。 73.0 sy 内核空间占用CPU的百分比。 0.0 ni 改变过优先级的进程占用CPU的百分比 100.0 id 空闲CPU百分比 0.0 wa IO等待占用CPU的百分比 0.0 hi 硬中断Hardware IRQ占用CPU的百分比 0.0 si 软中断Software Interrupts占用CPU的百分比 物理内存 KiB Mem : 3861080 total, 237000 free, 503872 used, 3120208 buff/cachetotal 物理内存总量 used 使用中的内存总量 free 空闲内存总量 buffers 缓存的内存量 swap交换分区 KiB Swap: 2097148 total, 2068724 free, 28424 used. 3082880 avail Mem total 交换区总量 used 使用的交换区总量 free 空闲交换区总量 cached 缓冲的交换区总量 各进程状态监控 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND 1406 mysql 20 0 1774000 225668 636 S 0.3 5.8 2:51.29 mysqld PID 进程id USER 进程所有者 PR 进程优先级 NI nice值。负值表示高优先级正值表示低优先级 VIRT 进程使用的虚拟内存总量单位kb。VIRTSWAPRES RES 进程使用的、未被换出的物理内存大小单位kb。RESCODEDATA SHR 共享内存大小单位kb S 进程状态。D不可中断的睡眠状态 R运行 S睡眠 T跟踪/停止 Z僵尸进程 %CPU 上次更新到现在的CPU时间占用百分比 %MEM 进程使用的物理内存百分比 TIME 进程使用的CPU时间总计单位1/100秒 COMMAND 进程名称命令名/命令行
4. 内存memory
[rootsanchuang proc]# cat /proc/meminfo 内存的信息4.1 内存空间分类
内核空间系统空间就是操作系统占据的内存区域用户空间就是用户进程所在的内存区域
4.2 内存溢出OOM OOM全称“Out Of Memory”内存溢出通俗理解就是内存不够啦。 **内存泄漏**申请使用完的内存没有释放导致虚拟机不能再次使用该内存此时这段内存就泄露了因为申请者不用了而又不能被虚拟机分配给别人用。一次内存泄漏似乎不会有大的影响但内存泄漏堆积后的后果就是内存溢出。 **内存溢出**指程序申请内存时没有足够的内存供申请者使用。
4.3 free free -h以人类易识别的单位显示-m 显示单位为M [rootmaster ~]# free -htotal used free shared buff/cache available
Mem: 3.7G 491M 231M 4.9M 3.0G 2.9G
Swap: 2.0G 27M 2.0G
[rootmaster ~]# free -mtotal used free shared buff/cache available
Mem: 3770 491 231 4 3047 3011
Swap: 2047 27 2020total 总的大小 used 使用了的大小
free 真正没有使用的空间 --》剩余的空间
shared 共享的内存空间 大家都可以使用的空间
buff/cache 缓存的空间 大家都可以去使用的空间 --》临时用来存放数据Mem 行(第二行)是内存的使用情况。 Swap 行(第三行)是交换空间的使用情况。 total 列显示系统总的可用物理内存和交换空间大小。 used 列显示已经被使用的物理内存和交换空间。 free 列显示还有多少物理内存和交换空间可用使用。 shared 列显示被共享使用的物理内存大小。 buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。 available 列显示还可以被应用程序使用的物理内存大小。 buffer : 在内存里的临时存放数据的地方 data 从内存到磁盘 --》写操作 cache 在内存里的临时存放数据的地方 data 从磁盘到内存 --》读操作 available 能够给下一个进程提供的可用空间 freebuff/cache里的可用空间 swap 称呼为交换分区从磁盘里拿出一块空间来充当内存使用
4.4 sync sync 将文件系统缓存中的内容强制写入磁盘中系统崩溃或断电、安全重启或关机、数据库备份 选项 -f立即刷新所有更新到文件系统中-l刷新所有已修改的块设备缓冲区-p当遇到IO错误时不输出错误信息到控制台-q禁止内核调用fsync函数只刷新磁盘缓存 sync //将所有更新立即写入文件系统中
sync -f //立即刷新所有更新到文件系统中
sync -l //刷新所有已修改的块设备缓冲区5. 磁盘
5.1 容量
5.1.1 df df -Th 查看磁盘分区容量接-T显示类型-h以人类易识别的单位显示 [rootmaster ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 16G 1.9G 90% /
/dev/sda1 xfs 1014M 195M 820M 20% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/05.1.2 lsblk lsblk 检查和管理磁盘空间 [rootmaster ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 4.4G 0 rom 5.2 IO读写速度 IO是指input和output tps每秒传输读写的次数 IOPS 每秒处理的读写次数 5.2.1 查看磁盘读写的速度 await表示平均每次设备I/O操作的等待时间以毫秒为单位。 svctm表示平均每次设备I/O操作的服务时间以毫秒为单位。 %util表示一秒中有百分之几的时间用于I/O操作即繁忙度-磁盘使用率 (1) iostat iostat -x 2 50 [rootmaster ~]#yum install sysstat -y 安装
[rootmaster ~]# iostat -x 2 50
Linux 3.10.0-1160.92.1.el7.x86_64 (master) 2023年08月21日 _x86_64_ (2 CPU)avg-cpu: %user %nice %system %iowait %steal %idle0.02 0.00 0.07 0.00 0.00 99.90Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
scd0 0.00 0.00 0.00 0.00 0.01 0.00 114.22 0.00 1.61 1.61 0.00 1.22 0.00
sda 0.01 0.08 0.12 0.24 11.50 73.36 476.90 0.00 9.80 0.82 14.40 0.52 0.02
dm-0 0.00 0.00 0.10 0.24 11.15 73.05 494.87 0.00 10.22 0.89 14.02 0.50 0.02
dm-1 0.00 0.00 0.02 0.07 0.09 0.29 8.33 0.00 16.50 1.82 20.31 0.27 0.00avg-cpu: %user %nice %system %iowait %steal %idle0.00 0.00 0.00 0.00 0.00 100.00(2) sar sar -d 1 50 [rootmaster ~]#yum install sysstat -y 安装
[rootmaster ~]# sar -d 1 50
Linux 3.10.0-1160.92.1.el7.x86_64 (master) 2023年08月21日 _x86_64_ (2 CPU)22时22分07秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
22时22分08秒 dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
22时22分08秒 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
22时22分08秒 dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
22时22分08秒 dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.005.2.3 测试磁盘性能的命令
(1) dd
模拟大量的数据产生往磁盘里写
[rootmaster ~]# dd if/dev/zero of/test.dd bs1M count1000 6. 网络
网络流量带宽流量传输速度 --》100Mb/s、1000Mb/s
6.1 查看进程 ps aux -a 显示所有用户的进程 -u 显示用户 -x 显示无控制终端的进程 -o 用户定义的 ps aux 列出当前系统中正在运行的进程的详细信息
echo $$ 查看当前进程
kill 是杀死进程的命令 -9 强制杀死这个进程top 查看进程实时动态信息工具(看内存) 查看进程状态、进程使用内存状况、进程使用CPU状况、进程PID等 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND
21829 root 20 0 0 0 0 S 0.7 0.6 129:53.91 java
22559 root 20 0 158920 5628 4268 S 0.3 9.2 139:42.81 java
22598 root 20 0 162112 2208 1540 S 0.3 0.1 0:04.68 fluentd6.2 查看端口
6.2.1 查看本机端口
1netstat netstat 可以查看本机开放了哪些端口 [rootlocalhost ~]# netstat -anplut -a显示所有链接和监听端口 --all -n: 显示数字地址 -p: 显示程序的PID和名称 --programs -l: 列出状态是 LISTEN 的统计信息 --listening -u: 显示 UDP 连接 -t: 显示 TCP 连接 [rootlocalhost ~]# netstat -anplut
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1073/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1316/master
tcp 0 36 192.168.98.131:22 192.168.98.1:52216 ESTABLISHED 1759/sshd: rootpts
tcp 0 0 192.168.98.131:53576 202.202.1.140:443 TIME_WAIT -
tcp 0 0 192.168.98.131:53574 202.202.1.140:443 TIME_WAIT -
tcp 0 0 192.168.98.131:53780 62.212.239.34:443 TIME_WAIT -
tcp 0 0 192.168.98.131:45818 202.141.160.110:80 TIME_WAIT -
tcp 0 0 192.168.98.131:39728 118.174.8.44:80 TIME_WAIT -
tcp6 0 0 :::22 :::* LISTEN 1073/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1316/master
udp 0 0 0.0.0.0:68 0.0.0.0:* 1858/dhclient
udp 0 0 127.0.0.1:323 0.0.0.0:* 693/chronyd
udp6 0 0 ::1:323 :::* 693/chronyd Recv-Q 接收队列 三次握手中服务器的半连接队列
Send-Q 发送队列2ss ss 可以用来获取本机的socket统计信息 [rootlocalhost ~]# ss -tlp | grep ssh
LISTEN 0 128 *:ssh *:* users:((sshd,pid1064,fd3))
LISTEN 0 128 [::]:ssh [::]:* users:((sshd,pid1064,fd4))losf 列出本机已经打开了哪些端口 [rootmaster ~]# lsof -i:80
[rootmaster ~]# lsof /root
[rootmaster ~]# lsof -p 1[rootweb1 conf]# lsof -i:80 查看那个进程占用了80端口
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1124 root 7u IPv4 19798 0t0 TCP *:http (LISTEN)
nginx 1125 tiankai 7u IPv4 19798 0t0 TCP *:http (LISTEN)6.2.2 查看别的机器
1nc和nmap nc和nmap 探索一个机器或者整个局域网里机器开放了哪些端口 会对某个ip地址进行常用端口号的扫描一个一个端口去试是否开放 -z zero 表示只扫描不发送数据 [rootweb1 conf]#nc -z 192.168.0.1 8080 1telnet
telnet
6.3 流量监控
6.3.1 glances
[rootmaster ~]# glances6.3.2 dstat
[rootmaster ~]# dstat
[rootmaster ~]# dstat -N ens336.3.3 iftop
监测网络接口ens33 上的流量
[rootmaster ~]# yum install iftop -y
[rootmaster ~]# iftop -i ens33 6.3.4 iptraf
监测网络接口ens33 上的流量
[rootmaster ~]# yum install iptraf -y
[rootmaster ~]# iptraf-ng -i ens336.3.5 nethogs nethogs 可以看某个进程消耗多少网络带宽的 [rootmaster ~]# yum install nethogs -y
[rootmaster ~]# nethogs全能命令glances、dstat、zabbix、nmon、netdata、sar 7. 有客户反馈网页打开慢怎么排查 1网络服务器出口带宽不够用。这是一个很常见的瓶颈。一方面可能是本身购买的服务器出口带宽就很小企业购买带宽相当昂贵一旦用户访问量上来了并发量大了自然均分给用户的出口带宽就更小了所以某些用户的访问速度就会下降了很多。另一个就是跨运营商网络导致带宽缩减例如很多公司的网站服务器是放在电信的网络上的而如果用户这边对接的是长城或者说联通的宽带运营商之间网络传输在对接时是会有限制的这就可能导致带宽的缩减。 2CPU、内存和磁盘服务器负载过大忙不过来比如说CPU和内存消耗完了top命令查看CPU是否负载过大负载过大就看是哪个程序占用CPU资源过多kill掉程序不能kill就看看是不是程序本省的问题。如果CPU负载正常就查看内存的负载情况如果负载过大就查看是不是进程开启的太多了将不必要的进程kill掉。如果内存负载正常就用iostat查看磁盘的I/O情况如果磁盘I/O高居不下就查看是哪个进程在大量的I/O将其kill掉。 3数据库数据库的瓶颈也是很常见的一个瓶颈这点跟上面第三个原因可以一起来说。当我们的数据库变得愈发庞大比如好多G好多T这么大那对于数据库的读写就会变得相当缓慢了索引优化固然能提升一些效率但数据库已经如此庞大的话如果每次查询都对这么大的数据库进行全局查询自然会很慢。这个学过数据库的话也是挺容易理解的。 4代码不够优化网站的开发代码没写好例如mysql语句没有进行优化导致数据库的读写相当耗费时间。 十三. 开机启动流程 1. 意义
掌握让某个软件开机自动运行开机不能正常启动是什么原因或者那个环节出现了问题防止黑客植入木马去查询黑客会把木马放到哪些地方
2. 流程
2.1 开机自检 POST
开机自检由主板上的BIOS程序去完成对CPU、系统主板、基本内存、扩展内存、系统ROM BIOS等器件的测试。如发现错误给操作者提示或警告。简化或加快该过程可使系统能够快速启动。
2.2 boot启动顺序
第1引导顺序hard drive 硬盘第2引导顺序cdrom 光驱 ----》安装系统第3引导顺序removable device 可移动设备–》u盘移动硬盘 --》安装系统第4引导顺序Network --》从网络启动–》网络中安装服务器启动 --》安装
2.3 进入磁盘
不同盘片上的相同磁道组成一个柱面MBR 主引导记录 在硬盘里0磁盘0柱面1扇区的位置MBR 就是一个扇区占用512个字节 --》安装一个启动程序 grub grub是linux系统的启动程序grub2是grub的第2个版本
2.4 gurb2引导程序通过驱动执行内核文件
内核文件 initramfs-4.18.0-147.el8.x86_64.img --》给内核程序提供一个初始化的内存文件系统的镜像文件 --》临时的根文件系统的镜像文件–提供程序和配置文件 --》政府各个职能部门vmlinuz-4.18.0-147.el8.x86_64 --》内核程序文件 --》皇上
2.5 启动systemd进程
systemd是initramfs里的一个程序去启动的程序需求去启动systemd下面有很多服务快捷方式
2.6 启动对应运行级别的服务 centos6里运行级别 runlevel 0 关机 1 单用户模式 2 多用户模式不能使用nfs 3 完全多用户模式 --》字符界面模式 --》非常正常的模式 默认最小化安装linux系统就是这个模式 multi-user 4 保留没有使用 5 图形界面 graphical 6 重启 [rootlocalhost boot]# runlevel 查看当前的运行级别
N 3
N 代表最开始进入的模式 如果是N表示没有进行模式切换 no3 5 代表开机先进入运行级别3 后来切换到运行级别5[rootlocalhost boot]# systemctl get-default 查看默认的运行级别
multi-user.target
[rootlocalhost boot]systemctl set-default graphical.target 设置开机进入图形界面2.7 进入multi-user级别下开机启动文件 /etc/rc.local /etc/rc.local文件会在所有的服务都运行完成后执行这个文件里的命令这个脚本是最后执行的必须给这个文件可执行权限 /etc/fstab /etc/fstab 是linux系统开机会自动根据这个文件里的内容挂载磁盘分区 file system 文件系统 file system 文件系统–》磁盘里的分区–》一个分区对应一个文件系统 启动的区别 systemctl disable firewalld 设置firewalld服务开机不启动 --》下一次开机的问题
systemctl enable firewalld 设置firewalld服务开机启动
systemctl start firewalld 立马启动firewalld的服务 --》本次
systemctl stop firewalld 立马关闭firewalld的服务2.8 login登录
十四. SSH服务
1. SSH介绍 什么是SSH SSH secure shell 安全的shell 是一个网络加密协议用来远程控制服务器的telnet使用的明文传输的 使用在linux/unix系统里远程控制服务器对传输的数据进行加密 如何搭建ssh服务 通过openssh搭载 OpenSSH是使用SSH协议进行远程登录的首要连接工具。它对所有通信进行加密以消除窃听、连接劫持和其他攻击。此外OpenSSH提供了大量的安全隧道功能、几种身份验证方法和复杂的配置选项。 centos7/8/6安装好系统默认安装openssh openssh 提供某些ssh的工具–》客户端 openssh-clients 客户端程序 openssh-server 服务器端
2.配置排错
2.1 配置文件 配置文件/etc/ssh/sshd_config sshd_config --》sshd 服务器端的进程 参数默认值参数说明Port22sshd服务默认的端口22为了安全考虑建议修改成其它端口ListenAddress0.0.0.0默认监听网卡所有的IP地址PermitRootLoginyes是否允许root登陆默认是允许的建议设置成noPubkeyAuthenticationyes是否允许公钥登录默认是允许的AuthorizedKeysFile.ssh/authorized_keys存放公钥的地方PasswordAuthenticationyes是否需要密码验证默认是yesPermitEmptyPasswordsno是否允许以空的密码登入DenyUsers拒绝用户从哪里登录不能和AllowUsers同时使用AllowUsers允许用户从哪里登录不能和DenyUsers同时使用 ssh_config --》ssh 客户端命令的配置文件 守护进程 daemon 一直在内存里运行的进程 sshdfirewalld中的d都是daemon表示是守护进程
2.2 日志文件 日志文件/var/log/secure Failed password
2.2 故障排错 关闭selinux selinux 是linux系统里的一套安全机制用来保护linux系统的安全会限制进程去做某些对安全有威胁的事情。 永久修改selinux的策略为disabled
[rootlocalhost ssh]# vim /etc/selinux/config
SELINUXdisabled
[rootlocalhost ssh]# getenforce 查看selinux的状态
Enforcing
[rootlocalhost ssh]# setenforce 0 临时调整selinux的策略为宽容模式
[rootlocalhost ssh]# getenforce
Permissive
[rootlocalhost ssh]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service关闭防火墙 [rootlocalhost ssh]# service firewalld stop 关闭防火墙
Redirecting to /bin/systemctl stop firewalld.service3.加密与安全加固
3.1 安全加固 修改端口并禁用root 修改配置文件/etc/ssh/sshd_config Port 2255 指定ssh服务的端口号为2255默认是22但是可以修改 PermitRootLogin yes 允许root用户远程登录 PermitRootLogin no 不允许root用户远程登录 —》这个更加好提高安全性
3.2 加密
对称
非对称
如何知道sshd服务是否启动
1.看进程 2.看端口 3.直接访问 4.看日志
3.3 安全验证等级
SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来配置的它的三种配置值如下 StrictHostKeyCheckingno 最不安全的级别当然也没有那么多烦人的提示了相对安全的内网时建议使用。如果连接server的key在本地不存在那么就自动添加到文件中默认是known_hosts并且给出一个警告。 StrictHostKeyCheckingask 默认的级别就是出现刚才的提示了。如果连接和key不匹配给出提示并拒绝登录。 StrictHostKeyCheckingyes 最安全的级别如果连接与key不匹配就拒绝连接不会提示详细信息。
4.拷贝与传输
4.1 scp 远程拷贝 底层通过ssh协议远程连接到其他的机器上copy文件 [rootlocalhost ssh]# scp root47.115.222.91:/etc/passwd /etc/ssh4.2 sftp文件传输 事列 [rootlocalhost ssh]# sftp root47.115.222.91命令 ls
sftp !ls
pwd
sftp lpwd
cd
sftp lcd
sftp get 下载
sftp put 上传
sftp put -r 上传文件夹
sftp put -r grub2
sftp exit4.3 sz和rz 安装文件传输工具 [rootnginx ~]# yum install lrzsz -yLinux-windows sz 文件名 [rootnginx ~]# sz hello.shwindows-Linux rz [rootnginx ~]# rz5.免密通道 步骤 1.准备两台服务器一台做客户端一台做服务端 2.生成密钥对在客户端上使用root用户生成密钥对密钥对会在用户的家目录下id_rsa 私钥id_rsa.pub 公钥 [rootlocalhost ssh]# ssh-keygen -t rsa3.上传公钥到的服务端的~/.ssh/authorized_keys中 #使用 ssh-copy-id命令
[rootlocalhost .ssh]# ssh-copy-id -i id_rsa.pub root47.115.222.91
-i 指定密钥文件#使用scp命令
[rootlocalhost ~]# scp ~/.ssh/id_rsa.pub root47.115.222.91:/root/.ssh/authorized_keys#如果拒绝登录可以修改ssh验证的安全级别[rootbogon hadoop-2.9.2]# scp -o StrictHostKeyCheckingno ~/.ssh/id_rsa.pub root47.115.222.91:/root/.ssh/authorized_keys#前面两种方法需要传输需要密码使用sshpass可以免密传输
[rootlocalhost ~]# yum install sshpass
[rootbogon hadoop-2.9.2]# sshpass -p 密码 scp ~/.ssh/id_rsa.pub root47.115.222.91:/root/.ssh/authorized_keys#如果拒绝登录可以修改ssh验证的安全级别[rootbogon hadoop-2.9.2]# sshpass -p 密码 scp -o StrictHostKeyCheckingno ~/.ssh/id_rsa.pub root47.115.222.91:/root/.ssh/authorized_keys4.登录验证 [rootlocalhost .ssh]# ssh root47.115.222.91nohup 屏蔽hup信号不会被杀死 [rootsanchuang ~]# nohup bash while.sh 符号表示放在后台运行
[1] 4080nohup会忽略输入并把输出追加到nohup.out
6.tcpwrappers机制 介绍 TCP Wrappers可以将其他的TCP服务程序“包裹”起来增加了一个额外的安全检测机制定制的存取控制规则来判断对方是否有使用这个服务的权限外来的连接请求首先要通过这层安全检测获得许可后才能被服务程序所接受。同时它还可以记录所有企图访问包装服务的行为为管理员提供丰富的安全分析资料。 TCP Wrappers是一种可靠的工具可以帮助您屏蔽和预警未经授权的访问。它有许多高级功能适用于各种入侵场景。在使用它之前必须仔细地制定一些规则以确保它在您的计算机上起到了最有效的作用。 两个配置文件配置后不需重启立即生效 hosts.allow # 允许本地IP地址范围内的所有主机访问sshd服务
sshd: 192.168.0.# 只允许特定地址访问ftp服务
ftp: 203.0.113.1# 将所有未在hosts.allow中定义的连接都拒绝
ALL: ALLhosts.deny # 允许来自192.168.1.#网段机器访问ssh
sshd: 192.168.1.# 允许来自10.0.0.0/8网段机器http连接但不允许来自10.0.0.2的http连接
httpd: 10.0.0.0/8 EXCEPT 10.0.0.2# 拒绝来自主机mail.example.com的所有服务连接
ALL: mail.example.com十五. ansible
Ansible是一个部署一群远程主机的工具;Ansible通过SSH协议实现远程节点和管理节点之间的通信。 建立免密通道 安装epel源和ansible [rootansible ~]# yum install epel-release -y
[rootansible ~]# yum install ansible -y1. 配置介绍 两个重要的配置文件 ansible的主配置文件 /etc/ansible/ansible.cfg 这个文件主要定义了roles_path路径,主机清单路径,连接清单中的主机方式等配置,这些大部的默认配置已经足够我们平时使用,如需要特别配置可以自行去修改; /etc/ansible/hosts 这个配置文件就是默认主机清单配置文件,可通过ansible.cfg重新定义的; 三个重要的可执行文件 ansible 主执行程序,一般用于命令行下执行ansible-playbook 执行playbook中的任务ansible-doc 获取各模块的帮助信息
2.ansible常用模块
2.1 copy模块
从本地copy文件分发到目录主机路径 参数说明: src 源文件路径 dest 目标路径 content 自行填充的文件内容 owner 属主 group 属组 mode权限 示例:
ansible all -m copy -a src/etc/fstab dest/tmp/fstab.ansible mode600
ansible all -m copy -a contenthi there\n dest/tmp/hi.txt2.2 fetch模块
从远程主机拉取文件到本地 示例
[rootansible ~]# ansible all -m fetch -a src/tmp/hi.txt dest/tmp说明:fetch使用很简单,src和dest,dest只要指定一个接收目录,默认会在后面加上远程主机及src的路径 2.3 shell模块
[rootansible ~]# ansible all -m shell -a ifconfig|grep lo2.4 file模块
设置文件属性(创建文件) 常用参数: path目标路径 state directory为目录,link为软件链接 group 目录属组 owner 属主 示例1:创建目录
[rootansible ~]# ansible all -m file -a path/var/tmp/hello.dir statedirectory示例2:创建软件链接
[rootansible ~]# ansible all -m file -a src/tmp/hi.txt path/var/tmp/hi.link statelink2.5 cron模块
通过cron模块对目标主机生成计划任务 常用参数: 除了分(minute)时(hour)日(day)月(month)周(week)外 name: 本次计划任务的名称 state: present 生成(默认) |absent 删除 (基于name)
示例:对各主机添加每隔3分钟从time.windows.com同步时间
[rootansible ~]# ansible all -m cron -a minute*/3 job/usr/sbin/update time.windows.com /dev/null #到node1上查看
[rootnode1 tmp]# crontab -l
#Ansible: update_time
*/3 * * * * /usr/sbin/update time.windows.com /dev/null示例2:删除计划任务
[rootansible ~]# ansible all -m cron -a nameupdate_time stateabsent#node1上查看
[rootnode1 tmp]# crontab -l
会发现已经被删除了2.6 yum模块
故名思义就是yum安装软件包的模块; 常用参数说明: enablerepo,disablerepo表示启用与禁用某repo库 name 安装包名 state (present orinstalled’, latest)表示安装, (absent’ or removed’) 表示删除 示例:通过安装epel扩展源并安装nginx
[rootansible ~]# ansible all -m yum -a nameepel-release stateinstalled
[rootansible ~]# ansible all -m yum -a namenginx stateinstalled2.7 service模块
服务管理模块 常用参数: name:服务名 state:服务状态 enabled: 是否开机启动 true|false runlevel: 启动级别 (systemed方式忽略)
示例:
[rootansible ~]# ansible all -m service -a namenginx statestarted enabledtrue
到node1上查看
[rootnode1 tmp]# systemctl status nginx2.8 script模块
把本地的脚本传到远端执行;前提是到远端可以执行,不要把Linux下的脚本同步到windows下执行; 直接上示例: 本地ansible上的脚本:
[rootansible ~]# cat test.sh
#!/bin/bash
echo ansible script test! /tmp/ansible.txt[rootansible ~]# ansible all -m script -a /root/test.sh到node1上查看
[rootnode1 tmp]# ls
ansible.txt fstab.ansible hi.txt
[rootnode1 tmp]# cat ansible.txt
ansible script test!3.Playbook实战
3.1 playbook的核心元素 hosts : playbook配置文件作用的主机 tasks: 任务列表 variables: 变量 templates:包含模板语法的文本文件 handlers :由特定条件触发的任务 notify 触发通知 tags 给一个任务打一个标签 可以直接从这个任务开始执行
ansible-playbook -t configfile redis_second.yamlroles :用于层次性、结构化地组织playbook。roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等 3.2 实列
stop_fw_selinux.sh 脚本
[rootansible playbook2]# cat stop_fw_selinux.sh
#!/bin/bash#停止防火墙服务和清除iptables规则
service firewalld stop
iptables -F
iptables -t nat -F
#设置firewalld 开机不启动
systemctl disable firewalld#临时禁用selinux
setenforce 0
#永久禁用selinux
sed -i /^SELINUX/ s/enforcing/disabled/ /etc/selinux/config redis3.yaml
[rootansible playbook2]# vim redis3.yaml
- hosts: scwebremote_user: roottasks:
# - name: stop firewalld
# service: namefirewalld statestopped enabledfalse
# - name: disable selinux
# shell:
# cmd: |
# setenforce 0
# sed -i /^SELINUX/ s/enforcing/disabled/ /etc/selinux/config - name: stop firewalld and selinuxscript: /playbook2/stop_fw_selinux.sh- name: install redisyum: nameredis stateinstalled- name: copy config file to node serverscopy: src/playbook2/redis.conf dest/etc/redis.conf ownerredisnotify: restart redistags: configfile- name: start redisservice: nameredis statestartedhandlers:- name: restart redisservice: nameredis staterestarted[rootlocalhost ~]# ansible-playbook redis3.yaml
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88270.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!