8.1-8.13 命令补全和别名,通配符管道符,shell变量,环境变量,cut,sort,uniq,tee
shell是用户和计算机硬件之间交互的工具,在shell和硬件之间,还有一个中间介质是系统内核。Centos的默认shell工具是bash。bash有一个特点,可以保存执行过的历史命令。
历史命令
!!连续两个!表示执行上一条命令
!n表示执行命令历史里的第n个命令,如!1000指的是执行命令历史中第1000条命令
!字符串, 表示执行最近一次以此字符串开头的命令。如!pw表示执行最近一次pwd命令
命令和文件名补全
输入目录路径时,单击tab键可以补全路径,双击tab键可以列出当前路径下的所以文件和目录名。
同时命令也可以自动补全,但是需要yum安装bash-completion。
别名
bash中可以给命令自定义别名,使用方式为:
alias la='ls -a --color=auto'
但是这种别名在系统重启后就会消失,解决的办法是把自定义别名的命令添加到~/.bashrc文件,然后执行命令source ~/.bashrc,就能生效。
解除别名的方式是:
unalias la
或者在~/.bashrc文件中删除相应的alias语句,并重新source ~/.bashrc。
通配符* ?
在bash里可以用*来匹配零个或多个字符,用?匹配一个字符。
输入输出重定向
重定向的含义是改变输入或者输出的值的显示位置,例如一般输出显示在屏幕上,但是我们可以通过重定向符把输出保存在一个文件中,而不是显示在屏幕上。
<表示输入重定向
>表示输出重定向,或者表示覆盖
>>表示追加重定向,只是追加不会覆盖以前的内容
2>错误重定向
#touch 1.txt
#echo "123" >1.txt //添加123到1.txt文件中
#echo "123" >>1.txt //追加123到1.txt文件中
#cat 1.txt
123
123
管道符
管道符的作用是把前一个指令的输出作为后一个指令的输入,如下:
cat /etc/passwd | wc -l
作业控制
当运行进程时,可以用ctrl+z暂停,fg命令恢复,bg命令在后台运行,ctrl+c取消。
jobs可以查看被暂停或者在后台运行的任务,如果想把暂停的任务放在后台运行,就试用bg命令。当有多个暂停任务或者后台运行任务时,他们会被编号,使用fg和bg时加上编号就行。
每个进程都有pid,使用ps aux可以查看进程的pid,使用kill加pid号可以关掉这个进程,如果失败则可以用kill -9 pid
即可。
命令env
env可以列出系统预设的全部系统变量。
HOSTNAME 主机名
SHELL 当前用户的shell类型
HISTSIZE 最大历史记录条数
MAIL 当前用户的邮件存储目录
PATH 决定了shell将到哪些路径寻找命令或者程序
PWD 当前目录
LANG 系统语言,多语言环境可以修改此变量
HOME 当前用户的家目录
LOGNAME 当前用户登录名
env命令显示的只是环境变量,set命令可以把系统预设的变量都一起显示出来。
set命令
一般在命令行中直接定义的系统变量只能给定义的用户使用,如果想让所有的用户都能使用那个自定义变量,可以使用如下操作:
在/etc/profile文件的最后一行加上export myname=Aming
然后运行 source /etc/profile
此时切换到其他帐号,myname变量依然生效。
如果只想让当前用户使用自定义变量,可以使用如下操作:
在用户家目录下.bashrc文件的末尾添加一行export myname=Aming
然后运行 source ~/.bashrc即可在不重启不注销的情况下让新设置生效
自定义变量的规则
自定义变量时,如果变量内容没有空格,则不需要加任何符号
如果变量内容有空格,则需要加单引号myname='li xiangdong'
如果变量内容里已经有单引号,那就需要加上双引号myname="aming's"
如果变量内容需要引用其他命令,则需要使用反引号
myname=`pwd`
变量的内容可以累加其他变量但是需要加双引号
# myname=dong
# zhangsan="$myname"nihao
# echo $zhangsan
dongnihao
当前bash中的子孙bash
在当前bash中可以输入bash命令进入一个新的bash,再输入bash可以再进入一个新的bash,输入exit可以退回到上一级bash。
命令yum install psmisc
可以让我们使用pstree命令,用来查看系统进程的树形结构。
我们会看到这种关系:
├─sshd───sshd───bash───bash───bash───pstree
在当前bash中定义的变量无法在他的子孙变量中生效,如果想在他的子孙变量中生效,则需要在当前变量中export 变量名。
系统环境变量与个人环境变量的配置文件
系统和个人的环境变量配置主要在以下几个文件中:
/etc/profile
/etc/bashrc
.bash_profile
.bashrc
.bash_profile
.bashrc
.bash_history
.bash_logout
特殊符号
- 代表零个或多个字符
?只代表一个任意字符
# 注释符号,其后面的内容都会被忽视
| 管道符号,前面命令的输出将会作为他的输入
cut
cut用来截取字符,可选项有:
-d 后面跟分隔字符,用单引号括起来
-c 后面跟第一个字符(可以用单个数字,也可以是1-5区间,也可以是多个数字用逗号隔开)
-f 后面跟第几个区块
[root@centos-01 ~]# cat /etc/passwd|cut -d ':' -f 1|head -3 //对结果用:分隔,显示分隔后的第一个区块,只显示头三行
root
bin
daemon
[root@centos-01 ~]# cat /etc/passwd|cut -c 1|head -3 //截取第一个字符
r
b
d
[root@centos-01 ~]# cat /etc/passwd|cut -c 1-4|head -3 //截取第1-4个字符
root
bin:
daem
[root@centos-01 ~]# cat /etc/passwd|cut -c 1,4|head -3 //截取第1,4个字符
rt
b:
dm
命令sort
sort命令用于排序,可选参数有:
-t 后面跟分隔字符,作用和cut的-d选项一样
-n 表示使用纯数字排序
-r 表示反向排序
-u 表示去重排序
-kn1,n2 表示由区间n1排序到区间n2,可以只写-kn1,即对n1字段排序
[root@centos-01 ~]# head -5 /etc/passwd | sort //如果sort后不跟任何选项,则是按首字母的ASCII码值进行比较,按升序排序
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@centos-01 ~]# head -5 /etc/passwd | sort -t : -k3 //用冒号分区,第3个分区排序
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
命令wc
wc用于统计文档的行数,词数和字符数。选项分别是-l,-w,-m。如果不加选项,则按l,w,m依次显示。
[root@centos-01 ~]# wc /etc/passwd
24 44 1131 /etc/passwd
uniq
uniq命令用来删除重复的行,选项-c可以用于统计重复的次数。但是使用uniq之前需要先对文件内容进行排序,否则没有作用。
uniq命令并不能修改源文件。改变只是体现在输出结果上。
[root@centos-01 ~]# vim 1.txt //创建1.txt
[root@centos-01 ~]# uniq 1.txt //并没有去重
111
222
111
333
[root@centos-01 ~]# sort 1.txt|uniq //先排序,然后去重成功
111
222
333
[root@centos-01 ~]# sort 1.txt|uniq -c //去重并统计重复次数
2 111
1 222
1 333
命令tee
tee后面跟文件名,tee的作用和重定向>的作用一样,但是他在重定向的同时也会把内容显示在屏幕上。
命令tr
tr常常用来把小写字母替换成大写字母。
[root@centos-01 ~]# head -2 /etc/passwd | tr '[a-z]' '[A-Z]'
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
tr命令也可以用于替换单个的字符。
split
split命令用与切割文档,选项有-b和-l。
-b 表示依据大小来切割文档,单位为byte
-l 表示按照行数切割文档
[root@centos-01 test]# split -b 500 passwd //不指定生成的文件名时,默认按xaa xab这样命名
[root@centos-01 test]# la
. .. passwd xaa xab xac
[root@centos-01 test]# split -b 500 passwd 123 //指定文件名时则按指定文件名命名
[root@centos-01 test]# ls
123aa 123ab 123ac passwd
[root@centos-01 test]# split -l 10 passwd 123 //按行数分割
[root@centos-01 test]# ls
123aa 123ab 123ac passwd
[root@centos-01 test]# wc -l * //查看所有文件的行数
10 123aa
10 123ab
4 123ac
24 passwd
48 总用量
特殊符号
!$表示上一条命令中的最后一个变量
!!表示执行最近一条命令
如果想在一行内执行多个命令,用;隔开即可
~表示用户的家目录
如果想把一条命令放在后台执行,可以在命令的末尾加上&,jobs命令可以查看后台的命令
[ ]中括号表示括号内的任一字符
&&和||分别表示且与非
command1&&command2 当command1执行成功后则执行command2,如果command1执行不成功则不执行command2
command1||command2 当command1执行成功后则不执行command2,command1执行不成功则执行command2