Linux学习(二十一)Shell基础(一)认识shell、命令历史、命令补全、别名、通配符、管道符与前后台控制

前言

这个系列我们学习shell的基础知识。

一、认识shell

我们经常使用的终端,其实就是一个shell。Bourne开发的shell原本叫shell,后来再版Bourne Again Shell叫做Bash。我们通常使用的shell就是Bash。

二、命令历史

history命令能够记录我们使用过的命令:

[[email protected] ~]# history|tail -n3
  803  history|tail -n3
  804  history
  805  history|tail -n3

history -c能清除我们的history命令:

[[email protected] ~]# history -c
[[email protected] ~]# history
    1  history

我们退出终端,然后再进来,看是不是真的清空了:

实验发现,history -c并不是真的清空了,只是在内存里清除而已。

每个用户的history记录保存在家目录的.bash_history文件里,我们看看:

[[email protected] ~]# vim .bash_history

我们看每条命令前面都有一个编号,我们可以使用这个编号,便捷的使用该条命令:

  809  vim .bash_history history
  810  history
[[email protected] ~]# !809

!!就是使用history中最后一条。

!vim会查找history中最后一条以vim开头的命令并执行。

现在我们讲关于history的两个变量。一个是HISTSIZE,一个是HISTTIMEFORMAT。我们看看这两个变量的值各是多少:

[[email protected] ~]# echo $HISTSIZE
1000
[[email protected] ~]# echo $HISTTIMEFORMAT

[[email protected] ~]#

我们可以在BASH中直接修改他们的值:

[[email protected] ~]# HISTSIZE=2000
[[email protected] ~]# ECHO $HISTSIZE
-bash: ECHO: 未找到命令
[[email protected] ~]# echo $HISTSIZE
2000
[[email protected] ~]# $HISTTIMEFORMAT=‘%Y%m%d %H:%M%s‘
-bash: =%Y%m%d %H:%M%s: 未找到命令
[[email protected] ~]# HISTTIMEFORMAT=‘%Y%m%d %H:%M%s‘
[[email protected] ~]# echo $HISTTIMEFORMAT
%Y%m%d %H:%M%s
[[email protected] ~]# history|tail -n3
  826  20171115 10:331510713238HISTTIMEFORMAT=‘%Y%m%d %H:%M%s‘
  827  20171115 10:341510713243echo $HISTTIMEFORMAT
  828  20171115 10:341510713253history|tail -n3

但是这样的值,在我们退出终端后再进来就会消失:

 821  echo $HISTTIMEFORMAT
 822  :q
 823  exit

如果要保存变量的值,我们可以使用在/etc/profile文件中修改,并source命令或者重新进入终端让改动生效。

vim /etc/profile
#在最末尾添加:unset -f pathmunge
HISTTIMEFORMAT=‘%Y%m%d %H:%M:%s‘

使用命令source /etc/profile,或者退出后重新登录:

Last login: Wed Nov 15 10:35:09 2017 from 192.168.38.1
[[email protected] ~]# echo $HISTSIZE
2000
[[email protected] ~]# ECHO HISTTIMEFORMAT
-bash: ECHO: 未找到命令
[[email protected] ~]# echo $HISTTIMEFORMAT
%Y%m%d %H:%M:%s
[[email protected] ~]# hist|tail -n3
-bash: hist: 未找到命令
[[email protected] ~]# history|tail -n3
  836  20171115 10:41:1510713665echo $HISTTIMEFORMAT
  837  20171115 10:41:1510713671hist|tail -n3
  838  20171115 10:41:1510713677history|tail -n3

发现修改已经永久生效了。

三、命令补全和别名

要点:

tab敲一下,如果没有相同的内容就会直接补全,如果有相同的就会列出选项。

但是如果想参数也能补全,就需要安装额外的插件:bash-completion:

yum install -y bash-completion

alias的作用是给命令起别名,它的简单用法:

[[email protected] ~]# alias lsi=‘ls -l‘
[[email protected] ~]# lsi
总用量 80
drwxr-xr-x. 3 root root    28 10月 31 22:10 1
-rw-r--r--. 1 root root  1008 11月  5 20:08 1bak.zip
-rw-r--r--. 1 root root 10240 11月  5 18:43 1.tar

一般个人的alias放在~/.bashrc文件中:

# .bashrc

# User specific aliases and functions

alias rm=‘rm -i‘
alias cp=‘cp -i‘
alias mv=‘mv -i‘

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
~                        

在/etc/profile.d目录中也有很多别名。比如:vim /etc/profile.d/colors.sh文件中就有这样的别名定义:

  alias ll=‘ls -l‘ 2>/dev/null
  alias l.=‘ls -d .*‘ 2>/dev/null

四、通配符

要点:

