shell基础知识
1.shell简介
- shell是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。在shell和计算机硬件还有一层东西那就是–系统内核,系统内核在系统中就像大脑至于人类一样的作用,shell则更像是人类的五官。
- 用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作
- centOS默认安装的shell版本是bash
-
记录命令历史:
- 我们执行过的命令Linux都会记录,预设是1000条历史命令,这些命令保存在用户家目录的.bash_history文件中
- !符号是与命令历史有关的一个特殊字符。
- !!:连续两个!表示执行上一条指令
- !n:这里的n是数字,表示执行命令历史中的第n条指令
- ![字符串]:表示执行以字符串内容开头的命令
-
别名:
-
alias是bash所特有的功能之一。
可以通过alias将一个常用并且很长的指令去另外一个比较简单的指令
若不想用了,可以通过unalias命令解除别名功能
- 命令格式:alias [命令别名] = [‘具体的命令’](注意有引号)
-
-
通配符
- 在bash下,可以使用*来匹配零个或多个字符,用?匹配一个字符
-
输入/输出重定向
- 输入重定向用于改变命令的输入,输出重定向用于改变命令的输出
- 输入重定向的命令是 < ,输出重定向的命令是 > ,追加重定向的命令是 >>
- 例子:echo“123” > 1.txt
-
管道符
- 管道符 | ,它用于将前一个指令的输出作为后一个指令的输入。
- 例:cat /etc/passwd|wc -l
-
作业控制
- 当运行进程时,你可以使它暂停(ctrl+z),然后使用fg命令恢复,或是利用bg命令使它到后台运行,或者是按(ctrl+c)来使它终止
- 在进行作业控制时,可以通过命令jobs来查看被暂停的或者是在后台运行的任务
-
变量
-
环境变量PATH是shell预设的一个值。通常shell预设的变量都是大写的
PATH代替了所有常用命令的绝对路径的设定。
- 定义:变量就是使用 一个较简单的字符串来代替某些具有特殊意义的设定以及数据。
-
-
命令env
- 使用命令env可列出系统预设的全部系统变量
- 常见的环境变量:
- HOSTNAME:表示主机的名称
- SHELL:表示当前用户的shell类型
- HISTSIZE:表示历史记录数
- MAIL:表示当前用户的邮件存放目录
- PATH:该变量决定了shell将到哪些目录中寻找命令或程序
- PWD:表示当前目录
- LANG:这是与语言相关的环境变量,多语言环境可以修改此环境变量
- HOME:表示当前用户的家目录
- LOGNAME:表示当前用户的登录名。
-
命令set
- set命令与env命令类似,也可以输出环境变量,同时也能显示用户自定义的变量
- 自定义变量只能在当前的shell中生效,使用bash在打开一个shell后,之前预设的变量会不存在。如果想让设置的环境变量一直生效?
- 一是允许系统内所有用户登录后都能使用该变量。具体的操作方法是在/etc/profile文件的最后一行加入export [预设自定义变量],然后允许source /etc/profile就可以生效了
- 二是仅允许当前用户使用该变量。具体的操作方法是在主用户目录下的.bashrc文件的最后一行加入export [预设自定义变量],然后允许source 。bashrc就可以生效了
- 若想取消某个变量只要输入 unset 变量名 即可
系统环境变量与个人环境变量的配置文件
- /etc/profile:这个文件预设了几个重要的变量,例如PATH,USER,LOGNAME,MAIL等
- /etc/bashrc:这个文件主要预设umask以及PS1。这个PS1是我们在输入命令时前面的那串字符。例:[[email protected] ~] #。 \u是用户,\h是主机名,\w是指当前目录,$是指字符#
- 隐藏文件:
- .bash_profile:该文件定义了用户的个人化路径与环境变量的文件名称
- .bashrc:该文件包含专属自己的shell和bash信息
- .bash_history:该文件用于记录命令历史
- .bash_logout:当退出shell时,会执行该文件。可以在该文件中存放一些清理的工作
Linux shell中的特殊符号
- *:代表零个或多个任意字符
- ?:代表一个任意的字符
- #:注释符号
- \:脱义字符,这个字符会将后面的特殊字符还原为普通字符
- |:管道符:将前面命令的输出作为后面命令的输入
-
命令cut:
- 作用:用来截取某一个字段
- 命令格式:cut -d ‘分割字符’ [-cf] n(数字)
- 参数选项:
- -d:后面跟分隔字符,要用单引号括起来
- -c:后面接的是第几个字符
- -f:后面接的是第几个区域(列)
-
命令sort:
- 作用:用作排序。
- 命令格式:sort [-t 分隔符] [-kn1,n2] [-nru]
- 参数选项:
- -t:后面跟分隔字符。
- -n:表示使用纯数字排序
- -r:表示反向排序
- -u:表示去重复
- -kn1,n2:表示由n1区间排序到n2区间
-
命令wc:
- 作用:wc命令用于统计文档的行数,字符数或词数
- 参数选项:
- -l:统计行数
- -m:统计字符数
- -w:统计词数
-
命令uniq:
- 作用:用来删除重复的行。
- 参数选项:
- -c:用来统计重复的行数,并把行数写在前面
- 在使用uniq前,必须先给文件排序,否则不管用
-
命令tee:
- tee命令后面跟文件名,作用类似于重定向 >
-
命令tr:
- 作用:用于替换字符,常用来处理文档中的特殊符号。
- 命令格式:tr [被替换字符] [替换字符]
- 参数选项:
- -d:表示删除某个字符,后面跟要删除的字符
- -s:表示删除重复的字符
-
命令split:
- 作用:用来切割文档
- 参数选项:
-
-b:表示依据大小来分割文档,单位为byte。
split -b 切割大小 切割文件 (目标文件名)
-
-l:表示依据行数来分割文档
split -l 行数 切割文件 (目标文件名)
-
-
特殊符号
- 符号$可作为变量前面的标识符
-
符号;作为命令与命令之间的分隔符,可以在一行运行多个命令
command1 ;command2,不管command1是否成功都执行command2
- 符号~表示用户的家目录
- 符号&:若想把一条命令放到后台执行,则需要加上符号&
- 符号[]:中括号内为字符组合,代表字符组合中的任意一个
- 符号&&:command1 && command2,不管command1成功后执行command2,否则不执行
- 符号||:command1 && command2,不管command1成功后不执行command2,否则执行command2