history保存历史命令1000条,history -c清空;
2. !string调用最近使用的命令,!vim最近使用的vim;
!vi:命令历史中最近一次以vi开头的命令;
!n:!242调用history中第242条命令。
!!执行上一条命令
!$上一条命令的最后一个变量
####ls /some-path-to-a-directory
cat !$/some-file.txt = cat /some-path-to-a-directory/some-file.txt
####ls testb.txt
cat !$
3.alias重命名,alias h5='head -5',unalias h5取消重命名。
4.|管道符,连接多个命令,将一个命令的输出重定向到另一个命令,简单说就是将前面运行的结果丢给后面的命令。ps aux|grep mysql,或者ifconfig eth0|grep 'inet addr'过滤包含IP地址的数据包,echo "pass" | passwd --stdin tom将用户tom密码设置为pass
5.输入输出重定向,>覆盖,>>追加,2>错误重定向,2>>错误追加。
ls > list.txt将ls输出保存到list.txt,
hostname >> list.txt将主机名追加到list.txt中,
ls abc install.log 2> error.txt仅将错误输出重定向到error.txt中,
ls bbb 2>> error.txt 将错误追加到指定文档中,
ls abc install.log>>all.txt 2>&1 将标准输出1和错误输出2均追加到all.txt
6.作业控制
快捷键ctrl+a将光标移至行首,ctrl+e移至行为,ctrl+f右移一个,ctrl+b左移一个,ctrl+l清屏,ctrl+u删除光标到行首的字符,ctrl+k删除光标到行尾字符,ctrl+c终止进程,ctrl+z挂起进程,tops可以查看,ctrl+w删除光标前一个单词(以空格为分隔),ctrl+d删除后一个单词
ctrl+z暂停任务,bg使暂停任务在后台运行,fg调到前台运行
vmstat1>1.txt vmstat 1 >/home/jason/vmstat1.log & 使该进程在后台运行&
ctrl+z == bg pid
jobs
fg pid/bg pid
命令序列使用:&开启子shell,使在后台运行,firefox &将前端打开的程序后台执行,tops查看,fg 1调回前台执行;
&使前台程序,挂起到后台,ctrl+z使程序暂停并挂起到后台。fg 1调回前台。
杀死进程kill
ps aux |grep vmstat 查看进程号
kill pid / kill -9 pid(遇到杀不死的进程)
7. &&多个命令组合执行,但必须前面成功执行再下一个命令,make && make install,ls test.txt && cat test.txt;
||多个命令组合,但必须前一个命令执行不成功,才执行下一个,id tom &>/dev/null &&echo "hi, tom" || echo "no such user",通过&>重定向将id输出屏蔽,然后&&和||判断显示语。
8. 变量
环境变量PATH,shell预设的一个变量,代替了所有常用命令的绝对路径的设定,运行某个命令时不需输入全局路径
echo $PATH/$HOME/$PWD/$LOGNAME.....显示变量的值
echo $PATH决定shell在哪些目录下寻找命令或程序; echo $HOME当前用户的家目录;echo $HISTSIZE历史命令记录的条数;echo $LOGNAME当前用户的登录名; echo $HOSTNAME显示主机名;echo $SHELL显示shell的类型;
env查看系统预设的环境变量,登录的用户不一样查询到的环境变量值也不一样
set查看所有预设环境变量,包括系统预设变量和自定义变量
myname=aming
echo $myname
set |grep myname
自定义变量只能在当前shell下生效,重开一个shell则不存在,重开一个子shell和切换用户后
echo "export myname=zhujiasheng" >>/etc/profile 追加,export申明变量
source !$ 运行生效
echo $myname
zhujiasheng
su - jason
echo $myname
zhujiasheng(切换用户后任然可以运行该自定义变量)
export申明变量
export myname申明变量myname,使子shell也能使用该变量,但切换到其他用户不能使用
export myname(不加变量名,申明所有自定义变量)
自定义变量规则:
1.格式a=b,a为变量名,b变量内容;
2.变量名只能由英文,数字和下划线组成,不能以数字开头;
3.变量内容有特殊符号(如空格),追加单引号
myname='zhu jiasheng'
4.变量内容本身带有单引号,改双引号
myname="zhu jia'sheng"
5.变量内容需要用到其他命令的结果,反引号
myname=`pwd`
6.变量内容累加其他变量内容,双引号
myname="$LOGNAME"zhujiasheng
单引号和双引号的区别:双引号,不去掉特殊字符的本身作用
单引号,使特殊符号失去本身意义。
pstree把系统所有进程通过树形结构显示,
# bash 打开子shell
# pstree |grep bash查看打开的子shell
取消变量
unset myname
9.系统给环境变量和个人环境变量配置文件
/etc/profile存放PATH ,USER,LOGNAME,HOSTNAME等常用变量
/etc/bashrc,预设umask和PS1
echo $PS1显示命令行最前面的字符串[root@localhost ~]#
10.shell中特殊符号
*零个或多个任意字符;?只代表一个字符,只能匹配一个;#注释说明;
\脱意字符,ls -d test\*
ls: 无法访问test*: 没有那个文件或目录
|管道符,将前面命令的结果丢给后面的命令。一般作用在文档操作,例如cat,less,head,tail,cut,sort,wc,uniq,tee,split,sed,awk,grep正则表达式必须掌握工具
cat testb.txt |wc -l用来计算文档有多少行
11.命令 cut
截取某一字段
cut -d '分隔符'
cut -c n 第几个字符
cut -f n 第几个区块
head -n2 /etc/passwd |cut -d ';' -f1
head -n2 /etc/passwd|cut -c1,5,7截取文件头两行的第1,5,7个字符
12.排序 sort
-t分隔符;-n使用纯数字排序;-r反向排序;-u去重复;kn1,n2从n1-n2区间进行排序。
head -n5 /etc/passwd |sort 不加选项,则以首字符排序
head -n5 /etc/passwd |sort -t : -k3 -n以:为分隔符,第3个字段,以纯数字排序
head -n5 /etc/passwd |sort -t : -k3,5 -r 以:为分隔符,从第3-5字段,反向排序
13.统计 wc
-l统计行数;-m 统计字符数;-w统计词数。
wc /etc/passwd 不加选项,则三个统计值都会显示
wc -l/-m/-w /etc/passwd
14. 统计重复行数 uniq
-c 统计重复行数,并重复的行数写在最前面
使用uniq前提对文件排序
vim uniqtest.txt
111
222
111
333
sort uniqtest.txt |uniq -c
15.tee 类似重定向,把文件重定向到指定文件的同时,显示被写入的文件
echo "aaaaaaaaaa" |tee teetest.txt
tr 替换字符,只针对字符,不能字符串
head -n2 /etc/passwd |tr 'r' 'R'
head -n2 /etc/passwd |tr '[a-z]' '[A-Z]'
16.文档切割 split
-b 依据大小切割文档,单位byte
-l 依据行数切割文档
cp /etc/passwd ./
split -b500 passwd 以大小500b切割文档,并且默认规则命名xaa,xab,xac....
split -l10 passwd splittest 以10行大小切割文档,并规定切割后文档命名规则splittestaa,splittestab...