2>err代表错误输出。wc -l < 1.txt很少用,表示将1.txt的内容输入到wc -l。2>&1表示正确错误都输出到1.txt,也可以这样表示:

[[email protected] profile.d]# cd ~
[[email protected] ~]# ls
1         1.tar      2      3       3.tar.gz  4.tar       4.zip  5.zip  anaconda-ks.cfg.xz
1bak.zip  1.zip.bz2  2.tar  33.tar  3.zip     4.tar.bip2  5      6
[[email protected] ~]# ls 1 333 >> 7.txt 2>&1
[[email protected] ~]# cat 7.txt
ls: 无法访问333: 没有那个文件或目录
1:
1.txt
2

正确和错误分开记录:

[[email protected] ~]# ls 1 333 >> 8.txt 2>> 9.txt
[[email protected] ~]# cat 8.txt
1:
1.txt
2
[[email protected] ~]# cat 9.txt
ls: 无法访问333: 没有那个文件或目录 

五、管道符

管道符的作用是将前面命令的标准输出作为后面命令的标准输入,比如:

[[email protected] ~]# ls|wc -l
21
[[email protected] ~]# ls|cat
1
1bak.zip
1.tar
[[email protected] ~]# ls|cat -n3
cat:无效选项 -- 3
Try ‘cat --help‘ for more information.
[[email protected] ~]# ls |head -n 3
1

xargs和管道符的区别是:xargs是拿前面的输出作为参数,而管道符只是作为标准的输入。例子:

[[email protected] ~]# echo ‘--help‘|cat
--help
[[email protected] ~]# echo ‘--help‘|xargs cat
用法:cat [选项]... [文件]...
将[文件]或标准输入组合输出到标准输出。

  -A, --show-all           等于-vET
  -b, --number-nonblank    对非空输出行编号
  -e                       等于-vE
  -E, --show-ends          在每行结束处显示"$"
  -n, --number             对输出的所有行编号
  -s, --squeeze-blank      不输出多行空行
  -t                       与-vT 等价
  -T, --show-tabs          将跳格字符显示为^I
  -u                       (被忽略)
  -v, --show-nonprinting   使用^ 和M- 引用,除了LFD和 TAB 之外
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

如果没有指定文件,或者文件为"-",则从标准输入读取。

示例:
  cat f - g  先输出f 的内容,然后输出标准输入的内容,最后输出g 的内容。
  cat        将标准输入的内容复制到标准输出。

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
请向<http://translationproject.org/team/zh_CN.html> 报告cat 的翻译错误
要获取完整文档,请运行:info coreutils ‘cat invocation‘

六、进程控制

要点:

实验:

