shell介绍,命令历史,命令补全和别名,通配符,输入输出重定向,管道符和做业控制

shell介绍

  • 可使用 yum list |grep zsh 或者 yum list |grep ksh
  • 这样能够搜索 zsh 和 ksh ,有须要的话能够安装
  • 总之,默认使用的就是 .bash shell

命令历史

  • 输入过的命令会被保存在一个文件内
  • 在shell界面,使用 上方向键 能够往上查看以前输入过的命令
  • 这个保存命令的文件地址在用户家目录下面
  • 例子:root 用户的家目录就是 /root
  • 保存过往命令的文件名称是 .bash_history
  • 那么root用户保存过往命令的文件路径就在 /root/.bash_history
  • 使用 history 命令就能够查看记录了多少条过往命令
  • 上图能够看到,输入的最后一条命令是 history
  • 序号是1003,说明.bash_history已经记录了1003条过往命令
  • 不过 .bash_history 最多只能存储1000条命令
  • 往上翻,能够看到,命令是从序号 4 开始的
  • 由于记录到1003条命令,但只能存1000条命令,因此最前面的3条命令被删除了
  • 有一个系统内置的环境变量 HISTSIZE
  • 使用上图命令,能够看到返回的值是 1000
  • 因此 .bash_history 最大记录的命令数量为1000
  • 使用 history -c 命令能够清空当前 .bash_history 的内容
  • 不过 history -c 只是清空内存中的内容,写进硬盘的内容并不会被清空
  • 使用终端时输入的命令都是保存在内存里面的
  • 退出终端的时候才会被写入硬盘
  • HISTSIZE 环境变量能够被修改
  • 能够在 /etc/profile 文件中修改
  • vi 打开 profile 文件,而后找到上图中的这个变量
  • 将变量数值修改成本身想要的数值,而后保存退出
  • 不过如今修改尚未生效,须要执行命令 source /etc/profile
  • 这样修改才会生效,可使用 echo $HISTSIZE 查看是否生效
  • 或者退出终端,而后从新进入后也会生效
  • 若是想把命令输入的时间也记录进 .bash_history
  • 可使用上图的命令,首先赋值给环境变量 HISTTIMEFORMAT
  • "%Y%m%d %H:%M:%S " 表明时间的格式:年月日 时:分:秒
  • 使用 echo $HISTTIMEFORMAT 查看格式的值是否改变了
  • 能够看到下面返回的值是 "%Y/%m/%d %H:%M:%S "
  • 系统默认 HISTTIMEFORMAT 的值为空,因此新建一个终端这个变量的值是为空的
  • 如图,能够看到,再使用 history 命令查看记录在内存里面的过往命令
  • 每一条过往命令都增长了使用时间的记录
  • 若是但愿永久保留这个设置,而不是每次打开终端都要从新设置一遍
  • 能够在 /etc/profile 文件里面设置这一个变量
  • 用 vim 打开 profile
  • 如图,找到 HISTSIZE,在它的下面增长一行,HISTTIMEFORMAT
  • 就把以前设置变量的格式复制到这里,而后保存退出
  • 而后须要 source /etc/profile 一下使其生效
  • 而后从新进入终端
  • 能够发现,默认 HISTTIMEFORMAT 的值已是以前设置的格式了
  • 上图命令是对 .bash_history 文件追加 a 权限
  • 增长 a 权限后,这个文件就只能被追加信息,而不会被删除信息
  • 这样就能够无限的保存命令到这个命令历史文件里面了
  • 可是若是不正常退出终端的话,有可能过往命令会保存不全
  • 正常退出终端须要使用命令 logout 或者 exit

  • 命令 !! 会执行上一条命令,也就是说命令历史里面记录的最后一条命令
  • 好比使用 ls 命令后,再使用 !! 命令
  • 那么就会再执行一次 ls 命令,由于上一条命令是 ls

  • 命令 !n ,n表明数字
  • 使用命令 history 查看命令历史,每一条命令都有一个id号码
  • 例子,使用命令 !768 那么就会执行命令历史里面id为768的命令

  • 命令 !word ,word表明单词
  • 好比在命令历史里面,总共使用了3次 ls /root 命令
  • 而后使用命令 !ls
  • 那么就会执行命令历史里面最后一次 ls 命令
  • 也可使用 !vim 或者 !echo
  • 那么也会执行命令历史里面最后一次使用 vim 或者 echo 的命令

