11.5 预习笔记 shell基础知识

8.1 shell

11.5 预习笔记 shell基础知识
shell是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具(命令解释器)
硬件类似人体躯体 内核类似人体大脑 shell类似人体五官
每个用户都是自己的shell,在centos7中默认的shell为bash

11.5 预习笔记 shell基础知识

8.2 命令历史

敲过的命令会保存在用户的家目录下.bash_history中,这样就能通过上下方向键来查看之前敲的命令。/root/bash_history //root用户
使用history命令可以查看之前敲过的命令,系统默认最大记录数为1000条。执行echo $HISTSIZE来查看最大记录数。
11.5 预习笔记 shell基础知识
有时候命令数超过1000时,现在的命令历史暂时存在云内存中,只有用户正常退出shell时,在当前shell中运行的命令才会保存到.bash_history文件中。

history -c 可以清空当前内存里面的命令历史清空,但不会清空.bash_history文件中的命令历史。

变量HISTSIZE在/etc/profile中去修改。修改完成后重新进终端或是执行source /etc/profile 才会生效。
11.5 预习笔记 shell基础知识
默认执行的命令是不能看到执行时间的,要想记录某条命令执行的时间可以将变量重新赋值即可

HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "

需要注意赋值的结果只在当前终端下生效。要想在下次登录时也生效,可以把上面这条命令写入到.bash_history中。

与命令历史有关的特殊字符!
!!:连续2个!表示执行上一条命令
11.5 预习笔记 shell基础知识
!n :这里的n是数字,表示执行命令历史中的第n条命令。
11.5 预习笔记 shell基础知识
!字符串(字符串≥1):例:!ls 表示执行命令历史中最近一次以ls开头的命令
11.5 预习笔记 shell基础知识

8.3 命令补全和别名

按Tab键可以帮我们补全一个参数、一个路径或者一个文件名。连续按2次,则系统会把所有的命令或文件名都列出来。

想在centos7中补全参数,需要安装bash-completion包,然后重启生效。

alias是系统特有的功能之一,可以通过alias把一个经常使用且很长得命令取一个简单易记的新名字。
11.5 预习笔记 shell基础知识

直接执行alias可以列出所有的alias,包括自定义的。这些alias存在于用户家目录下的.bashrc和/etc/profile.d/下

11.5 预习笔记 shell基础知识
取消alias,可以使用unalias+定义的名字

8.4 通配符

在bash下

使用*来匹配零个或多个字符。
使用?来匹配一个字符。
[0-9] 表示指定范围,方括号里面的字符任选其一
11.5 预习笔记 shell基础知识
{ }花括号的作用与[ ]方括号类似 字符用,分开
11.5 预习笔记 shell基础知识

8.5 输入输出重定向

输入重定向用于改变命令的输入,输出重定向用于改变命令的输出,后者更常用
输出重定向>11.5 预习笔记 shell基础知识
cat 1.txt > 2.txt //查看到的1.txt文件内容重定向到2.txt

追加重定向>>
cat 2.txt >> 3.txt //表示将2.txt的文件内容追加到3.txt 但不会删除3.txt原来的文件内容。

11.5 预习笔记 shell基础知识

-错误重定向 2>

ls x.txt 2>a.txt //表示将ls命令的错误信息指定到a.txt中,而不会在屏幕上显示

错误追加重定向 2>>

正确、错误重定向全部重定向一个文件中,并支持追加.。 >+2> 等于&>

ls {1,2}.txt aaa.txt > 3.txt 2>a.txt        //表示正确与错误的输出分别重定向

输入重定向<

wc -l < 2.txt             //输入的对象只能是命令,不能是文件

8.6 管道符和作业控制

管道符的作用是将前面命令的输出专递给后面的命令
11.5 预习笔记 shell基础知识
作业控制
当运行进程时,可以使用(Ctrl+z)来暂停它,然后使用fg命令来恢复它或利用bg命令使它运行到后台运行,此外也可以使用ctrl+r来终止。
使用ctrl +z来暂停运行的进程,使用jobs来查看都有哪些进程被暂停

11.5 预习笔记 shell基础知识
使用fg命令来恢复。默认是从最近暂时的程序来恢复,如果需要指定恢复,后面可以跟它的id号
11.5 预习笔记 shell基础知识
使用bg命令来使某个程序在后台运行,会带有特殊字符&,当程序被切换到后台时,是不影响其他的操作的。要终止该程序需要先将他恢复到前台,然后才能终止。

8.7-8.8 shell变量

之前学习过的环境PATH,它是shell预设的一个变量。通常shell预设的变量都是大写的。变量就是使用一个较简单 的字符串来替代某些具有特殊意义的设定以及数据。
11.5 预习笔记 shell基础知识
预设的变量除了PATH外,可以使用env命令来查看系统常用的变量。
11.5 预习笔记 shell基础知识
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 前用户Shell类型
LANG 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PWD 当前目录

set命令可以查看系统内置的变量,还可以查看用户自定义的变量
11.5 预习笔记 shell基础知识
用户自定义变量

  1. 要想系统内所有用户登录后都能使用该变量
    需要在/etc/profile文件最末行加入 “export myname=Aming” 然后运行”source /etc/profile”就可以生效了。此时你再运行bash命令或者直接su - test账户看看。
    2.只想让当前用户使用该变量
    需要在用户主目录下的.bashrc文件最后一行加入“exportmyname=Aming” 然后运行”source .bashrc”就可以生效了。这时候再登录test账户,myname变量则不会生效了。上面用的source命令的作用是,讲目前设定的配置刷新,即不用注销再登录也能生效。

在linux下设置自定义变量有哪些规则呢?
第一 设定变量的格式为”a=b”,其中a为变量名,b为变量的内容,等号两边不能有空格;
第二 变量名只能由英、数字以及下划线组成,而且不能以数字开头;
第三 当变量内容带有特殊字符(如空格)时,需要加上单引号;变量内容中本身带有单引号,这就需要用到双引号了。
第四. 如果变量内容中需要用到其他命令运行结果则可以使用反引号;
第五. 变量内容可以累加其他变量的内容,需要加双引号;
双引号 单引号不可混淆

8.9 环境变量配置文件

tc/profile :这个文件预设了几个重要的变量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umas等等。

/etc/bashrc :这个文件主要预设umask以及PS1。这个PS1就是我们在敲命令时,前面那串字符 linux系统PS1就是 [[email protected] ~]#

\u就是用户,\h 主机名, \W 则是当前目录,$就是那个#,如果是普通用户则显示为$
.bash_profile :定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。
.bashrc :该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。例如你可以将用户自定义的alias或者自定义变量写到这个文件中。
.bash_history :记录命令历史用的。
.bash_logout :当退出shell时,会执行该文件。可以把一些清理的工作放到这个文件中。

扩展:
命令历史永久保存,不想被人修改它。可以加上特殊权限,让它只能追加,不能删除。
chattr +a /root/.bash_history