###0、shell 用户与内核进行交互的接口,本身是C语言编写的程序,一种命令解释器。
- sh:bourne shell是最早的shell,创造者叫Steven Bourne,为纪念所以叫Broune Shell,简称sh。
- Bash:Bourne Again Shell,是sh(Bourne Shell)的增强版。
###1、记录历史命令 与 相关字符'!' linux预设可以记录1000条历史命令,这些保存在用户的家目录的.bash_history文件中。 当用户正常退出shell时,在当前shell中运行的命令才会保存至.bash_history文件。 history命令如果未改动环境变量,默认可以把最近1000条命令历史打出来。
- !! 两个连续的'!',表示执行上一条命令。
- !n n指数字,表示执行命令历史中的第n条命令。 执行前可使用 'history|grep n' 确认包含n的命令,例如n为99,打印出99,199,299...
- !字符串 字符串大于等于1,例如'!c'表示执行命令历史中最近一次以'c'开头的指令。
###2、指令与文件名补全
- 按tab键,系统帮忙补全一个指令或一个文件名,
- 按两次tab,系统会把所有指令或文件名都列出来。
###3、别名 'alias'指令,自定义想要的指令别名。
-
定义指令别名 alias [命令别名]=['具体的命令']
-
解除设置的别名 unalias [命令别名]
-
查看系统预设别名 alias
###4、通配符
* 匹配0个或多个字符
? 匹配一个字符
###5、输入输出重定向
- 输入重定向用于改变命令的输入,'<'
- 输出重定向用于改变命令的输出。'>'
- 错误重定向 '2>'
- 追加重定向 '>>'
###6、管道符 '|' 把前面的命令运行的结果丢给后面的错误。
###7、作业控制 当运行一个进程时,
- 同一个shell中
- 暂停(按crtl+z),多个被暂停的任务会有编号,可用jobs命令查看,
- 恢复(fg命令),可恢复暂停或后台运行,
- 后台运行(bg命令)(可用jobs命令查看),
- 终止(按crtl+c)。
- 另一个shell中(使用bash命令即可再开一个shell) jobs不能看的暂停或后台运行的任务,需先知道pid,然后使用kill命令杀死进程。
- 使用&把任务丢进后台运行时,它会显示pid;
- 如果不知道pid,可用 'ps aux'找到该进程,具体可用'ps aux|grep [命令名]', 然后'kill [pid]',如遇杀不死的进程,可使用'kill -9 [pid]'.
###8、变量 简单来说,变量是使用一个简单的字符串来替代某些具有特殊意义的设定以及数据。 通常shell预设的变量都是大写。
-
可使用 echo 命令显示变量的值,'echo $[变量名]'.
-
使用 env 命令即可列出系统预设的全部环境变量,不过登录用户不同显示也不同。
-
使用 set 命令可显示系统预设的全部变量以及用户自定义的变量。
-
常见环境变量
- PATH 决定shell去哪些目录中寻找程序或命令
- HOME 当前用户主目录
- HISTSIZE 历史记录数
- LOGNAME 当前用户的登录名
- HOSTNAME 主机名称
- SHELL 当前用户的shell类型
- LANG 语言相关的环境变量,多语言可修改此环境变量
- MAIL 当前用户的邮件存放目录
- PWD 当前目录
-
自定义变量
- 只在当前shell有效 [变量名]=[变量值]
- 系统内所有用户有效
-
在'etc/profile'文件最末行加入 'export [变量名]=[变量值]', 例如 echo 'export myname=mirror' >> /etc/profile
-
然后运行 source /etc/profile,(source命令,将目前设定的配置刷新) //此时再运行 bash命令 或 直接 su - [另一个用户] ,可以直接看到结果。
-
-
当前用户有效
- 在当前用户主目录下的'.bashrc'文件最后一行加入'export [变量名]=[变量值]',
- 然后运行 source .bashrc, //完成了
-
自定义变量规则
- 设定变量的格式为'a=b',a是变量名,b是变量内容,等号两边不能有空格;
- 变量名只能以英、数字以及下划线组成,且不能以数字开头;
- 当变量内容含有特殊字符(如空格)时,需要加上单引号,例如 myname='mirror sun'; 当内容本身包含单引号,需加上双引号;
- 如果变量内容需用到其他命令的运行结果则可使用反引号,例如
myname=`pwd`
- 变量内容可以累加其他变量内容,需加双引号,例如 myname="$LOGNAME"mirror;
使用双引号不会取消里面出现的特殊字符本身的作用,
而单引号里的特殊字符全部失去它本身的作用。
- 在当前shell中运行bash后会进入一个新的shell,这个shell就是原来shell的子shell,可用pstree指令查看;
- pstree会把linux系统中所有进程通过树形结构打印出来,例如'pstree |grep bash';
- export 声明变量,让该shell的子shell也知道这个变量,如果export后不加任何变量名,则它会声明所有变量。
- 取消变量 unset [变量名]
###9、系统环境变量与个人环境变量的配置文件
- /etc/profile 预设了几个重要变量,如PATH,USER等;
- /etc/bashrc 主要预设了umask和PS1(敲命令时,前面的那串字符)
- 除两个系统级别的配置文件外,每个用户主目录下还有几个隐藏文件, - .bash_profile 定义用户的个人化路径与环境变量的文件名称,每个用户都可使用该文件输入专用于自己使用的shell信息, 当用户登录时,该文件只执行一次; - .bashrc 该文件包含专用于你shell的bash信息,当登录时以及每次打开新的shell时,该文件将会被读取; - .bash_history 记录命令历史; - .bash_logout 退出shell时,会执行该文件,可以把一些清理的工作放到这个文件中。
###10、linux shell中的特殊符号
* 零个或多个任意字符
? 一个任意字符
# 有注释说明的意思,即#后面的内容会被linux忽略
\ 脱意字符,将后面的特殊字符还原为普通字符
| 管道符,将前面命令的结果丢给后面命令,这里后面的命令,并不是所有命令,一般针对文档操作的命令比较常用,
如 cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk等。
$ 变量前的标识符
!$ 上条命令中的最后一个变量(上条命令中最后出现的东西)
; 同时运行两个或两个以上命令(加在命令之间),都执行
&& 多条命令分隔符,左成功才执行右,否则不执行
|| 多条命令分隔符,左成功右不执行,左失败右执行
~ 用户的家目录
& 把一条命令放在后台执行,则需要加这个符号,通常用于运行时间非常长的情况
> 重定向符号,取代
>> 重定向符号,追加
2> 错误重定向
2>> 错误追加重定向
[] 中括号,中间为字符组合,代表中间字符的任意一个
###11、命令
- cut 用来截取某个字段
- -d 后面跟分割字符,分割字符用单引号括起来
- -c 后面接的是第n个字符(也可以是区间a-b,或多数字)
- -f 后面接的是第n个区块
- sort 排序 不加任何选项,则从首字符向后,依次按ACSII码值比较,最后升序输出,
- -t 分隔符,作用跟 cut -d 一样
- -n 使用纯数字排序
- -r 反向排序
- -u 去重复
- -ka,b 由a区间排序到b区间,可以只写-ka,即对a字段排序(a, b为数字)
- wc 用于统计文档的行数、字符数、词数 不跟任何选项,直接跟文档,则会把行数、词数、字符数依次输出。
- -l 统计行数
- -m 统计字符数
- -w 统计词数
- uniq 去重复行,使用前提需给文件排序(sort)
- -c 统计重复行数,并把行数写在前面
- tee 后跟文件名,类似重定向'>', 但比重定向多一个功能,把文件写进所跟文件中的同时,还显示在桌面上, 常用于 '|' 后
- tr 替换字符,常用于处理文档中的特殊符号
- -d 删除某个字符,后跟要删除的字符
- -s 去除重复字符 常用把小写换大小 tr 'a-z' 'A-Z' 也可替换一个字符 有局限性
- split 切割文档
- -b 依据大小切割文档,单位为byte
- 如果不指定目标文件名,则会以xaa xab这样的文件名来存取切割后的文件,当然我们也可以指定目标文件名,
- -l 依据行数分割文档