命令补全和别名

  • tab 补全命令或者路径
  • 例子,输入 ls 按两下tab
  • 系统会列出全部以 ls 开头的系统命令出来
  • 上图是全部系统内以 ls 开头的命令
  • 若是输入图中的 lsinit 而后按一下 tab
  • 系统会自动补全后面缺失的 rd 变成 lsinitrd
  • 总结,输入一个命令或者路径
  • 好比 ls 或者 /ro
  • 若是存在多个命令以 ls 开头或者路径以 /ro 开头
  • 那么按两下 tab 就能够把全部目标列出来
  • 若是只存在一个目标,那么按一下tab就能够把剩余的部分补全
  • 如图,输入 /ro 而后按一下tab,系统会自动补全为 /root/

  • 还能够补全命令的参数,不过须要下载一个包
  • 使用上图所示命令安装包,能够得到补全命令参数的功能
  • 安装完包以后,须要先退出终端再从新链接才会生效
  • 如上图,输入 systemctl res 而后按两下 tab
  • 下面出现三个参数选项,rescue, reset_failed, restart
  • 或者输入 systemctl rest 而后按一下tab
  • 就是自动补全为 systemctl restart
  • 这就是能够自动补全命令参数的功能

  • 上图是使用别名
  • 如图,alias restartnet = 'systemctl restart network.service'
  • 这样就把'systemctl restart network.service' 这条命令取了一个别名叫作 restartnet
  • 之后只要运行 restartnet 就等因而运行了'systemctl restart network.service'这条命令
  • 如图,使用 alias 命令就能够查看系统内全部的别名
  • 能够看到刚才取的别名 restartnet 的信息
  • 关于alias别名信息保存的文件位置有两个
  • 用户家目录下的 .bashrc 文件和 /etc/profile.d 目录内的文件
  • 有一些alias信息记录在用户家目录的 .bashrc 文件内
  • 如上图,还有一些alias信息记录在/etc/profile.d目录内的文件内
  • 红色箭头指到的几个文件都存在相关的alias信息
  • 总结,alias信息主要在这两个地方记录

通配符

  • 星号 * 就是通配符,表明任意长度的任意字符,包括字符数字符号等
  • 如图,使用命令 ls *.txt
  • 就把目录下面全部的 .txt 文件显示出来了
  • 由于 * 表明任意长度的字符
  • 因此 *.txt 就表示 任意长度字符 + .txt
  • 因此 ls *.txt 就会列出全部 任意长度字符 + .txt 的文件

  • 还有一个通配符是问号 ?
  • 问号 ? 跟星号 * 的区别是*表明任意长度,?只表明一位字符
  • 如上图,ls *.txt 会列出全部 .txt文件
  • 若是使用 ls ?.txt 只会列出 1.txt,2.txt,3.txt
  • 不会列出 aa.txt ,由于 aa 是两位字符,? 只表明一位字符

  • 如图,还有一种通配符用法是 方括号+数字或者字母
  • ls [0-3].txt 能够显示0到3任意一个数字 + .txt 的文件
  • ls [13].txt 能够显示名称为 1.txt 和 3.txt 的文件
  • ls [0-9a-z].txt 能够显示 0-9任意一个数字 或者 a-z任意一个字母 + .txt 的文件
  • 还能够加上大写字母如 ls [0-9a-zA-Z].txt 能够把属于方括号范围内的字母或数字的.txt文件所有显示出来

  • 如图,还可使用花括号,做用跟方括号相似,可是书写格式不一样
  • 花括号必须写逗号 , 用来间隔不一样的项

