Linux---shell基础知识
作者:互联网
shell :使用shell来实现Linux的批量管理,而不是开发应用程序
shell 可以关联更好的第三方库
1、bash的基本特性:
ctrl+l
上键
history
2、IO重定向与管道符
(1)IO重定向:改变默认位置
1、>标准的输出重定向:
ls > /dev/pts/5 命令ls重定向输出至窗口5
ls > /data/ls.out 命令ls重定向输出至/data/ls.out文件中
注意:假如ls.out文件中本来就有内容,那么重定向输出后会覆盖文件中原有的内容
2、>>:追加重定向,新内容会追加至目标文件尾部
ls >> /data/ls.out
3、():合并多个程序的标准输出
(cal 2007;cal 2008) > all.txt
4、2>标准错误的输出重定向:
cmd 2> /data/err.log cmd(本身无cmd这个命令,所以输入此命令会显示错误的结果)的错误结果重新定向显示至 data/err.log 中
注意:history 2> /data/err.log 由于本身history命令是正确的,所以默认的输出设备会正常显示history命令的内容,且不会输出至/data/err.log中。原data/err.log中的文件会被空文件覆盖。
cmd 2>> /data/err.log 这样就会将正确的信息显示在默认的输出设备上,而且每次的错误信息输入至err.log文件中,方便后面研究问题
5、 < 标准输入重定向
cat < file file文件内容输入到cat命令上
(2)管道符
管道(使用符号“|”表示)用来连接命令
命令1 | 命令2 | 命令3 | …
- 将命令1的标准输出发送给命令2的STDIN,命令2的标准输出发送到命令3的STDIN
- STDERR默认不能通过管道转发,可利用2>&1 或|& 实现
ls /data /err 2>&1 | tr 'a-z' 'A-Z' ls /data /err |& tr 'a-z' 'A-Z'
3、编程基础
编程原理
程序:执行某个功能的一段代码
程序包含 = 指令(命令) + 数据(变量) + (逻辑关系)
4、grep和正则表达式:
Linux三剑客:grep、sed、awk
patten“模式“
5、语句的逻辑关系
分支:
if
case:*利用case实现编写Linux的启动脚本*
循环:
for:放入for循环的列表
while:满足判断条件为True时做循环---不要进入死循环
until:满足判断条件为False时做循环----/
break:跳出循环
continue:打断本次循环,继续下次循环
exit :退出当前程序,指定程序的返回值
read : 输入
echo:输出
Linux三剑客:
sed:流编辑器
两种模式的切换
awk:
主要做 报告生成器、是一个独立的编程语言
grep:过滤
函数:
一段固定功能的代码块
数组:
字符串:
字符串处理
练习
1、判断/etc/inittab文件是否大于100行,如果大于,则显示“/etc/inittab/ is a big file.”否则显示“/etc/inittab is amall file.”
#!/bin/bash
#
Line = `wc -l /etc/inittab | cut -d’ ‘ -f1
if [ $Line -gt 100];then
echo “/etc/inittab/ is a big file.”
else
echo“/etc/inittab/ is a smal file.”
fi
1、bash的基本特性:
a) 命令展开:
date命令—— 基于date命令创建命令
date:查看系统时钟
查看硬件时钟: clock 、hwclock 常常同步系统时钟与硬件时钟
cal 查看日历
date +%F :改变date输出的格式为 2019-08-05
date +%F-%H-%M-%S 输出为:2019-08-05-14-29-15 =年-月-日-时-分-秒
%F = CCYY-mm-dd
%H = hh
%M = MM
%S = ss
%T = hh:MM:ss
%D = mm/dd/YY
练习:通过for语句循环创建一个月的日志文件(2019-08-06.http.log)
# 或者touch `date +%F`.http.log
for i in {1..30};do
touch `date +%Y-%m-$i`.http.log;done
Linux的目录需要遵循的规则:FHS目录规则
{ } :扩展 例如 cp /etc/inittab /etc/inittab.bak == cp /etc/{etc/inittab,/etc/inittab.bak}
tar:归档工具—可以对目录进行操作
压缩工具:gzip、bzip2、xz 压缩只能对文件进行操作,不能对目录操作
zcat 查看压缩文件且不解压
tar的常见参数:
-j 对应压缩工具bzip2
-J 对应压缩工具 xz
-z 对应压缩工具 gzip
-c 压缩
-x 解压 可以不用指定解压的工具
-f 指定文件名
-v 显示详细信息
-C 指定解压的目录
-t 不解压查看内容,与zcat相同
例子:tar cjvf 2018-08.http.log.bz2 2018-08*.http.log 压缩
tar xvf 2018-08.http.log.bz2 -C /abc/ 解压
练习:编写脚本,每天02:20备份/etc目录中的所有文件,名称为当天日期;且保存文件为压缩文件;
crontab ---- 020 2 * * * bash /root/xxx.sh
vim xxx.sh
#!/bin/bash
#
tar cJvf /var/`date +%F`.xz /etc
b) 命令历史:
作用:查看之间使用的命令
关于命令历史的文件:.bash_history — 在root里,专门存放命令历史,在关机的时候会自动写入一次(可以利用history -a的命令将内存中的命令存入.bash_history中)
关于命令历史的变量(环境变量):PATH是环境变量的一种
---环境变量如何查看:env
---查看更详细的环境变量:set
history的常见操作:
1、感叹号+编号(!n):查看命令历史
2、感叹号+字符串(!String):匹配最近一次的字符串
3、感叹号+感叹号(!!):上一条命令
4、感叹号+$(!$):上一条命令的最后一个参数 快捷键ESC+.的功能相同
常见选项:
-a:添加
-d:删除
-c:清空
#:显示最近#行的命令
c) 命令补全:tab键 在开发环境中 \t 代表四个空格
- 提示
- 自动补全
d) 目录补全:tab键
- 提示
- 自动补全
e) 命令的执行状态
在Linux中,每一条命令的执行后都会有两个结果:
命令本身放回的内容
其次,命令执行的结果状态
$? 变量,就是用来存放命令执行状态的变量
0 表示成功状态(和python相反)
1~255 表示失败状态
f) 命令的快捷键
ctrl + l 清屏
ctrl +c 结束进程
ctrl +u 删除光标前的字符
ctrl +k 删除光标后的字符
ctrl +a 光标跳到头
ctrl +e 光标跳到尾
ctrl +w 以空格为分隔符去删除文件
ctrl +r 搜索最近一次进入交互界面使用的命令(要输入字符串)
g) alias别名
系统启动是读取一些特殊文件的顺序
alias cdnet=”cd /etc/sysconfig/network-scripts/” 只能在当前shell执行
全局配置文件
/etc/profile 定义环境变量(所有用户)最先读取这个文件
/etc/bashrc 定义本地变量,一般用来设置本地变量(所有用户)
个人配置文件(在用户的家目录下写入的)
~/.bash_profile 定义环境变量(指定用户)
~/.bashrc 定义本地变量---alias(指定用户)
sources /etc/profile 或者 . /etc/profile 使文件生效
h) 文件通配符 globbing
文件通配符不是正则表达式
?任意单个字符
* 任意长度的任意字符
[ ] 指定范围内的任意一个字符
^ [^ ]指定范围以外的任意一个字符 [^0-9A-Za-z]
指定字符类: 调用的时候在加一个 [ ]
[:alnum:] 字母+数字
[:alpha:] 字母
[:upper:] 大写字母
[:lower:] 小写字母
[:digit:] 数字
[:punct:] 表示特殊字符
[:space:] 空格 ^[[:space:]]*$ 有空格键的空行
标签:shell,log,etc,inittab,基础知识,命令,ls,Linux,data 来源: https://www.cnblogs.com/gxnihao/p/11310739.html