[[email protected] ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0     12 285228   2784 588204    0    0     2     9   64  103  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     0   50   86  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     0   52   81  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     0   43   70  0  0 100  0  0
^Z
[1]+  已停止               vmstat 1
[[email protected] ~]# jobs
[1]+  已停止               vmstat 1
[[email protected] ~]# bg 1
[1]+ vmstat 1 &
[[email protected] ~]#  3  0     12 285228   2784 588220    0    0     0     0  443  710  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     0   52   87  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     0   47   74  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     0   47   77  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     3   46   78  0  1 99  0  0
 0  0     12 285228   2784 588220    0    0     0     0   47   79  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     0   55   84  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     0   50   80  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     0   52   76  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     0   49   82  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     4   67   97  1  1 98  0  0
 0  0     12 285228   2784 588220    0    0     0     0   44   74  0  0 100  0  0
 0  0     12 285228   2784 588220    0    0     0     0   45   72  0  0 100  0  0
f 0  0     12 285228   2784 588220    0    0     0     0   55   83  0  0 100  0  0
g 0  0     12 285228   2784 588220    0    0     0     0   53   80  0  1 99  0  0
 0  0     12 285228   2784 588220    0    0     0     0   46   77  0  0 100  0  0
1
-bash: fg1: 未找到命令
[[email protected] ~]#  0  0     12 285148   2784 588220    0    0     0     0   70  103  0  0 100  0  0
f 0  0     12 285148   2784 588220    0    0     0     0   54   85  0  0 100  0  0
g
vmstat 1
 0  0     12 285148   2784 588220    0    0     0     0   65   96  0  1 99  0  0
 0  0     12 285148   2784 588220    0    0     0     0   43   75  0  0 100  0  0
 0  0     12 285148   2784 588220    0    0     0     0   46   72  0  0 100  0  0
^Z
[1]+  已停止               vmstat 1
[[email protected] ~]# 

bg命令,能让停止的命令继续在后台运行起来。

时间: 2024-08-07 19:40:16

Linux学习(二十一)Shell基础(一)认识shell、命令历史、命令补全、别名、通配符、管道符与前后台控制的相关文章

Linux学习二:Makefile基础

文首感谢http://www.chinaunix.net 作者:gunguymadman的分享 makefile关系到了整个工程的编译规则.一个工程中的源文件不计数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令. 1.程序的编译和链接一般来说,无论是C.C++.还是pas(pascal语言),

Linux学习日志2-vim使用基础

vim是linux操作系统下的一个文本编辑工具,功能非常强大,但刚学习起来比较复杂.vim的所有功能要讲明白得有几百页,在这里只是记录一下vim的一些基本用法. 首先vim打开文件的三种方式: vim +# xxx(#是数字):表示打开xxx文件并将光标定位到指定行. vim -o xx1 xx2 xx3:表示同时打开三个文件,垂直分割显示 vim -O xx1 xx2 xx3:表示同时打开三个文件,水平分割显示 多个文件间跳转:键入ctrl+w后:→向左.←向右.↑向上.↓向下 vim打开文件

攻城狮在路上(叁)Linux(二十一)--- linux磁盘检查 fsck \ badblocks

若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查.这一步是可选的,尽量少用. 使用前的建议:使用fsck命令时,被检查的分区务必不要挂载在系统上. 一.fsck: 命令格式:fsck [-t 文件系统] [-ACay] 设备名称; <== 一般t参数可以不用指定,linux会自动识别 参数说明: -A:根据/etc/fstab的内容,将需要的设备扫描一次,开机时会用到. -a:自动修复有问题的扇区,不再需要一步步按y确认. -y:与-a类似,某些文件系统仅支持-y. -C:检验过程

【git学习二】git基础之git管理本地项目

1.背景 git基础打算分两部分来说,一部分是对于本地项目的管理,第二部分是对于远程代码仓库的操作.git执行本地项目管理包括对于相关文件的追踪,暂存区的比较分析,提交,撤销等功能. 2.本地项目管理 首先mkdir一个文件夹,叫做GitTestFile,然后执行下面代码,创建git的管理配置 git init 接着加入如下代码,git add . ,把项目加入跟踪队列 git add . 可以用git status查看状态 加入readme文件,vim readme.txt .输入git st

《Linux学习并不难》文件目录管理(9):mv命令文件和目录改名、移动文件和目录路径

7.9  <Linux学习并不难>文件目录管理(9):mv命令文件和目录改名.移动文件和目录路径 使用mv命令可以对文件和目录更改名称以及移动文件和目录的路径. 命令语法: mv [选项] [源文件|目录] [目标文件|目录] 命令中各选项的含义如表所示. 选项 选项含义 -i 覆盖前询问 -f 覆盖前不询问 -n 不覆盖已存在的文件 例:将/root/pic目录下所有的后缀名为".png"的文件移动到/usr/local/share/pic目录下. [[email pro

Linux(二十一)Shell编程

21.1 为什么要学习Shell编程 (1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. (2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本. (3)对于大数据程序员来说,需要编写Shell程序来管理集群. 21.2 Shell是什么 Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Sh

学习二十一

五周第三次课(3月7日)8.1 shell介绍8.2 命令历史8.3 命令补全和别名8.4 通配符8.5 输入输出重定向Linux Shell基础yum list |grep zsh 命令查询有没有安装该命令命令历史系统内置的变量决定了 系统会存储多少条运行的命令echo $HISTSIZE-c 清空内存中运行过的命令历史,但是不会清空配置文件cat .bash_history 查看操作记录历史,但是会在你退出终端的时候存储进去echo $HISTSIZE 查看当前历史能存多少命令如何更改变量,

linux学习二

一周第二次课(5月27日)1.6/1.7 配置IP1.8 网络问题排查因为你的服务器一般情况下都是在机房的,所以我们需要一个IP连接到服务器的,所以要每次连接到linux都是要远程连接.首要问题就是要配置IP地址的问题.在之前安装虚拟机的时候因为是NAT的方式,可以用ip addr自动获取一个ip然后会看到一个获取的ip还可以通过虚拟网络编辑器查看子网地址 在vm里.编辑.虚拟网络编辑器查询到IP地址之后首先要固定IP地址,为了防止下次再次登陆IP登陆不上去通过路径和利用TAB键快速补全代码然后

Shell基础(一):Shell基础应用、简单Shell脚本的设计、使用Shell变量、变量的扩展应用

一.Shell基础应用 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 切换用户的Shell环境       2> 练习命令历史.命令别名       3> 重定向标准输入/输出/错误输出       4> 管道操作实践 步骤: 步骤一:切换用户的Shell环境 若需要临时使用另一种Shell环境,可以直接执行对应的Shell解释器程序,比如只要执行ksh可以切换到ksh命令行环境. [[email protected] ~]# yum -y in