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 
  • 与命令历史有关的特殊字符! 
  1. !!:连续2个!表示执行上一条命令 。
  2. !n:这里的n是数字,表示执行命令历史中的第n条命令。
  3. !字符串:例:!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都能识别某个变量,需要进行全局变量。并且是向下生效的。

[root@localhost ~]# 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:以正常方式结束一个任务

 

 

 

 

猜你喜欢

转载自blog.csdn.net/xzl18779631005/article/details/81712093