把我们的操作命令,翻译成内核可以识别的0101语言,然后内核会把操作结果返回给shell,经解释返回给我们
widows也有shell,图形交互界面就是它的shell
让我有个地方可以输命令
除了作为接受用户的命令 ,也可以作为一种编程语言
Bash Shell
最后一列是用户的登陆后的权限
基本上程序必须用路径来执行,有的命令不需要其实是一种简化操作
方式二:直接用bash命令,连权限都不用赋
这个脚本文件是在window中编辑成功的
所以要把脚本从windows格式转化为linux格式
所有的命令其实都是靠路径来执行的
ls可以不打路径,是因为4
cd是bash自带的,根本没有路径
用命令行定义的别名重启会失效
执行但不输出,即把输出扔到垃圾桶
执行操作的命令本来应该通过键盘写入,但是现在 通过文件来
ctrl+d
就算中间有报错,也不会影响后面的命令的执行
我们就可以知道执行一个命令传100M需要用多长时间
2:删除当前目录下的所有文件
通配符用来匹配文件名
单引号和双引号的区别。单引号是原样输出、双引号才是代表
通配符:匹配内容
单引号和双引号:单引号括起来的内容没有特殊符号,双引号括起来的内容会有特殊符号
反引号和$():括起来的是系统变量
年龄和性别在子shell中还在,但是名字不在了
执行命令要想运行,要用路径
但是系统路径并没有写路径,就能运行
敲入一个命令后,就在path中去找
小写w显示出了完整的路径
第8条命令
可以按照自己的习惯来该提示符
但是还是默认的比较习惯
位置参数变量的变量名称和作用是固定的
输出后面参数的结果
带上参数后就能将参数输出了
$用来接收参数
脚本中没有提示让用户输入两个参数才能运行,没有输入参数的话怎么办呢?
把命令行中的参数传递到脚本中
第一个循环把所有的参数当成一个整体
第二个参数把每个参数当成一个独立的参数
可以在命令执行的同时写入参数
命令找不到时报错设定为127
文件找不到报错为2
&代表后台执行
最小化其实就是放入后台,
显示当前进程的id,显示后台进程的id
这是因为默认的类型是字符串类型
两个小括号代表要用数值运算
越靠上优先级越高
通过判断x的值,来判断y是否有值。
y不存在,x就等于一个新值。
y存在但为空,x也为空。
y有值,x就等于y。
减号
冒号
加号
减号
等号:不光给x赋值,还要给y
问号:值不存在时,输出 给用户看
环境变量:在一系列的shell中生效,还有默认环境变量。
环境变量的配置文件:专门用来放环境变量的文件
如果修改了配置文件,source让强制生效
path:命令的路径
histsize:历史命令保存条数
psi:提示符
hostname:主机名
临时生效
etc:对所有登陆系统的用户都有效
~:家目录,只对当前用户有效,这两个是隐藏文件用.开头
用户登录后首先调用etc/profile etc/profile/*.sh
:用户输入用户名和密码后,第一步读取了/etc/profile文件
判断出管理员,所以让它读那几个
默认的权限
umask
最主要的是读取定义语言的这个脚本
中文编码环境
这个文件如果存在就调用,然后给path中追加一个自己本身用户的bin
很多都重复了,比如说umask等等。只要是重复的值,都是定义的不需要输入用户名和密码的那种情况生效。
加一个/l
因为linux本地支持6个终端,用alt+Fn来切换,加上\l可以知道当前是哪个。但这只对本地linux有效
这下欢迎信息出现了,但不支持
这是登陆后的欢迎信息
本地终端必须安装中文插件才能支持中文,cch,con等等
通配符:* ? []。匹配文件名,因为一些命令不支持正则表达式。完全匹配
正则:在文件中匹配字符串,一些命令支持正则表达式。包含匹配
完全匹配
只要含有size就会列出 ,包含匹配
匹配包含a的所有字符,即a出现0次或者任意多次。即列出了整个文档
aa匹配有一个连续的a出现
aaa匹配有两个连续的a出现
相当于通配符中的?
.*匹配任意字符,任意个数
匹配空白行
只要有字符结尾
最少一个a最多两个a
grep是提取行 cut是提取列
中间的是制表符而不是空格
默认分隔符是制表符
冒号作为分隔符
结合使用grep和cut
只有普通用户有/bin/bash
管理员是/sbin/nologin
写一个脚本,如果使用率大于80%报警
完全没有作用,是因为这个分隔符是多空格不是制表符
用-d指定分隔符是空格也不行,它制定了一个空格的分隔符,它认为第五列是空格
以为用awk命令来实现
cut提取字符段
标准输出格式,用来支持awk命令
只有第一个%s起了作用,需要用’'把%s们括起来
printf不能直接输出文件名中的内容
因为awk里面不能使用cat等显示,必须得用printf
cat vi等都不用我们手动调整格式
cat不能截取以空格作为分隔符的输出结果
而awk可以
awk命令很复杂,不仅可以进行字符截取,还可以编程
第2列 制表符 第6列 换行
cat命令不能处理df这样的结果,是因为里面是空格符
而awk可以
超过80%就报警
在执行之前打印出
指定分隔符
但是第一行没有处理,是因为awk是读完第一行之后才开始执行处理
这表示在我读取第一行命令之前,就把分隔符写进去
在所有的命令都执行完后执行的一条命令
awk命令比较复杂
cut、printf、awk都是进行字段提取的
printf是进行行提取
cut和awk是进行列提取
sed命令时用来进行流编辑器
vi只可以修改文档 sed不光可以修改文件,可以从管道符接收数据来修改,可以直接修改命令的结果
sed在写shell脚本时很重要
其实系统命令也支持/,它会认为你这个命令没有输完,等待你执行接下来的命令。
进行数据替换时也可以用/。
p是输出,2p就是输出第二行
它不光把第二行输出了,还把所有的内容都给输出了一遍,即第二行输出了两遍
如果只想看第二行,而不想得到全部的内容,那么就需要加-n选项。
所以一般用p选项打印的话,都要加上-n。
注意,只要不加-i,所有的操作都不影响文件本身,只影响了屏幕输出。
我们来看看除了操作文件本身,它还可以来干什么。
放到管道符之后,它还可以接收命令的结果。
这个文件就只有4行,我删掉2~4行,那么就只剩下第一行的数据了,直接输出剩余的结果。
但是并没有把文件的内容真正的给删除掉,只要不加-i。
a代表追加 i代表插入
/表示一行还没输完,还要接着输入
在第二行的前面插入了。
\允许多行的输入。追加、替换、插入都允许多行输入。
要想保存在文件中,加-i,这时候没有输出,但是cat文件,输出了结果。
-e是允许多个命令同时执行,用;分开
允许手工指定分隔符,还是排序,但是不是按照整个文件行首的字母排序了,而是手工指定以:作为分隔符,然后用第三个字段开始到第三个字段结束排序,其实就是使用第三个字段来排序,
这时候就会发现会从用户的uid来排序
没把整个uid当成是字符串,而是按首字符来排序的,所以前面是1 10 11而2 3都在后面。
为了能够让它识别这些数字的大小,需要加-n。意思是把提取出来的字符串当做数值型的来计算。
依次是行数、单词数、字符数
还可以统计命令的输出
测试一个条件是否成立
块设备文件、字符设备文件、管道文件、套接字文件都是一些特殊的文件类型
常用的就是目录文件、普通文件、文件是否存在
怎么没有输出结果呀,可以通过echo来判断上一条命令是否执行正确,0是正确1是错误。
test和[]都可以,[]更为常用。
为什么需要这种方式来判断在不在?因为ls是给用户看,而test这种是给程序来看。
双&&符是逻辑与,这样可以不用再手动输出执行结果
root是存在,但它不是普通文件,而是目录文件。
读写执行
不管是所有者、所属组、其他人,只要有一个有w权限,就会说它有写权限
硬链接:文件1,2做了硬链接,文件名可以随便改,只有inode号可以判断他们是否是同一个文件
软链接:会有箭头表明它的源文件
把它们做为硬链接。
只要一个方法,看他们的inode号。这是需要人为肉眼,要想让程序要判断。
判断是否为空,是yes否no
eq来判断是判断数值,==适用于字符
如果分区超过了80%,那么就警告
把这个数值提出来
grep提取行
awk提取列
截取字符串,以百分号作为分隔符
备份就是从原始位置赋值一份到别的位置
如果这个目录存在
把当前的日期输出到一个临时文件中,覆盖。将文件大小追加到临时文件中
进入这个备份的位置,将刚刚那个临时文件进行压缩
如果目录不存在,手动创建这个目录,然后一样
每隔15分钟执行一次,如果服务器down了,就会主动告诉你并且帮你重启服务器
如何判断一个服务是运行的
用ps命令查看现在的进程
提取有没有apacher的进程
我们现在把apche装上
装完启动一下
启动完查,证明运行了
有些情况下虽然有进程但是死机了,用ps判断不一定准,别的方法
还有一种方法是判断端口,只要看到80端口,就说明apache启动了,但是也不准
最有效的方法是通过nmap命令,远程扫描命令,如果它能连接上apche则会返回状态
我们来安装nmap
-sT扫描指定服务器上开启的TCP端口
现在要做的是,截取这个命令的输出
排除干扰项
只提取包含TCP的行
然后再提取包含服务器的行
截取第二段
然后把这个执行的结果赋给变量,写语句
如果关着,把输出结果丢到垃圾箱,然后重启
现在启动了,所以现在正确的访问日志有了
停掉apche
接下来的任务就是定时让它运行
-e是文件为真,!取反
多分支判断语句
case:只能有一种判断关系
打印选择列表的情况
*不用打双引号!去掉
这个变量是否是这个值还是那个值
把所有的包放在了lamp目录中,把所有后缀名为压缩包的都放到ls.log这个文件中
循环执行,解压,把执行结果信息输出到垃圾站中
这种for循环的好处:不需要事先执行循环的个数
用双小括号括起来才允许进行加减乘除运算
事先知道要添加多少个用户,用到第二种循环
用户名、个数、初始密码
先要判断输入的名字、个数、初始命令不为空,才能往下执行
还要判断输入的num是数字,sed是正则表达式,包含匹配。如果是数字替换为空,如果y为空,则证明为数字
循环num次,添加用户st1 st2 …
结果:
脚本没有执行
少加了个100
不成立则执行循环,直到
在执行的同时进行编译,但是效率 要慢
怎么建立编程思想:多练