深入shell
1、通配符
通配符含义===>匹配文件名
符号 | 作用 |
---|---|
* | 匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个) ls file * |
? | 匹配任何一个字符(不在括号内时)?代表任意1个字符 ls file 0 |
[abcd] | 匹配abcd中任何一个字符 |
[a-z] | 表示范围a到z,表示范围的意思 []匹配中括号中任意一个字符 ls file 0 |
{…} | 表示生成序列. 以逗号分隔,且不能有空格 |
[!abcd] | 或[^abcd]表示非,表示不匹配括号里面的任何一个字符 |
[root@localhost ~]# cd /etc #切换目录
[root@localhost etc]# ls *.png #列出所有PNG图片
favicon.png
[root@localhost etc]# ls a? #列出首字母是a,文件名只有两个字符的所有文件
ls: 无法访问a?: 没有那个文件或目录
[root@localhost etc]# ls [abc]* #列出首字母是a、b或c的所有文件
adjtime autofs.conf brltty.conf crontab
aliases autofs_ldap_auth.conf cgconfig.conf crypttab
aliases.db auto.master cgrules.conf csh.cshrc
anacrontab auto.misc cgsnapshot_blacklist.conf csh.login
ant.conf auto.net chrony.conf
asound.conf auto.smb chrony.keys
at.deny bashrc cron.deny
preferreddrivers.xml
[root@localhost etc]# ls [!abc]* #列出首字母不是a、b或c的所有文件
DIR_COLORS krb5.conf pcp.sh
DIR_COLORS.256color ksmtuned.conf pinforc
DIR_COLORS.lightbgcolor ksysguarddrc pnm2ppa.conf
dleyna-server-service.conf ld.so.cache printcap
2、重定向
输出重定向
[root@localhost etc]# cat > f1 #创建f1文件,输入内容,按【Ctrl+D】退出
This is my file named f1.
[root@localhost etc]# cat > f2 #创建f2文件
This is my file named f2.
[root@localhost etc]# cat f1 f2>f #将f1、f2合并并生成f
[root@localhost etc]# cat f #查看f文件内容
This is my file named f1.
This is my file named f2.
[root@localhost etc]# cat >>f1 #向f1文件添加内容
append to f1
[root@localhost etc]# cat f1 #查看f1文件内容
This is my file named f1.
append to f1
错误输出重定向
[root@localhost etc]# ls /temp 2>err
[root@localhost etc]# cat err
ls: 无法访问/temp: 没有那个文件或目录
[root@localhost etc]# cat <f1 #用输入重定向的方式查看f1的文件内容
This is my file named f1.
append to f1
3、管道
[root@localhost etc]# ls |wc -l #统计当前目录中文件和子目录的数目
318
4、历史记录
[root@localhost etc]# history 5 #查看最近执行过的5个shell命令
120 ls /temp 2>err
121 cat err
122 cat <f1
123 ls |wc -l
124 history 5
[root@localhost etc]# !123 #执行序号为123的shell命令
ls |wc -l
318
[root@localhost etc]# !! #执行刚刚执行过的命令
ls |wc -l
318
5、别名
[root@localhost etc]# 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'
[root@localhost etc]# alias ctab='cat /etc/initab' #设置别名命令ctab
[root@localhost etc]# unalias ctab=‘cat /etc/initab’ #删除已创建的别名命令
-bash: unalias: ctab=cat /etc/initab: 未找到
6、自动补全
[root@localhost etc]# ls #查看当前目录中的文件和子目录
favicon.png nsswitch.conf.bak terminfo
fcoe ntp tmpfiles.d
festival ntp.conf tomcat
filesystems numad.conf Trolltech.conf
firewalld oddjob trusted-key.key
fonts oddjobd.conf tuned
fprintd.conf oddjobd.conf.d udev
[root@localhost etc]# cat fs #不需要输入完整的命令cat fstab,只需输入cat fs,然后按下【tab】即可
[root@localhost etc]# cap #输入命令后,连续按两次【Tab】键,屏幕显示所有以cap开头的shell命令
capsh captoinfo
[root@localhost etc]# capsh #用户补齐命令的剩余部分即可执行相关命令
[root@localhost ~]# cat /etc/
cat: /etc/: 是一个目录
[root@localhost ~]# cat /etc/pr
prelink.conf.d/ profile protocols
printcap profile.d/
[root@localhost ~]# cat /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
文本编辑器vi
Vi工作模式
启动vi
[root@localhost etc]# vi num #vi 文件名
[root@localhost etc]#vi #不输入文件名会在保存退出时必须指定文件名
编辑文件(此步在vi文件中操作)
输入文本
直接按键盘上的字母(区分大小写)
字符 | 作用 |
---|---|
i | 从当前的光标位置开始输入字符 |
I | 光标移动到当前的行首,开始输入字符 |
a | 从当前的光标的下一个位置,开始输入字符 |
A | 光标移动到当前的光标的行尾,开始输入字符 |
查找字符
字符 | 作用 |
---|---|
/字符 | 从行首开始搜索这个字符 |
?字符 | 从行尾开始搜索这个字符 |
n | 继续查找满足条件的字符串 |
撤销与重复(命令模式下)
字符 | 作用 |
---|---|
u | 撤销上一步操作 |
. | 重复上一步操作 |
文本块操作
字符 | 作用 |
---|---|
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:n1,n2 co n3 | 将从n1到n2之间的所以文本复制到n3行之下 |
:n1,n2 m n3 | 将从n1到n2之间的所以文本移动到n3行之下 |
:n1,n2 d | 删除从n1到n2之间的所以文本 |
:n1,n2 s/字符串1/字符串2/g | 将n1行到n2行之间的所有字符串1用字符串2代替 |
保存与退出(此步在vi文件中操作)
字符 | 作用 |
---|---|
:w[文件名] | 保存为指定文件 |
:w | 直接保存退出 |
:q | 退出vi,如有改动会提示请保存退出 |
:q! | 不保存,强制退出vi |
:wq | 保存并退出 |
:x | 保存并退出 |