Linux shell基础1
8.1 shell介绍
- shell是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具(命令解释器)
- 支持特定的语法,比如逻辑判断、循环
- 每个用户都是自己的shell,在centos7中默认的shell为bash
- 系统中还有zsh与ksh,使用起来类似,但是 有些细节上的差异。
8.2 命令历史
- 敲过的命令会保存在用户的家目录下.bash_history中,这样就能通过上下方向键来查看之前敲的命令。
/root/bash_history //root用户
- 使用history命令可以查看之前敲过的命令,系统默认最大记录数为1000条。执行
echo $HISTSIZE
来查看最大记录数。
- 有时候命令数超过1000时,现在的命令历史暂时存在云内存中,只有用户正常退出shell时,在当前shell中运行的命令才会保存到.bash_history文件中。
- history -c 可以清空当前内存里面的命令历史清空,但不会清空.bash_history文件中的命令历史。
- 变量HISTSIZE在/etc/profile中去修改。修改完成后重新进终端或是执行
source /etc/profile
才会生效。
- 默认执行的命令是不能看到执行时间的,要想记录某条命令执行的时间可以将变量重新赋值即可
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
需要注意赋值的结果只在当前终端下生效。要想在下次登录时也生效,可以把上面这条命令写入到.bash_history中。
- 命令历史永久保存,不想被人修改它。可以加上特殊权限,让它只能追加,不能删除。
chattr +a /root/.bash_history
- 与命令历史有关的特殊字符!
- !!:连续2个!表示执行上一条命令 。
- !n:这里的n是数字,表示执行命令历史中的第n条命令。
- !字符串:例:!ls 表示执行命令历史中最近一次以ls开头的命令
8.3 命令补全和别名
- 按Tab键可以帮我们补全一个参数、一个路径或者一个文件名。连续按2次,则系统会把所有的命令或文件名都列出来。
- 想在centos7中补全参数,需要安装bash-completion包,然后重启系统或者重新登录终端生效。
- alias是系统特有的功能之一,可以通过alias把一个经常使用且很长得命令取一个简单易记的新名字。
- 直接执行alias可以列出所有的alias,包括自定义的。这些alias存在于用户家目录下的.bashrc和/etc/profile.d/下
- 取消alias,可以使用unalias+定义的名字
8.4 通配符
- 在bash下
(1)使用*来匹配零个或多个字符。
(2)使用?来匹配一个字符。
(3)[0-9] 表示指定范围,方括号里面的字符任选其一。
(4){ }花括号的作用与[ ]方括号类似。其中的字符用“,”分开
8.5 输入输出重定向
- 输入重定向用于改变命令的输入,输出重定向用于改变命令的输出,后者更常用
- 输出重定向:>
cat 1.txt > 2.txt //查看到的1.txt文件内容重定向到2.txt
- 追加重定向:>>
cat 2.txt >> 3.txt //表示将2.txt的文件内容追加到3.txt 但不会删除3.txt原来的文件内容。
- 错误重定向: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 管道符和作业控制
- 管道符的作用是将前面命令的输出传递给后面的命令
- 作业控制
当运行进程时,可以使用(Ctrl+z)来暂停它,然后使用 fg 命令来恢复它或利用 bg 命令使它运行到后台运行,此外也可以使用ctrl+c来终止。
(1)使用ctrl +z来暂停运行的进程,使用jobs来查看都有哪些进程被暂停了
(2)使用 fg 命令来恢复。默认是从最近暂时的程序来恢复,如果需要指定恢复,后面可以跟它的id号
(3)使用 bg 命令将程序仍在后台运行,会带有特殊字符 & ,当程序被切换到后台时,是不影响其他的操作的。要终止该程序需要先将他恢复到前台(前台时时不能执行其他命令的),然后才能终止。
(4)在当前终端下进行的作业控制动作,其他的终端使用jobs命令是查看不到的,但是可以查看到进程的。
8.7-8.8 shell变量(上下)
之前学习过的环境PATH,它是shell预设的一个变量。通常shell预设的变量都是大写的。变量就是使用一个较简单 的字符串来替代某些具有特殊意义的设定以及数据。
- env 命令用来查看系统常用的变量。
(2)set命令可以查看系统内置的变量,还可以查看用户自定义的变量
(3)用户自定义变量
(4)变量名规则:字母、数字下划线、首位不能为数字。变量值特殊符号时需要用单引号括起来。
(5)变量的累加,当变量中有其他的变量是可以将该变量使用双引号单独引起来。
(6)查看现在处于哪个终端下,可以先使用w命令查看到TTY,然后使用echo $SSH_TTY来查看自己处于哪个TTY下
(7)在当前终端下设置的变量在其他的shell下是没有的,因为还没有进行全局变量。在一个终端下执行bash就进入到了一个子shell,也就是打开了另一个shell。
(8)要想使该终端下的所有子shell都能识别某个变量,需要进行全局变量。并且是向下生效的。
[aaa@qq.com ~]# export xzl=xuzhilin //将xzl=xuzhilin进行全局变量
(9)unset命令用来取消自定义的变量。
8.9 环境变量配置文件
- /etc/profile与/etc/bashrc这2个文件属于系统层次【不建议修改它】
- 用户家目录下的/.bash*等文件属于用户层次【可以编辑】
- /etc/profile用户环境变量,交互、登录才执行
- /etc/bashrc用户不用登录,执行shell就生效
- source命令用来加载某个配置文件中的一些配置
- .bash _profile会调用.bashrc ,然后.bashrc又会去调用/etc/bashrc文件
- ~/.bash_logout文件用来定义用户退出时需要做了一些操作。
- PS1是在/etc/bashrc中定义的
课堂笔记:
将网络yum源同步到本地并发布到局域网:
1.reposync 源同步到本地
2.createrepo 创建 repodata repodata 存储了各个rpm包的依赖关系
3. 搭建http的服务器/nginx服务将源发布
4. 配置客户端使用 vim /etc/yum.repos.d/base.repo
关闭防火墙:
systemctl stop firewalld
防火墙关闭开机自启:
systemctl disable firewalld
Linux 可以记录每个用户所使用的命令, 并记录到 ~/.bash_history 文件中
当用户以 bash 登入 Linux 主机后, 系统会主动地由 ~/.bash_history 读取命令历史
当用户注销时, 会将最近的 HISTFILESIZE 个记录写入 ~/.bash_history 文件中
history -c 强制将最近的 HISTFILESIZE 个记录写入到~/.bash_history 文件中
死循环:while ((1==1));do echo nihao >/dev/null;done
echo ${#a[@]} 打印这个变量的数组
命令历史(history)
- 变量: HISTFILE=/home/<user>/.bash_history or /root/.bash_history # 指定 history 文件
- 变量: HISTFILESIZE=1000 # history 文件最大的命令记录条数
- 变量: HISTSIZE=1000 # 当前环境最大的命令记录条数
通配符与特殊符号
- 通配符
符号 |
意义 |
* |
代表0-无穷个 任意字符 |
? |
代表有且只有一个字符 |
[ ] |
代表有且仅有一个字符,且为[...]中所枚举的其中一个, 如 [13579] |
[-] |
同上,只不过是一个范围,如[ 0-9 ],[a-z]等 |
[^] |
有且仅有一个,且不是所枚举的任何字符,如:[^a-zA-Z] 代表该位不是字母 |
- 特殊符
符号 |
内容 |
# |
批注号 |
\ |
转义符号,将特殊字符或通配符还原成一般字符 |
| |
管道符 |
; |
命令衔接符,连续执行两条命令 |
~ |
当前用户家目录 |
$ |
取用变量符号 |
& |
工作控制,将指令变成后台工作 |
! |
逻辑非 |
>、>> |
数据流重定向,output |
<、<< |
数据流重定向,input |
' ' |
单引号,无法引用变量 |
" " |
双引号,可以引用变量 |
` ` |
指令引用,功能同 $(command) |
巧用垃圾桶
Linux 下有一个特殊的设备 /dev/null ,所有被写入该设备的东西都会消失,所以如果有部分信息不想输出至文件,也不想输出至屏幕,那就输出至 /dev/null 吧
kill 命令
如果想要直接移除后台的任务怎么做?
---用 kill
kill 的用法
kill -<signal> %<job_num>
或
kill -<signal> <PID>
常用 signal
-1:重新读取参数的配置文件(类似 reload)
-9:立即强制删除一个任务
-15:以正常方式结束一个任务
上一篇: Shell数组应用解析以及对脚本调试操作