shell基础

来源:互联网 发布:微商怎么利用淘宝引流 编辑:程序博客网 时间:2024/06/05 19:51

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.txt123123

管道符
管道符的作用是把前一个指令的输出作为后一个指令的输入,如下:
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 $zhangsandongnihao

当前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  //对结果用:分隔,显示分隔后的第一个区块,只显示头三行rootbindaemon[root@centos-01 ~]# cat /etc/passwd|cut -c 1|head -3 //截取第一个字符rbd[root@centos-01 ~]# cat /etc/passwd|cut -c 1-4|head -3  //截取第1-4个字符rootbin:daem[root@centos-01 ~]# cat /etc/passwd|cut -c 1,4|head -3  //截取第1,4个字符rtb: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/nologinbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinroot: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/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp: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  //并没有去重111222111333[root@centos-01 ~]# sort 1.txt|uniq  //先排序,然后去重成功111222333[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/BASHBIN: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]# ls123aa  123ab  123ac  passwd[root@centos-01 test]# split -l 10 passwd 123  //按行数分割[root@centos-01 test]# ls123aa  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