输入输出重定向

  • 上图命令就是重定向,cat 1.txt > 2.txt
  • 意思是把 1.txt 文件的内容写入 2.txt 里面,2.txt里面原来的内容会被删除
  • 上图命令就是追加
  • 追加是指,把 1.txt 的内容写入 2.txt
  • 可是 2.txt 原来的内容不会被删除,1.txt的内容写在2.txt内容的后面
  • 如图, 2> 就是错误重定向的符号
  • 重定向通常是把正确执行的信息重定向到一个文件里面
  • lsaaa 这个命令不存在,因此系统返回一个错误信息
  • 若是使用重定向符号 > ,由于这条命令是错误的,并无正确执行
  • 因此重定向是没法生效的
  • 可是系统返回了一个错误信息,2> 符号能够把这条系统返回的错误信息重定向到一个文件里面
  • 上图能够看到,把lsaaa的错误信息 2> 到 a.txt 里面
  • cat a.txt 查看内容,能够看到内容就是系统返回的错误信息

  • 还可使用 追加错误重定向 ,符号是 2>>
  • 错误重定向会把文件原来的内容删除,而后把错误信息写入进去
  • 追加错误重定向 不会把原文件信息删除
  • 而是把错误信息追加到原文件内容的后面
  • 如图,再运行一次 lsaaa 2>> a.txt
  • a.txt 以前已经记录了一条 lsaaa的错误信息
  • 如今追加一条错误信息
  • cat a.txt 内容,能够看到有两条错误信息

  • 重定向 和 错误重定向 是能够同时使用的
  • 重定向 > + 错误重定向 2> = &>
  • 重定向 与 错误重定向 同时使用的符号就是 &>
  • 如图,ls [12].txt aaa.txt &> a.txt
  • 这条命令是显示 1.txt和2.txt,还有aaa.txt
  • 1.txt,2.txt都存在,因此能够正确执行
  • aaa.txt这个文件不存在,因此系统会返回错误信息
  • 如今一条命令里面,既要把正确返回的信息记录下来
  • 又要把系统返回的错误信息记录下来
  • 就须要用到 &> 符号,由于 &> == > + 2>
  • cat a.txt 查看内容,能够看到,正确返回的信息跟错误信息都记录了
  • 一样,也能够 正确错误重定向追加,符号是 &>>
  • 符号 &>> == >> + 2>>
  • 如图,从新运行一遍以前的命令,可是符号从 &> 改成 &>>
  • 这样就把 正确错误的信息 追加到 a.txt 之中了
  • 使用cat查看 a.txt 内容
  • 能够看到,此次的正确错误信息被追加到上次的信息后面

  • 还能够这样写,就是分别把 正确的信息 重定向到 1.txt
  • 错误的信息 重定向到 a.txt
  • cat 分别查看 1.txt 和 a.txt 内容
  • 能够看到正确记录了 正确返回信息 跟 错误返回信息
  • 这样就把 正确返回 和 错误返回 分别重定向到不一样的文件里面了

  • wc -l 1.txt 能够查看文本文档的行数
  • wc -l < 1.txt 是输入重定向
  • 就是把文件内容重定向到命令后面,只对命令有效,不能文件对文件
  • 几乎不会用到,作个了解就行

管道符和做业控制

  • 管道符 | ,做用就是把左边命令的结果,做为右边命令的做用对象
  • 如图,cat 1.txt |wc -l
  • 首先左边命令 cat 1.txt 会输出一些文本
  • 输出的文本会做为 wc -l 的做用对象
  • wc -l 的做用是显示文本的行数
  • cat 1.txt 输出了一个文本对象
  • wc -l 会对这个文本对象产生做用
  • 也就是说显示这个文本对象的行数

  • ctrl + z 能够暂停一个任务
  • 好比在编辑一个文件,可是须要查看另一个文件
  • 这时候能够不保存退出,而是暂停当前任务
  • 如图,正在编辑 1.txt
  • 使用 ctrl + z 暂停当前任务
  • 能够看到,出现一行显示 已中止 的信息
  • 如图,编辑 2.txt 而后使用 ctrl + z 暂停任务
  • 出现中止信息,前面的序号是 2 , 1.txt的中止信息前面的序号是 1
  • 如今已经有两个任务被暂停了
  • 使用命令 jobs 就能够查看有多少任务被暂停了
  • 结果显示了两个被暂停的任务信息
  • 如今若是想回到被暂停的任务里面,继续任务
  • 可使用 fg + 任务id 的办法回到任务
  • 若是只有一个任务,直接 fg 就能够回到任务
  • 若是想回到 任务2 可使用 fg 2
  • 若是想回到 任务1 可使用 fg 1
  • 还可使用 bg 命令把任务放到后台去
  • fg 命令是把任务放到前台来
  • bg 就能够把命令放到后台去
  • 进入后台的命令能够继续运行,由于不在前台
  • 因此可能没法看到
  • 把编辑 2.txt 的任务放到后台去了
  • 使用 bg 2 ,由于这个任务的id是2
  • 若是只有一个任务,直接 bg 就能够放到后台了
  • 显示信息能够看到,任务不是中止的,暂停任务会显示任务已中止的信息
  • 不管把任务放到前台仍是后台,任务都会从中止状态恢复
  • 存在多个任务的时候,直接fg或者bg,目标对象是最后一个任务

  • 还可使用命令方式直接后台运行
  • sleep 100 能够暂停系统100秒,什么事都不干
  • 在前台的时候,效果是命令行消失,不能输入命令
  • 100 秒后才恢复,在后台的话就没什么做用了
  • 直接使用命令 sleep 100 & 命令后面加上符号 &
  • 这样命令 sleep 100 会直接在后台运行
  • 其它命令也能够加 & 使命令直接在后台运行
  • jobs 只能在当前终端查看
  • 开第二个终端使用jobs没法看到上一个终端的相关信息
相关文章
相关标签/搜索