【shell基础知识】部分的 1 - 5 小节课程。
1 Shell是什么
linux操作系统:Bourne Again shell(bash); 编写脚本的时候我们通常会在第一行指定当前脚本所用的解释权,我们写脚本的时候一般都是调用bash,所以第一行我们要写上这么一行:"#!/bin/bash",要注意的是这可不是注释行哟~而是告诉内核我们用的是哪种解释器,下面的所有行,如果在出现类似的内核都会认为是注释行。
2 命令历史
[root@master ~]# history
最大可以存储1000条命令
[root@master ~]# echo $HISTSIZE 1000
清空内存上的记录
注意:.bash_history 不会删除
[root@master ~]# history -c [root@master ~]# history 1 history
修改默认参数
[root@master ~]# vim /etc/profile HISTSIZE=1500 [root@master ~]# source /etc/profile #或者退出 重新登录中断
history 添加命令执行时间
vim /etc/profile HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " [root@master ~]# source /etc/profile
%Y/%m/%d %H%:%M:%S
%Y 年份(以四位数来表示)
%m 月份(以01-12来表示)
%d 日期(以01-31来表示)
%H 小时(以00-23来表示)。
%M 分钟(以00-59来表示)
%S 秒(以本地的惯用法来表示)
历史命令永久保存
[root@master ~]# chattr +a ~/.bash_history
chatter: 锁定文件,不能删除,不能更改
+a: 只能给文件添加内容,但是删除不了,
chattr +a /etc/passwd
-d: 不可删除
加锁:chattr +i /etc/passwd 文件不能删除,不能更改,不能移动
查看加锁: lsattr /etc/passwd 文件加了一个参数 i 表示锁定
解锁:chattr -i /home/omd/h.txt - 表示解除
隐藏chattr命令:
注意:终端非正常退出 保存的记录不全
[root@master ~]# !! #表示最后一跳命令 [root@master ~]# !100 #执行第N条命令 比如执行第100命令 [root@master ~]# !dig #执行最后条(从大数到小数) dig命令
3 命令补全和别名
centos 7 下可自动补全 参数
[root@master ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.4.1708 (Core) Release: 7.4.1708 Codename: Core [root@master ~]# yum install -y bash-completion #安装后需要重启机子
Linux alias命令用于设置指令的别名。
用户可利用alias,自定指令的别名。若仅输入alias,则可列出目前所有的别名设置。alias的效力仅及于该次登入的操作。若要每次登入是即自动设好别名,可在.profile或.cshrc中设定指令的别名。
[root@master ~]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
alias[别名]=[指令名称]
[root@master ~]# alias lx=ls
[root@master ~]# lx

[root@master ~]# unalias lx
#删除自定义别名
4 通配符
“*”
代表任意多个字符
“?”
代表任意单个字符
“[]”
代表“[”和“]”之间的某一个字符,比如[0-9]可以代表0-9之间的任意一个数字,[a-zA-Z]可以代表a-z和A-Z之间的任意一个字母,字母区分大小写
“^”
表示匹配结果取反的意思,注意这个通配符必须要在[]中使用
“{}”
表示符合括号内包含的多个文件
“.”这个符合比较特殊,如果匹配的条件加上了该符合那么说明查询结果文件就包含带“.”的文件
删除1-9以.txt结尾的文件
格式
command [OPTION]{>,>>} [File]
* 匹配文件名中的任何字符串,包括空字符串。
? 匹配文件名中的任何单个字符。
[...] 匹配[ ]中所包含的任何字符。
[!...] 匹配[ ]中非感叹号!之后的字符。和^的效果一样
重定向符号 > 输出重定向到一个文件或设备 覆盖原来的文件 >! 输出重定向到一个文件或设备 强制覆盖原来的文件 >> 输出重定向到一个文件或设备 追加原来的文件 < 输入重定向到一个程序
标准错误重定向符号 2> 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 b-shell 2>> 将一个标准错误输出重定向到一个文件或设备 追加到原来的文件 2>&1 将一个标准错误输出重定向到标准输出 注释:1 可能就是代表 标准输出 >& 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 c-shell |& 将一个标准错误 管道 输送 到另一个命令作为输入
在 bash 命令执行的过程中,主要有三种输出入的状况,分别是: 1. 标准输入;代码为 0 ;或称为 stdin ;使用的方式为 < 2. 标准输出:代码为 1 ;或称为 stdout;使用的方式为 1> 3. 错误输出:代码为 2 ;或称为 stderr;使用的方式为 2>
[root@master ~]# ls -al > list.txt
将显示的结果输出到 list.txt 文件中,若该文件以存在则予以取代!
[root@master ~]# ls -al >> list.txt
将显示的结果累加到 list.txt 文件中,该文件为累加的,旧数据保留!
[root@master ~]# ls -al 1> list.txt 2> list.err
将显示的数据,正确的输出到 list.txt 错误的数据输出到 list.err
[root@master ~]# ls *.log aaa.txt &> list.txt
将显示的数据,正确的和错误的数据都输出到list.txt
[root@master ~]# ls -al 1> list.txt 2> /dev/null
将显示的数据,正确的输出到 list.txt 错误的数据则予以丢弃! /dev/null ,可以说成是黑洞装置。为空,即不保存。
command {<} [File] {<<} [Word]
[root@master ~]# wc -l < newfile
将newfile 的数据,输入到 wc -l