欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux shell基础1

程序员文章站 2022-07-12 12:11:33
...

8.1 shell介绍

  • shell是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具(命令解释器)
  • 支持特定的语法,比如逻辑判断、循环
  • 每个用户都是自己的shell,在centos7中默认的shell为bash 

Linux shell基础1

  • 系统中还有zsh与ksh,使用起来类似,但是 有些细节上的差异。

Linux shell基础1


8.2 命令历史

  • 敲过的命令会保存在用户的家目录下.bash_history中,这样就能通过上下方向键来查看之前敲的命令。/root/bash_history //root用户
  • 使用history命令可以查看之前敲过的命令,系统默认最大记录数为1000条。执行echo $HISTSIZE来查看最大记录数。 

Linux shell基础1

  • 有时候命令数超过1000时,现在的命令历史暂时存在云内存中,只有用户正常退出shell时,在当前shell中运行的命令才会保存到.bash_history文件中。 
  • history -c 可以清空当前内存里面的命令历史清空,但不会清空.bash_history文件中的命令历史。
  • 变量HISTSIZE/etc/profile中去修改。修改完成后重新进终端或是执行source /etc/profile 才会生效。

Linux shell基础1

  • 默认执行的命令是不能看到执行时间的,要想记录某条命令执行的时间可以将变量重新赋值即可
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "

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

Linux shell基础1

  • 命令历史永久保存,不想被人修改它。可以加上特殊权限,让它只能追加,不能删除。
chattr +a /root/.bash_history 
  • 与命令历史有关的特殊字符! 
  1. !!:连续2个!表示执行上一条命令 。
  2. !n:这里的n是数字,表示执行命令历史中的第n条命令。
  3. !字符串:例:!ls 表示执行命令历史中最近一次以ls开头的命令 

8.3 命令补全和别名

  • 按Tab键可以帮我们补全一个参数、一个路径或者一个文件名。连续按2次,则系统会把所有的命令或文件名都列出来。
  • 想在centos7中补全参数,需要安装bash-completion包,然后重启系统或者重新登录终端生效。 
  • alias是系统特有的功能之一,可以通过alias把一个经常使用且很长得命令取一个简单易记的新名字。

Linux shell基础1

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

Linux shell基础1


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> 等于&> 

Linux shell基础1

ls {1,2}.txt aaa.txt > 3.txt 2>a.txt //表示正确与错误的输出分别重定向
  • 输入重定向<
wc -l < 2.txt //输入的对象只能是命令,不能是文件。

8.6 管道符和作业控制

  • 管道符的作用是将前面命令的输出传递给后面的命令 

Linux shell基础1

  • 作业控制 

当运行进程时,可以使用(Ctrl+z)来暂停它,然后使用 fg 命令来恢复它或利用 bg 命令使它运行到后台运行,此外也可以使用ctrl+c来终止。 

(1)使用ctrl +z来暂停运行的进程,使用jobs来查看都有哪些进程被暂停了

Linux shell基础1

(2)使用 fg 命令来恢复。默认是从最近暂时的程序来恢复,如果需要指定恢复,后面可以跟它的id号 

Linux shell基础1

(3)使用 bg 命令将程序仍在后台运行,会带有特殊字符 & ,当程序被切换到后台时,是不影响其他的操作的。要终止该程序需要先将他恢复到前台(前台时时不能执行其他命令的),然后才能终止。 

Linux shell基础1

(4)在当前终端下进行的作业控制动作,其他的终端使用jobs命令是查看不到的,但是可以查看到进程的。 


8.7-8.8 shell变量(上下)

之前学习过的环境PATH,它是shell预设的一个变量。通常shell预设的变量都是大写的。变量就是使用一个较简单 的字符串来替代某些具有特殊意义的设定以及数据。 

  •  env 命令用来查看系统常用的变量。 

Linux shell基础1

(2)set命令可以查看系统内置的变量,还可以查看用户自定义的变量

(3)用户自定义变量 

Linux shell基础1

(4)变量名规则:字母、数字下划线、首位不能为数字。变量值特殊符号时需要用单引号括起来。 

(5)变量的累加,当变量中有其他的变量是可以将该变量使用双引号单独引起来。 

Linux shell基础1

(6)查看现在处于哪个终端下,可以先使用w命令查看到TTY,然后使用echo $SSH_TTY来查看自己处于哪个TTY下 

Linux shell基础1

(7)在当前终端下设置的变量在其他的shell下是没有的,因为还没有进行全局变量。在一个终端下执行bash就进入到了一个子shell,也就是打开了另一个shell。 

Linux shell基础1

(8)要想使该终端下的所有子shell都能识别某个变量,需要进行全局变量。并且是向下生效的。

[aaa@qq.com ~]# export xzl=xuzhilin   //将xzl=xuzhilin进行全局变量

Linux shell基础1

(9)unset命令用来取消自定义的变量。

Linux shell基础1

 


 

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中定义的

Linux shell基础1


 

课堂笔记:

 

将网络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:以正常方式结束一个任务